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 部署

  1. 前面的uwsgi 单独部署不变,需要修改uwsgi.ini 的服务为 socket = 127.0.0.1:8000 (不使用http = 127.0.0.1:8000)
  2. 配置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;    # 静态文件所在的目录 (下面有静态文件收集方式)
       }
  1. django 搜集静态文件:
# 在settings.py 中配置收集静态文件的路径
STATIC_ROOT = os.path.join(BASE_DIR, 'static_all')  # 两种方式都可以 (django中推荐使用)
STATIC_ROOT = '/var/static' 

使用命令 python3 manager.py collectstatic (收集django所有的静态文件到我们配置的地方),这个静态文件的地址就是上面nginx配置的静态文件地址

  1. 重启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   (需要重启电脑才生效)