uwsgi 部署 django


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   (需要重啟電腦才生效)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM