本文章教學Django專案如何部署到Nginx,以及一些常見的盲點。本文章適用於會Django專案建置並打算部署至Nginx的人閱讀。

Django設置

本文章就不多贅述關於Django建置專案的教學,當你建置完Django專案後,並且準備部署至Nginx時,請完成以下步驟:

  1. 記得將settings.py的DEBUG改成False,以免造成網頁出現錯誤時,直接在前端顯示錯誤資訊,已造成洩漏重要資訊等。
  2. 建議在settings.py新增STATIC_ROOT,當我們在開發Django專案時,預設會在settings有這幾行的程式,這是指定Static的位置:
STATICFILES_DIRS = [
    BASE_DIR / "static",
    '/Your/Django/Project/Static/',
]

當正式版要部署到Nginx時,可以將這些Static檔案移至STATIC_ROOT,並放在權限較低的目錄,像是/var/,方便讓Nginx存取,也能提高網頁安全性。

STATIC_ROOT = '/var/www/project/static'

可是,把/Your/Django/Project/Static移至STATIC_ROOT不是很麻煩嗎?每次更新都需要做一次Copy than Paste,因此你可以輸入一行指令快速搬移:

  1. python3 manage.py collectstatic

如此一來,就能將/Your/Django/Project/Static的所有檔案移至STATIC_ROOT。

Gunicorn設置

Gunicorn是一種Python Web Server Gateway Interface(WSGI),建置較為簡單、速度較快、資源佔用率較低,另一種更常見的WSGI是uWSGI,不過後來我發現使用Gunicorn比較簡單方便使用,所以今天的教學就以Gunicorn作為Nginx和Django的夾心餅。

  1. 安裝Gunicorn

請在Virtualenv的環境下安裝,輸入python3 -m pip install gunicorn

  1. 編輯Gunicorn設定

touch gunicorn_config.py 創建gunicorn_config.py文件

vi gunicorn_config.py 編輯gunicorn_config.py文件

workers = 1
bind = '127.0.0.1:8000' # 設定IP與Port
wsgi_app = 'project.wsgi:application' # WSGI位置
commnad = '/home/Django/venv/bin/gunicorn' # Gunicorn的Venv位置
pythonpath = '/Your/Django/Project/Path' # Django專案位置
  1. 啟動Gunicorn