Gunicorn+django部署


部署前提是服務器中要有項目中所需的其他服務,例:mysql數據庫,nginx,python解釋器等,在其他環境搭好的情況下使用此方式可簡單部署一個django項目。

至於安裝上面提到的這些,有興趣可點擊前往博客查看或CSDN博客查看

1、准備工作

  • 創建干凈的虛擬環境
  • 執行下載命令下載所需依賴包
  • 測試數據庫鏈接
  • 測試項目運行
  • (其中詳細步驟上面博客鏈接中有,這里不贅述了)

2、下載Gunicorn

# workon進入項目的虛擬環境中下載
# pip install gunicorn 

4、修改配置文件

# 修改settings.py文件的:INSTALLED_APPS
INSTALLED_APPS = [
    ...
    'gunicorn',  # 把gunicorn添加到apps中
]

5、使用Gunicorn命令運行django項目

# 在manage.py 同級目錄下執行命令,注:book是項目名
gunicorn book.wsgi -b 127.0.0.1:8000

基本參數列表:

-c        指定一個配置文件(py文件)
-b        與指定的socket進行綁定
-D        以守護進程形式來運行Gunicorn進程
-w        工作的進程數量,后面加數字;[gunicorn -w 2 untitled.wsgi -b 0.0.0.0:8000]
–threads  后面加數字,處理請求的最大線程數
-k        工作進程類型: sync(默認), eventlet, gevent, or tornado, gthread, gaiohttp.
–chdir    后面加路徑,跳轉到目錄下執行
–reload   后面可加參數,默認參數false,開啟為true,開啟時當代碼發生改變,會重新加載修改的代碼,並啟動程序,(熱加載)
-proxy-protocol
–worker-connections
–access-logfile

6、測試運行

# 執行命令curl后查看返回狀態,這里未開啟守護進程,加載需要再開一個終端執行命令
curl 127.0.0.1:8000

7、運行可能報錯

# 如果使用參數 -k gevent 有可能報錯,錯誤大致信息就是缺少gevent或者gevent版本低,pip下載一下就好,或者更換版本
# 同理使用其它 -k 參數也是如此

8、配置腳本文件啟動django項目

在manage.py同級目錄創建配置文件gunicorn.conf.py

# gunicorn_config.py
import logging
import logging.handlers
from logging.handlers import WatchedFileHandler
import os
import multiprocessing

bind = '127.0.0.1:8000'      # 綁定ip和端口號
# chdir = '/opt/workspace/bookstore'  # 目錄切換
# backlog = 500              # 監聽隊列
timeout = 60                 # 超時
worker_class = 'gevent' # 使用gevent模式,還可以使用sync 模式,默認的是sync模式
workers = multiprocessing.cpu_count() * 2 + 1    # 進程數
threads = 2  # 指定每個進程開啟的線程數
loglevel = 'info'  # 日志級別,這個日志級別指的是錯誤日志的級別,而訪問日志的級別無法設置
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'
accesslog = "/opt/workspace/bookstore/log/gunicorn_access.log"  # 訪問日志文件
errorlog = "/opt/workspace/bookstore/log/gunicorn_error.log"    # 錯誤日志文件

9、運行命令

# gunicorn.conf.py 是配置文件
# bookstore 是項目名
# gunicorn -c gunicorn.conf.py bookstore.wsgi:application

10、nginx簡單部署示例

找到nginx配置文件打開添加站點

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  www.flag.space, 109.39.89.199;
        location / {
            proxy_pass http://127.0.0.1:8000;
            #root   html;
            #index  index.html index.htm;
        }
        location /static {
            alias /opt/workspace/bookstore/static;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

其中的 location / 中配置項目的url地址

location /static 中配置靜態文件路徑


免責聲明!

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



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