1. django 官方文档可配置项如下:
中文文档:https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/StatsServer.html
2. 启动django 的配置:
2.1 和settings.py 同级目录下新建wsgi.py (该配置和manager.py 的配置基本是一样的)
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "projectName.settings")
application = get_wsgi_application()
2.2 和manager.py同一级 创建启动文件projectName_uwsgi.ini (建议这样命名)
[uwsgi]
chdir = /home/project# 你的项目目录
# home = /home/mysite_env # 如果有虚拟环境,则需要指定虚拟环境目录; 没有则注释掉
module = projectName.wsgi:application
# 指向自己Django项目目录下projectName目录下的wsgi文件 (上面的wsgi.py)
master = True
processes = 4
# 使用进程数
threads = 2 使用的线程数
harakiri = 60
# 最大超时时间
max-requests = 5000
# 最大请求数,到了后就会自动重启
socket = 127.0.0.1:8000
# socket连接地址和端口,和nginx配置一致,
# http = 127.0.0.1:8000 不使用nginx这样配置
# http-socket = 0.0.0.0:8000 # 不建议使用http方式,服务会假死(推荐使用http-socket)
pidfile = /home/projectName/master.pid
# 在失去权限前,将pid写到指定的pidfile文件中
daemonize = /data/log/uwsgi/uwsgi.log
# 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器, 不配置日志就是前台运行,部署测试时可以先注释掉
disable-logging = True
# 只记录错误日志
# chmod-socket = 664 # 如果没有权限访问uWSGI的socket,这里可以设置权限
vacuum = True
# 服务退出或重启,自动删除pid和socket文件
py-autoreload = 1 #代码有修改重启
stats = :9191 #配置查看服务运行状态的端口
# home = /home/python/.virtualenvs/env_name
# 如果有虚拟,指定使用的虚拟环境
2.3 uwsgi 命令
# 启动命令:
uwsgi --ini projectName_uwsgi.ini
# 停止命令:
uwsgi --stop master.pid
# 重启命令:
uwsgi --reload master.pid
3 nginx + uwsgi + django 部署
- 前面的uwsgi 单独部署不变,需要修改uwsgi.ini 的服务为 socket = 127.0.0.1:8000 (不使用http = 127.0.0.1:8000)
- 配置nginx (保存后使用nginx -t 检查是否配正确)
server {
listen 8800; #给外部访问的端口
server_name localhost; # 给外部访问的ip或域名
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
# 包含uwsgi请求的参数
include uwsgi_params; #uwsgi 使用自带,固定配置不变
# 转交请求给uwsgi服务器 (uwsgi服务器的ip和端口号)
uwsgi_pass 127.0.0.1:8000; # 单个uwsgi服务器(不需要负载均衡)
#uwsgi_pass upstream1; #需要配置负载均衡时再配置upstream
}
# 如果是静态资源请求就直接响应资源。
location /static {
# 指定静态文件存放的目录 (需要修改/var/...目录的操作权限。 $ chmod 777 /var)
alias /var/project/project/static_all; # 静态文件所在的目录 (下面有静态文件收集方式)
}
- django 搜集静态文件:
# 在settings.py 中配置收集静态文件的路径
STATIC_ROOT = os.path.join(BASE_DIR, 'static_all') # 两种方式都可以 (django中推荐使用)
STATIC_ROOT = '/var/static'
使用命令 python3 manager.py collectstatic (收集django所有的静态文件到我们配置的地方),这个静态文件的地址就是上面nginx配置的静态文件地址
- 重启nginx , 访问是否正常:
nginx -t 检查nginx 配置是否正确, 可看到配置文件
nginx -s reload 不重启nginx 重新加载配置文件
nginx -s stop 停止nginx
systemctl status nginx.service 查看nginx 的状态
注意事项
注意事项:
1,如果不搭配nginx 要配置 http = 127.0.0.1:8000 或http-socket = 0.0.0.0:8000, 不能使用socket = 127.0.0.1:8000,http方式会假死,推荐使用http-socket方式。
2,在配置wsgi.py时,要和manager.py 的指定项一样 (os.environ.setdefault("DJANGO_SETTINGS_MODULE", "projectName.settings.dev")) ,可以指定不同的配置文件
3,启动后nginx 连接不上uwsgi 报错信息:127.0.0.1:8888 failed (13: Permission denied) 需要修改linux 配置信息:setsebool -P httpd_can_network_connect 1
4,静态文件配置了,目录也正确了,还是不能访问静态文件,需要修改SELINUX 配置 (一次性禁用 setenforce 0) 不用重启
vim /etc/selinux/config 禁用 SELINUX=disabled (需要重启电脑才生效)