「Django筆記/佈署Django專案」修訂間的差異
跳至導覽
跳至搜尋
Tankianting(討論 | 貢獻) |
Tankianting(討論 | 貢獻) |
||
行 47: | 行 47: | ||
官方支援說明: | 官方支援說明: | ||
*[https://docs.djangoproject.com/en/4.1/howto/deployment/wsgi/ WSGI] | *[https://docs.djangoproject.com/en/4.1/howto/deployment/wsgi/ WSGI](亦可用 Gunicorn) | ||
*[https://docs.djangoproject.com/en/4.1/howto/deployment/asgi/ ASGI] | *[https://docs.djangoproject.com/en/4.1/howto/deployment/asgi/ ASGI] |
於 2022年11月19日 (六) 14:53 的最新修訂
摘自 Django 文件:
佈署的檢核表
- 以下是原文:Devlopment Checklist的摘要。
本段包含以下內容:
- 安全性設定
- 佈署環境和其他環境有不同處
- 可選的安全特點
- 效能最佳化
- 錯誤報告功能
以下本文:
- 執行
manage.py check --deploy
settings.py
的 SECRET_KEY 密鑰要設定,範例:
with open('/etc/secret_key.txt') as f: SECRET_KEY = f.read().strip()
- 避免其他人知道漏洞之所在,
DEBUG = True
要變成 False。 - ALLOWED_HOSTS = ['this_server.example.com'] 要設定為這臺機器。
- 資料庫密碼建議另外儲存
- EMAIL_BACKEND 和相關設定值要設定好。如:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
(設定為 SMTP 發信)。參考:https://docs.djangoproject.com/en/4.1/topics/email/ - STATIC_ROOT 和 STATIC_URL 的值(靜態資料)。
- STATICFILES_DIRS 靜態資料目錄設置,如:
STATICFILES_DIRS = [ "/home/special.polls.com/polls/static", "/home/polls.com/polls/static", "/opt/webfiles/common", ]
- 多媒體資料:MEDIA_ROOT and MEDIA_URL
- 強制以 HTTPS 傳送:
- CSRF_COOKIE_SECURE = True # 避免 CSRF 安全機制的 cookie 明碼傳輸
- SESSION_COOKIE_SECURE = True # Session Cookie 避免明碼傳輸
- 設置 Debug = False 可以關掉佈署上線時不必要的功能。
- 錯誤 log 記錄功能
佈署到 WSGI/ASGI
首先爲了要讓伺服器支援Python 作爲 CGI 語言,所以需要安裝 WSGI(較傳統)或是 ASGI(非同步 async 友善,較新)。
官方支援說明:
- WSGI(亦可用 Gunicorn)
其他伺服器類設定
設定Gunicorn(這可能沒有用)
/etc/systemd/system/gunicorn.service
Group=www-data WorkingDirectory=/root/lianlok ExecStart=/usr/local/bin/gunicorn(或其他絕對路徑) --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock lianlok.wsgi:application [Install] WantedBy=multi-user.target
設定 nginx
site-available 裏面的 test 設定檔為:
前提要先 ./manage.py runserver 8080。
server { listen 80; server_name 127.0.0.1; # https://docs.djangoproject.com/en/dev/howto/static-files/#serving-static-files-in-production # location /static/ { # STATIC_URL # alias /home/www/example.com/static/; # STATIC_ROOT # } access_log /root/log/lianlok-access.log; error_log /root/log/lianlok-error.log; location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Scheme $scheme; proxy_pass http://127.0.0.1:8080; } }