部署crmxiang

一相关知识介绍

1.1WSGI、uWSGI

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

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

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

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

1.2Nginx

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

1.3CentOS

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

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

1.4Linux使用技巧

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

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

1.5Virtualenv

  构建一个干净,隔离的python解释器环境,防止软件依赖,冲突等问题,建议使用。也可以使用它的升级版本

1.5Supervisor

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

二 crm项目部署

2.1准备crm项目

2.2激活虚拟环境python虚拟环境

方法一:
        workon nbcrm
方法二:
#创建基于python3的虚拟解释器环境venv
virtualenv --no-site-packages --python=python3 venv
#激活python3虚拟环境
[root@yugo /data 11:11:30]#source venv/bin/activate
(venv) [root@yugo /data 11:11:35]#

 

2.3  在虚拟环境下,安装uwsgi安装uwsgi

pip3 install -i https://pypi.douban.com/simple uwsgi

 

2.4  使用uwsgi.ini配置文件方式,启动NBcrm项目

1、手动创建uwsgi.ini,放在NBcrm项目下,便于管理
        touch uwsgi.ini 

2、配置文件uwsgi.ini的内容如下,这就是一个普通文本,里面定义了功能参数

[uwsgi]
# Django-related settings
# the base directory (full path)
#项目的绝对路径,定位到nbcrm的第一层
chdir           = /opt/py_crm
# Django's wsgi file
# 找到项目第二层的wsgi文件
module          = py_crm.wsgi
# the virtualenv (full path)
# 找到虚拟环境的绝对路径
home            = /root/Envs/crm  
# process-related settings
# master
# 主进程
master          = true
# maximum number of worker processes
# 开启uwsgi的多进程数,根据cpu核数来定义
processes       = 16
# the socket (use the full path to be safe
# 基于socket链接运行crm,只有与nginx结合的时候,才使用socket形式
socket          = 0.0.0.0:8000
# 当你没用nginx,调试项目的时候,使用http形式 
#http     =  0.0.0.0:8000
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true

#如果你使用了supervisor,请注释掉这个参数
#守护进程在后台运行,且将日志信息,输出到uwsgi.log日志中
#使用supervisor时,不能写下面的语句,不然会报错退出太快
#daemonize = uwsgi.log

3、启动配置文件
    #通过uwsgi.ini配置文件,启动NBcrm,使用绝对
    /root/Envs/crm/bin/uwsgi   --ini uwsgi.ini

 

2.5静态文件的及nginx.conf 的配置

  此时后端项目uwsgi已经启动,但是由于uwsgi默认不解析django的静态文件,需要收集django所有静态文件,然后让nginx去处理静态文件并且使用nginx的反向代理特性.

请求流程:

  用户发起请求, >>>>>>>>>访问192.168.16.142(或者访问域名www.s20crm.com) ,请求走到nginx这一层代理,>>>>>>>>>nginx直接转发(uwsgi_pass)给后端django的地址django处理完毕 >>>>>>>响应给nginx >>>>>> nginx返回结果给浏览器界面

1.修改django的settings.py静态文件
    添加如下参数
        # Static files (CSS, JavaScript, Images)
        # https://docs.djangoproject.com/en/1.11/howto/static-files/
        #自定义的文件夹,统一管理django所有的静态文件
        STATIC_ROOT='/opt/s20static'
        
        STATIC_URL = '/static/'
        STATICFILES_DIRS = [
            os.path.join(BASE_DIR,'statics'),
        ]
        
    2.执行命令,收集crm的静态文件
     python3  /opt/NBcrm/manage.py collectstatic

     3.配置nginx的location路径匹配,找到crm这些静态文件
     在nginx.conf中找到server{}标签,添加如下参数
     #当我的请求url是 192.168.16.142:80/static/xxxxxxxx 
    
        location /static {
            alias  /opt/s20static/;
        }
      4.
    修改nginx.conf配置如下
    server {
        listen       80;
        server_name  localhost;
            #最低级路径匹配,当请求url是 www.s20crm.com(192.168.16.142/)
            location / {
               #include翻译就是包含的意思,将外部一个文件的内容,包含进来 
                include uwsgi_params;
                #
                uwsgi_pass 127.0.0.1:8000;
            }
            #当请求是 192.168.16.142/static/xxxxx
            #解析NBcrm静态文件内容,处理css js
            location /static {
                alias  /opt/s20static/;
            }
        }

 

posted @ 2019-07-02 18:16  与凯学习  阅读(126)  评论(0编辑  收藏  举报