supervisor+uwsgi+nginx+django+mysql
这些事设计到的技术
supervisor:一键启停uwsgi
uwsgi:让django在Linux上支持并发形式,支持多进程,多线程,乃至于协程的C语言编写高性能工具
1.先创建虚拟环境,用于运行crm
[root@s25linux crm]# virtualenv --python=python3 venv_crm
source /opt/crm/venv_crm/bin/active
2.上传代码到linux中,调试项目是否能够运行
解压:tar -zxvf 压缩包
安装依赖环境:pip3 install -i https://pypi.douban.com/simple -r requirements.txt
导入数据库:
01在windews命令行:mysqldump -uroot -p --数据库库名> alldb.sql
02在Linux读取:mysql -uroot -p 指定导入库名,按django链接库名起 < /opt/alldb.sql
02
调试项目:python manage.py runserver
3.在线上,是使用uwsgi结合uwsgi.ini配置文件,启动crm的,因此 ,启动方式如下
虚拟环境下的项目里创建:uwsgi.ini
[uwsgi]
# Django-related settings
# the base directory (full path)
# 填写crm项目的第一层绝对路径
chdir = /opt/tf_crm/
# Django's wsgi file
# 填写crm项目第二层的相对路径,找到第二层目录下的wsgi.py
# 这里填写的不是路径,是以上一个参数为相对,找到第二层项目目录下的wsgi.py文件
module = tf_crm.wsgi
# the virtualenv (full path)
# 填写虚拟环境解释器的第一层工作目录,虚拟环境bin下的路径
home = /opt/venv_crm_again
# process-related settings
# master
master = true
# maximum number of worker processes
# 代表定义uwsgi运行的多进程数量,官网给出的优化建议是 2*cpu核数+1 ,单核的cpu填写几?
# 如果是单进程,十万个请求,都丢给一个进程去处理
# 3个工作进程,十万个请求,就分给了3个进程去分摊处理
processes = 3
# the socket (use the full path to be safe
# 这里的socket参数,是用于和nginx结合部署的unix-socket参数,这里临时先暂停使用
socket = 0.0.0.0:8000
# 线上不会用http参数,因为对后端是不安全的,使用socket参数是安全的连接,用nginx反向代理去访问
# 后端程序是运行在防火墙内部,外网是无法直接访问的
# 临时使用http参数,便于我们用浏览器调试访问
# http = 0.0.0.0:8000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
4.使用supervisor启动uwsgi进程,需要修改supervisord.conf配置文件了
vim /etc/supervisord.conf
comman : which uwsgi路径 --ini + uwsgi.ini路径
[program:again_s25crm]
command=/s25crm/s25_crm/bin/uwsgi --ini /s25crm/tf_crm/uwsgi.ini
autostart=true ; 在supervisord启动的时候也自动启动
startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=true ;默认为false,向进程组发送kill信号,包括子进程
5.修改nginx
server {
listen 80;
server_name localhost;
#这是一个局部的变量,只对当前这个server{}代码块生效,编码设置为utf-8
charset utf-8;
error_page 404 /40x.html;
# 这里的locaiton 路径匹配,如果你写的是root参数,就是一个web站点功能
# 基于uwsgi协议的一个高性能的反向代理转发,新的参数
location / {
#当请求发送给 192.168.178.140:80的时候
#通过uwsgi_pass把请求转发给后端的uwsgi服务器
uwsgi_pass 0.0.0.0:8000; ****
#这个参数,是固定的,是添加一些转发请求头内容
include uwsgi_params; ****
}
配置完重启
nginx -s reload
6.配置nginx接收所有的django静态文件
第一步:修改django的配置文件,收集所有的静态文件,放入一个统一管理的目录
vim settings.py #添加如下内容
STATIC_ROOT='/crmstatic/' #作用是定义一个统一管理的目录,收集所有crm的静态文件
第二步:用命令收集静态文件,会自动收集到第settings步设置的配置路径下
python3 manage.py collectstaia
7.再次修改nginx
vim /opt/tnginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
#这是一个局部的变量,只对当前这个server{}代码块生效,编码设置为utf-8
charset utf-8;
error_page 404 /40x.html;
# 这里的locaiton 路径匹配,如果你写的是root参数,就是一个web站点功能
# 基于uwsgi协议的一个高性能的反向代理转发,新的参数
location / {
#当请求发送给 192.168.178.140:80的时候
#通过uwsgi_pass把请求转发给后端的uwsgi服务器
uwsgi_pass 0.0.0.0:8000;
#这个参数,是固定的,是添加一些转发请求头内容
include uwsgi_params;
}
location /static { *******
alias /s25static; *******
}
}