部署knight项目

发布CRM你将使用如下软件

  • nginx
  • uWSGI
  • CentOS7
  • CRM项目文件
  • virtualenv
  • supervisor

WSGI、uWSGI

python web服务器开发使用WSGI协议(Web Server Gateway Interface)python

python web项目默认会生成一个wsgi.py文件,肯定好应用模块。mysql

生产环境中使用的是uWSGI,实现了WSGI全部接口,C语言编写,效率很高的web服务器。linux

uWSGI是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。它要作的就是把HTTP协议转化成语言支持的网络协议。好比把HTTP协议转化成WSGI协议,让Python能够直接使用。ios

Nginx

使用nginx是为了它的反向代理功能,项目会经过Django+uWSGI+Nginx进行服务器线上部署。nginx

CentOS

1.打包项目CRM文件夹,压缩文件web

2.经过xftp、scp、lrzsz等上传文件至Centos服务器sql

Linux使用技巧

1.经过xshell或者iTerm等软件,多终端操做你的linxu,这样对uwsgi、nginx、项目代码调试的时候,避免来回切换目录,提供工做效率。shell

2.注意修改了linux软件的配置文件,都要重启服务才能生效。数据库

Virtualenv

构建一个干净,隔离的python解释器环境,防止软件依赖,冲突等问题,建议使用。django

Supervisor

Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它能够很方便的监听、启动、中止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它从新拉起,很方便的作到进程自动恢复的功能,再也不须要本身写shell脚原本控制。

项目部署

上传knight项目到linux服务器

使用xftp工具,进项上传文件夹,将knight代码,传到linux服务器当中

完成python3解释器的安装

完成virtualenvwrapper工具的配置,解决虚拟环境问题

vim ~/.bashrc 
    最下面添加以下内容
    WORKON_HOME=~/Envs   #设置virtualenv的统一管理目录,之后自动下载的虚拟环境,全都放这了
    VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'   #添加virtualenvwrapper的参数,生成干净隔绝的环境
    VIRTUALENVWRAPPER_PYTHON=/opt/python36/bin/python3    #指定python解释器的本体
    #必需要有这个参数,才会在每次登录linux的时候,加载这个虚拟环境脚本工具
    source /opt/python36/bin/virtualenvwrapper.sh #执行virtualenvwrapper安装脚本
1.新建一个knight虚拟环境用于运行  crm项目
        cd /opt/knight
     mkvirtualenv knight

完成centos7下安装配置mariadb数据库,且建立数据库数据,迁移导入knight数据

#centos7底下,mariadb就是mysql数据库,只是包名的不一样
        yum install mariadb-server  mariadb  -y  
        #启动mariadb服务端
        systemctl start mariadb 
        #使用客户端去连接mysql服务端
        1.mysql -uroot -p 
        #注意,linux的数据库,须要对root用户设置远程连接的权限,
        #受权全部的权限,在全部库,全部表  对  root用户在全部的主机上, 设置权限密码是  redhat  
        grant all privileges on *.* to root@'%' identified by 'redhat';
        #刷新受权表
        flush privileges;
    
        
        注意2,linux的防火墙要给关闭,不然windows去连接linux的3306端口可能被拒绝
            
        
        在linux服务端,mysql,导入knight的数据
        1.mysql数据的导出,与导入
        这个命令是在linux/windows中敲的
        mysqldump -u root -p --all-databases >  knight.dump  
        
        2.上传这个数据文件到linux系统的/opt/目录中
        
        3.在linux的mysql,导入这个数据文件
        mysql -uroot -p   <   /opt/knight.dump  
        #会出现这个报错,是兼容问题,不影响
        ERROR 1911 (HY000) at line 5417: Unknown option 'STATS_PERSISTENT'

测试使用linux的python解释器去运行项目(注意要解决解释器的模块问题,才能正常运转项目)

pip3 install django==1.11.16
        pip3 install pymysql
        pip3 install -i htttps://pypi.douban.com/simple django-multiselectield(注意安装的是django-multiselectield,错误提示的是缺乏的是multiselectield)
        改setings里面的数据库配置ip
        还有ALLOWED_HOSTS = ['*']
        python3 manage.py runserver 0.0.0.0:8000

安装uwsgi

1.安装uwsgi
pip3 install uwsgi 
2.使用学习uwsgi命令,如何启动python应用
经过uwsgi运行一个python web文件
3.经过命令去启动python web应用 
uwsgi --http :8000   --wsgi-file  test.py 
    --http 指定http协议
    --wsgi-file  指定一个支持python wsgi协议的文件
    
