nginx+uWSGI+django+virtualenv+supervisor发布web服务器

 

项目部署

—nginx+uWSGI+django+virtualenv+supervisor发布web服务器

django的启动方式 python3 manage.py runserver 为什么不能在生产环境用?

django只是一个web逻辑框架,它通过python3 manage.py runserver命令启动的socket服务端 是借助python内置的wsgi框架 wsgiref框架实现的 它是一个单机模块,单进程模块,性能很低因此在线上需要借助通过c语言编写的uwsgi这个web服务器软件,启动django

为什么要用nginx 和uwsgi?

nginx 可以解决uwsgi的静态文件问题,并且支持高并发请求,还能限流,保障后台服务器安全等等

为什么要用uwsgi

因为uwsgi支持多进程 多线程的方式,性能很高,启动django性能更好,但是uwsgi不解析django的静态文件

我们以后会收集所有的django项目静态文件,丢给nginx去处理

框架由低到高的性能顺序

  • djano

  • flask

  • tornado

  • sanic

在进行uwsgi启动django的时候,是需要找到wsgi.py这个文件模块的,如果你报错提示 找不到application ,就是因为uwsgi 找不到wsgi.py

 

1.准备crm项目代码

2.准备一个新的虚拟环境,去启动crm,使用virtualenvwrapper创建新的虚拟环境

1.解决虚拟环境依赖的问题,也就是保障本地开发环境和线上一致性的问题
在windows本地 通过
pip3 freeze > requirements.txt
就能将 python3解释器中所有的模块导出到这个文件中 
    
​
2.将这个 requirements.txt  文件传输到服务器上,进行安装,就可以自动解决所有模块问题
pip3 install  -i http://pypi.douban.com/simple/  -r requirements.txt  

 

3.使用uwsgi启动crm项目,确保进入虚拟环境,然后安装uwsgi

workon nginx_crm
​
下载uwsgi
pip3 install uwsgi 

 

4.使用uwsgi命令启动django项目,检测项目是否正常

uwsgi --http :8088 --module Crm_Project.wsgi 
​
参数解释
    --http指定http协议启动在 8088端口
    --module 找到项目第二层的目录,里面的wsgi.py文件
如果你想启动一个http页面,提供测试访问,就用--http参数

 

uwsgi支持热加载的启动方式命令如下

uwsgi --http :8000 --module mysite.wsgi --py-autoreload=1    
​
参数解释
    --http 启动在8088端口,
    --module 指定项目文件夹路径  
    --py-autoreload是热加载程序

 

由于参数过多,这里引入配置文件的概念 叫做 uwsgi.ini my.cnf nginx.conf

 

#正式启动环境在这里

#正式启动环境在这里

启动crm的配置文件如下 uwsgi.ini内容如下

[uwsgi]
# Django-related settings
# the base directory (full path)
#填写项目的绝对路径(第一层路径)
chdir           = /opt/Crm_Project
# Django's wsgi file
#填写crm第二层目录下的wsgi.py文件的路径
module          = Crm_Project.wsgi
# the virtualenv (full path)
#填写虚拟环境的绝对路径
home            = /root/Envs/nginx_crm
​
# process-related settings
# master
master          = true
# maximum number of worker processes
#基于uwsgi的多进程,根据cpu来优化 
processes       = 4
# the socket (use the full path to be safe
​
#如果你用了nginx反向代理,就填写socket参数
#如果你用了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

 

此时通过这种方式启动代码

uwsgi --ini  uwsgi.ini

 

5.配置crm收集所有的crm静态文件 编辑项目的settings.py 写入如下参数

STATIC_ROOT= '/opt/crmstatic'  # 这个路径为自己要准备复制后存放的静态文件路径

 

6.执行命令,收集crm所有的静态文件 ,会自动把项目下的静态文件复制在文件夹下面

python3 manage.py collectstatic

 

#此时后端的配置完毕!!!!开始搞nginx

#此时后端的配置完毕!!!!开始搞nginx

7.配置nginx,一是支持反向代理,二是支持静态文件加载 修改nginx.conf ,代码如下

#当用户访问 www.s18dnf.com的时候,就进入这个虚拟主机
        location / {
        uwsgi_pass  0.0.0.0:8000;
        include uwsgi_params;
        }
​
        #这个location是解决crm的静态文件的问题的
        
location /static  {
#alias参数 就是将/static转化为/opt/crmstatic ,也就找到了我们所有的静态文件
alias /opt/crmstatic;
}

 

8.重启nginx,查看反向代理效果

nginx -s reload

 

配置supervisor工具

#注意要退出虚拟环境

#注意要退出虚拟环境

1.安装easy_install

pip3是python3的软件包管理工具
easy_install 是python2的软件包管理工具
    
yum install python-setuptools

 

2.安装supervisor

easy_install supervisor

 

3.创建supervisor的配置文件

echo_supervisord_conf >  /etc/supervisor.conf 

 

4.修改supervisor的配置文件,添加启动uwsgi的命令

supervisor其实就是帮咱们执行了,需要手动执行的命令而已  

vim /etc/supervisor.conf

写入如下内容,在最底部写

[program:s18crm]
command=/root/Envs/nginx_crm/bin/uwsgi  --ini /opt/Crm_Project/uwsgi.ini
stopasgroup=true
killasgroup=true

 

5.测试用supervisor启动uwsgi 

#注意要确保此时uwsgi已经退出!

#注意要确保此时uwsgi已经退出!

supervisord -c  /etc/supervisor.conf   #这是启动supervisor服务端命令
​
supervisorctl -c /etc/supervisor.conf   #这是supervisor客户端管理命令

 

6.常用supervisor命令

status s18crm #查看状态
start s18crm  #启动任务
stop  s18crm #停止任务
    
start all  
stop  all  #启停所有的任务

 

posted @ 2019-04-02 21:55  robertx  阅读(221)  评论(0编辑  收藏  举报