一、uwsgi相关配置
1.uwsgi相关配置
项目目录中新建uwsgi.ini文件
[uwsgi]
; 监听的端口
; http = :8000
; 指定和nginx进行套接字通信的方式:端口或文件
; socket = 127.0.0.1:8001
socket = /var/sock/OfferHelp_nginx.sock
; 项目所在目录,和manage.py同级
chdir = /home/kzzf/project/OfferHelp
; 虚拟环境所在目录
home=/home/kzzf/env/OfferHelp-env
PYTHONHOME = /home/kzzf/env/OfferHelp-env/bin/
; 主应用中的wsgi文件
wsgi-file = OfferHelp/wsgi.py
; 代理静态资源:路径映射,现在交给nginx处理
; static-map = /static=/home/kzzf/project/OfferHelp/collect_static
; 启动一个master进程,来管理其余的子进程
master=True
processes = 4
threads = 2
; 保存主进程的pid,用来控制uwsgi服务
pidfile=/home/kzzf/project/OfferHelp/uwsgi.pid
; 启动项目 uwsgi uwsgi.ini
; uwsgi --stop/reload xxx.pid 停止/重启uwsgi
; 设置后台运行,保存日志,使用supervisor管理时需要取消后台运行
; daemonize=/home/kzzf/project/OfferHelp/log/uwsgi.log
; 设置每个工作进程处理请求的上限,达到上限时,将回收(重启)该进程。可以预防内存泄漏
max-requests=5000
# 服务停止时自动移除unix Socket和pid文件
vacuum=true
2.uwsgi相关命令
uwsgi /home/kzzf/project/OfferHelp/uwsgi.ini
# uwsgi的关闭
uwsgi --stop uwsgi.pid
pkill -f uwsgi -9
二、supervisor
一个进程管理工具,客户端/服务端模式,用他来管理uwsgi的服务
1.安装
# 使用python2安装,supervisor暂时不支持python3
pip install supervisor
# 创建supervisor相关的目录
mkdir -p /etc/supervisor/conf.d # 存放各个程序的配置
mkdir -p /etc/supervisor/var/ # 存放supervisor启动需要的sock和pid文件
# 生成默认的配置文件
echo_supervisord_conf > /etc/supervisor/supervisord.conf
2.修改默认的配置文件
/etc/supervisor/supervisord.conf
[unix_http_server]
file=/etc/supervisor/var/supervisor.sock
[supervisord]
logfile=/var/log/kzzf/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10 ; of main logfile backups; 0 means none, default 10
loglevel=info ; log level; default info; others: debug,warn,trace
pidfile=/etc/supervisor/var/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=false ; start in foreground if true; default false
minfds=1024 ; min. avail startup file descriptors; default 1024
minprocs=200 ; min. avail process descriptors;default 200
user=root ; setuid to this UNIX account at startup; recommended if root
# 和unix_http_server中配的要一致
[supervisorctl]
serverurl=unix:///etc/supervisor/var/supervisor.sock ; use a unix:// URL for a unix socket
[include]
files = /etc/supervisor/conf.d/*.ini
3.自定义程序的配置文件
/etc/supervisor/conf.d/OfferHelp.ini
[program:OfferHelp] ; 指定程序名为OfferHelp
command=uwsgi /home/kzzf/project/OfferHelp/uwsgi.ini ; 进程启动时执行的命令
directory=/home/kzzf/project/OfferHelp/ ; 指定执行命令时所在的目录
autostart=true ; supervisord 启动时自动启动
startsecs=5 ; 启动 5 秒后没有异常退出,视为正常启动
startretries =3 ; 启动失败自动重试次数,默认是 3
autorestart=unexpected ; 程序异常退出后自动重启
user=root
stdout_logfile=/var/log/kzzf/OfferHelp/stdout.log ; 日志输出文件
stderr_logfile=/var/log/kzzf/OfferHelp/stderr.log
4.相关命令
# 指定配置文件,后台启动supervisor
supervisord -c /etc/supervisor/supervisord.conf
supervisorctl update # 更新配置
supervisorctl start/restart/stop 程序名
supervisorctl start/restart/stop all
三、nginx配置
1.拷贝uwsgi_params文件到项目目录
cp /etc/nginx/uwsgi_params /home/kzzf/project/OfferHelp/
2.新建nginx配置文件
/etc/nginx/conf.d/nginx_OfferHelp.conf
upstream OfferHelp {
# server 配置socket通信方式,可以使用端口或者文件,推荐unix socket,开销更小
# 要与uwsgi.ini中socket配的一样
server unix:///var/sock/OfferHelp_nginx.sock; # for a file socket
# server 127.0.0.1:8001; # for a web port socket
}
# configuration of the server
server {
listen 80;
server_name kzzf.club; # 域名或ip
charset utf-8;
# 上传文件大小的限制
client_max_body_size 75M;
# 资源代理
location /media {
alias /home/kzzf/project/OfferHelp/media;
}
location /static {
alias /home/kzzf/project/OfferHelp/collect_static;
}
# 服务转发
location / {
uwsgi_pass OfferHelp; # 这个和上面upstream配置的名字对应
include /home/kzzf/project/OfferHelp/uwsgi_params; # 拷贝到项目目录中的uwsgi_params文件
}
}
3.修改默认的配置文件
/etc/nginx/nginx.conf
将默认的user(nginx)改为root,不然访问静态资源时可能报403错误
修改nginx默认监听的端口,不然django项目没法使用80端口
user root; # 此处默认为:user nginx:
server {
listen 800 default_server; # 改为800
listen [::]:800 default_server; # 改为800
server_name _;
root /usr/share/nginx/html;
四、启动服务
systemctl reload nginx.service
supervisord -c /etc/supervisor/supervisord.conf
参考:https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/tutorials/Django_and_nginx.html
https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/74/
https://www.cnblogs.com/supery007/p/9368242.html