1, django 官方文檔可配置項如下:
中文文檔:https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/StatsServer.html

2,啟動django 的配置:
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,和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 # 如果有虛擬,指定使用的虛擬環境
3,啟動命令: uwsgi --ini projectName_uwsgi.ini
停止命令: uwsgi --stop master.pid
重啟命令:uwsgi --reload master.pid
4,轉存日志
https://www.jianshu.com/p/1c93baf875a5
4, 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; # 靜態文件所在的目錄 (下面有靜態文件收集方式) }
2,django 搜集靜態文件:
1,再settings.py 中配置收集靜態文件的路徑
STATIC_ROOT = os.path.join(BASE_DIR, 'static_all') # 兩種方式都可以 (django中推薦使用) STATIC_ROOT = '/var/static'
2,使用命令 python3 manager.py collectstatic (收集django所有的靜態文件到我們配置的地方)
收集后如下:

這個靜態文件的地址就是上面nginx配置的靜態文件地址
3, 重啟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 (需要重啟電腦才生效)
