**crm项目部署**
1.nginx + uwsgi + django+虚拟环境+supervisor+mysql
2.django的启动方式 python3 manage.py runserver 为什么不能在生产环境用?4
django只是一个web逻辑框架,它通过python3 manage.py runserver 命令启动socket服务端
是借助python内置的wsgi框架,wsgiref框架实现的
他是一个单机模块,单进程模块,性能很低
因此在线上需要借助通过c语言编写的uwsgi这个web服务器软件,启动django
3.在进行uwsgi启动django的时候,是需要找到wsgi.pyzheg 文件模块
4.为什么要用nginx和uwsgi?
nginx 可以解决uwsgi的静态文件问题,并且支持高并发,还能限流,保障后台服务器安全等等
为什么要用uwsgi
因为uwsgi支持多进程 多线程的方式,性能很高,启动django性能更好,但是uwsgi不解析django的静态文件
我们以后会收集所有的django项目静态文件,丢给nginx取处理
5.准备crm代码
6.准备新的虚拟环境启动crm,使用virtualenvwrapper创建新的虚拟环境
1.复制环境中的模块数据:pip3 freeze > requirements.txt
2.在opt中创建虚拟环境:mkvirtualenv nginx_crm
3.创建crm所需要的依赖:pip3 install -i https://pypi.douban.com/simple -r requirements.txt
7.使用uwsgi启动crm项目
确保进入虚拟环境,然后安装uwsgi
1.进入虚拟环境:workon nginx_crm
2.安装uwsgi:pip3 install uwsgi
8.使用uwsgi命令启动django项目
uwsgi --http :8088 --module CRM.wsgi
--http指定http协议启动在 8088端口
--module 找到项目第二层的目录,里面的wsgi.py文件
如果你想启动一个http页面,提供测试访问,就用--http参数
如果你结合nginx反向代理,必须用--socket参数
uwsgi --socket :8000 --module CRM.wsgi --py-autoreload=1
由于参数过多,这里引入配置文件的概念 叫做uwsgi.ini my.ini nginx.conf
启动crm的配置文件如下 uwsgi.ini内容如下
[uwsgi]
# Django-related settings
# the base directory (full path)
# 填写项目的绝对路径(第一层路径)
chdir =/opt/CRM1
# Django's wsgi file
# 填写crm第二层目录下的wsgi.py文件的路径
module =CRM.wsgi
# 填写虚拟环境的绝对路径 cdvirtualenv(进入当前环境的绝对路径)
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参数
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 方式启动代码
9.uwsgi支持热加载的启动方式:
uwsgi --http :8088 --module CRM.wsgi --py-autoreload=1 或
uwsgi --socket :8088 --module CRM.wsgi --py-autoreload=1
此时后端已完毕
10.配置crm收集所有的crm静态文件
编辑项目的setting.py写入如下参数:
STATIC_ROOT = '/opt/crmstatic'
11.执行命令,收集crm所有静态文件
python3 manage.py collectstatic
12.配置nginx,一是支持反向代理,二是支持静态文件加载
修改nginx.conf
location / {
# 反向代理
uwsgi_pass 0.0.0.0:8000;
include uwsgi_params;
}
#这个location是解决crm静态文件的问题
location /static {
#alias参数 就是将/static转化为/opt/crmstatic
alias /opt/crmstatic;
}
总结:1.后台django启动用uwsgi 2.nginx做反向代理,并且加载静态资源
配置supervisro工具
注意退出虚拟环境
1.安装easy_install
yum install python-setuptools
2.安装supervisor
easy_install supervisor
3.创建superisor的配置文件
echo_supervisord_conf > /etc/supervisord.conf
4.修改perivisor的配置文件,添加启动uwsgi的命令
supervisor其实就是帮咋们执行,需要手动执行命令
1.修改配置文件:vim /etc/supervisord.conf
2.在最底部添加代码如下:
#which uwsgi 查看虚拟环境启动uwsgi ,绝对路径启动uwsgi.ini(pwd)
[program:CRM1] # 任务名字
command=/root/Envs/nginx_crm/bin/uwsgi --ini /opt/CRM1/uwsgi.ini
stopasgroup=true killasgroup=true
5.测试用supervisor启动uwsgi,注意确保此时uwsgi已经退出
supervisord -c /etc/supervisord.conf #启动supervisor服务端命令
supervisorctl -c /etc/supervisord.conf # supervisor客户端管理命令
6.学习supervisor的命令
start CRM1 :启动任务
stop CRM1 :关闭所有任务
status CRM1 :查看任务状态
start all :开启所有任务
stop all :关闭所有任务
status :查看任务状态