4.经过uwsgi启动django项目(注意这里要进入knight项目目录)
uwsgi --http :8000 --module  knight.wsgi  

5.uwsgi自动重启python程序
uwsgi --http :8000 --module knight.wsgi --py-autoreload=1

在生产中,您能够监视文件/目录更改以触发从新加载(touch-reload,fs-reload ...)。

在开发过程当中,能够方便地使用全部已加载/使用的python模块的监视器。但请仅在开发期间使用它

检查由一个以指定频率扫描模块列表的线程完成:

[uwsgi]
...
py-autoreload = 2
将每2秒检查python模块更改并最终从新启动实例。

 

使用uwsgi.ini配置文件去启动项目,这个文件本身去建立便可,放哪均可以

[uwsgi]
    # Django-related settings
    # the base directory (full path)
    #写上项目的绝对路径  
    chdir           = /opt/knight
    # Django's wsgi file

    #填写找到django的wsgi文件,填写相对路径,以chdir参数为相对路径
    module          = knight.wsgi
    # the virtualenv (full path)
    #填写虚拟环境的绝对路径
    home            = /root/Envs/knight/
    # process-related settings
    # master
    #启动uwsgi主进程
    master          = true
    # maximum number of worker processes
    processes       = 5

    #若是你使用了nginx,作反向代理,必须填写socket连接,而不是http参数
    # the socket (use the full path to be safe
    #socket          = 0.0.0.0:8000

    #若是你不用nginx,直接使用uwsgi,运行一个http服务端,就用这个http参数
    http = 0.0.0.0:8000


    # ... with appropriate permissions - may be needed
    # chmod-socket    = 664
    # clear environment on exit
    vacuum          = true

指定配置文件(注意文件位置)去启动uwsgi

uwsgi --ini  uwsgi.ini (注意写清配置文件位置) 

使用ngixn处理django的静态文件

1.设置django的静态文件目录,收集一下
    修改knight/settings.py ,写入以下参数
    STATIC_ROOT= '/opt/static'
    2.使用命令收集django的静态文件
    python3 manage.py collectstatic
    3.查看django的静态文件收集目录
    ls /opt/static
    
    4.配置nginx,反向代理,找到uwsgi项目,且配置nginx处理uwsgi的静态文件
    nginx.conf 修改配置以下
    
        server {
        listen       80;
        server_name  qishijd.com;
        #只要用户访问qishijd.com:80/  就走这个location匹配>,反向代理给uwsgi:
        location / {
            include    uwsgi_params;
            uwsgi_pass  0.0.0.0:8000;
                    }
            #当用户请求是qishijd.com/static/的时候
            #就会进入这个location匹配
            #经过alias参数进行路径别名,让nginx去/opt/static底下去找静>态资源
            location  /static  {
            alias  /opt/static;
}
    }

访问域名或者ip,查看项目

qishijd.com/login  查看静态页面是否正常

supervisor

原本咱们是用命令启动管理项目,
如今讲这些命令,写入到supervisor,经过superviosr去启动管理这些命令

使用python2的模块管理工具,去下载supervisor ,注意此时,退出虚拟环境
使用python2的模块管理工具,去下载supervisor ,注意此时,退出虚拟环境
使用python2的模块管理工具,去下载supervisor ,注意此时,退出虚拟环境

安装supervisor
yum install python-setuptools
#安装
easy_install supervisor

#进入虚拟环境执行下面步骤:
2.使用supervisor命令,生成配置文件
echo_supervisord_conf   >  /etc/supervisor.conf 

3.在这个配置文件中,写入咱们想要管理的任务
vim /etc/supervisor.conf 
在最底行写入以下配置
#定义一个任务,名字自定义
#commnad=参数,定义咱们启动项目的命令
[program:crm_knight]
command=/root/Envs/knight/bin/uwsgi    /opt/knight/uwsgi.ini
stopasgroup=true     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=true     ;默认为false,向进程组发送kill信号,包括子进程

4.经过配置文件启动supervisor服务
supervisord -c /etc/supervisor.conf

5.启动了supervisor服务端后,管理任务
supervisorctl -c /etc/supervisor.conf

任务管理命令以下:有两种,一个是交互式,一个是参数形式
#参数形式

supervisorctl -c /etc/supervisor.conf stop/start/restart   all
supervisorctl -c /etc/supervisor.conf start crm_knight

#交互式形式
supervisorctl -c /etc/supervisor.conf 

start 项目名
stop 项目名
相关文章
相关标签/搜索