导论:看参考博客
WSGI是Web服务器网关接口。它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求)
一.crm项目部署(非前后端分离项目)
1.项目部署技术栈
nginx + uwsgi + django + 虚拟环境 + supervisor + mysql
2.面试题1
django的启动方式 python3 manage.py runserver 为什么不能在生产环境用?
django只是一个web逻辑框架,它通过python3 manage.py runserver命令启动的socket服务端
是借助python内置的wsgi框架 wsgiref框架实现的
wsgi是一个单机模块,单进程模块,性能很低,用wsgi来启动一个多线程、多进程的项目是不合适的
因此在线上需要借助通过c语言编写的uwsgi这个web服务器软件,启动django
uwsgi支持多进程 多线程的方式,性能很高,启动django性能更好,但是uwsgi不解析django的静态文件
3.面试题2
为什么要用nginx 和uwsgi?
nginx 可以解决uwsgi的静态文件问题,并且支持高并发请求,还能限流,保障后台服务器安全等等
为什么要用uwsgi
因为uwsgi支持多进程 多线程的方式,性能很高,启动django性能更好,但是uwsgi不解析django的静态文件
我们以后会收集所有的django项目静态文件,丢给nginx去处理
4.准备crm代码
5.进入第一层路径,查看wsgi.py文件
vim wsgi.py
从这个文件可以看出是调用django的wsgi,获取函数get_wsgi_application
然后通过调用这个函数生成一个application对象
在进行uwsgi启动django的时候,是需要找到wsgi.py这个文件模块的
如果你报错提示 找不到application ,就是因为uwsgi 找不到wsgi.py
6.创建虚拟环境
准备一个新的虚拟环境,去启动crm,使用virtualenvwrapper创建新的虚拟环境
virtualenvwrapper工具的命令 1.创建新的虚拟环境 mkvirtualenv mycrm 2.切换多个虚拟环境 workon 虚拟环境的名字 3.列出所有的虚拟环境目录 lsvirtualenv 4.进入当前激活的虚拟环境的目录 cdvirtualenv
1.解决虚拟环境依赖的问题,也就是保障本地开发环境和线上一致性的问题 在windows本地 通过cmd窗口输入 pip3 freeze > requirements.txt #就能将python3解释器中所有的模块导出到requirements.txt这个文件中 2.将这个 requirements.txt 文件传输到服务器上,虚拟环境下进行安装,就可以自动解决所有模块问题 pip3 install -r requirements.txt
7.虚拟环境下安装uwsgi
确保进入虚拟环境,然后安装uwsgi
workon nginx_crm
下载uwsgi
pip3 install uwsgi
8.使用uwsgi命令启动django项目以及热加载
uwsgi支持热加载的启动方式命令如下 uwsgi --http :8000 --module mysite.wsgi --py-autoreload=1 uwsgi启动django项目的命令如下: uwsgi --http :8088 --module Crm_Project.wsgi --http指定http协议启动在 8088端口 --module 找到项目第二层的目录,里面的wsgi.py文件 如果你想启动一个http页面,提供测试访问,就用--http参数 如果你结合了nginx反向代理,必须用--socket参数 uwsgi --socket :8000 --module Crm_Project.wsgi
9.uwsgi.ini配置文件的引入
由于参数过多,这里引入配置文件的概念 叫做 uwsgi.ini 这个文件放在项目的第一层路径下 启动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参数 #如果你用了nginx反向代理,就填写socket参数 #如果你用了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、xml等多种配置方式,本文以 ini 为例, 在/etc/目录下新建uwsgi_nginx.ini,添加如下配置: # mysite_uwsgi.ini file [uwsgi] # Django-related settings # the base directory (full path) chdir = /opt/mysite # Django's wsgi file module = mysite.wsgi # the virtualenv (full path) home = /opt/venv # process-related settings # master master = true # maximum number of worker processes processes = 1 # the socket (use the full path to be safe socket = 0.0.0.0:8000 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true uwsgi.ini
10.此时通过uwsgi --ini uwsgi.ini方式启动代码
11.django的静态文件与nginx配置
虚拟环境下 编辑项目的settings.py 写入如下参数 STATIC_ROOT= '/opt/crmstatic'
12.执行命令,收集crm所有的静态文件
命令如下
python3 manage.py collectstatic
#此时后端的配置完毕!!!!开始搞nginx
#此时后端的配置完毕!!!!开始搞nginx
#此时后端的配置完毕!!!!开始搞nginx
#此时后端的配置完毕!!!!开始搞nginx
#此时后端的配置完毕!!!!开始搞nginx
13.配置nginx,一是支持反向代理,二是支持静态文件加载
配置nginx,一是支持反向代理,二是支持静态文件加载 修改nginx.conf 代码如下 #当用户访问 www.s18dnf.com的时候,就进入这个虚拟主机 location / { uwsgi_pass 0.0.0.0:8000; #8000为django运行的端口 include uwsgi_params; #固定写法 } #这个location是解决crm的静态文件的问题的 location /static { #alias参数 就是将/static转化为/opt/crmstatic ,也就找到了我们所有的静态文件 alias /opt/crmstatic; #这里的crmstatic就是STATIC_ROOT= '/opt/crmstatic'这个
}
14.重启nginx,由于有热加载,项目已经启动
15.批量管理软件的启停supervisor
supervisor 是基于 python 的任务管理工具,用来自动运行各种后台任务,当然你也能直接利用 nohup 命令使任务自动后台运行,但如果要重启任务,每次都自己手动 kill 掉任务进程,这样很繁琐,
而且一旦程序错误导致进程退出的话,系统也无法自动重载任务。
16.安装supervisor
在非虚拟环境下安装supervisor supervisor只能用python2来安装,不能用python3来安装
1.安装easy_install pip3是python3的软件包管理工具 easy_install 是python2的软件包管理工具 yum install python-setuptools 2.安装supervisor easy_install supervisor
17.supervisor的配置文件
1.创建supervisor的配置文件,在项目第一层路径下面输入下面代码 echo_supervisord_conf > /etc/supervisor.conf 2.修改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
18.测试用supervisor启动uwsgi
测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出 .测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出 .测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出 .测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出 虚拟环境下,输入下面两条命令 supervisord -c /etc/supervisor.conf #这是启动supervisor服务端命令 supervisorctl -c /etc/supervisor.conf #这是supervisor客户端管理命令 学习supervisor的命令 status s18crm #查看状态 #s18crm来自[program:s18crm] start s18crm #启动任务 stop s18crm #停止任务 start all stop all #启停所有的任务