部署django應用

django開發時只需要python就能完成,利用其自帶的開發服務,可以方便在開發環境運行起應用,但部署於生產時則需要一些額外的操作。

配置修改

首先是配置的修改,settings.py裏有些最小配置需要修改

STATIC_ROOT = os.path.join(os.getcwd(), 'static')
ALLOWED_HOSTS = ['127.0.0.1']
DEBUG = False

如果應用裏有圖片,樣式表資源,需要設置STATIC_ROOT; DEBUG模式必須關掉,否則會暴露過多信息造成安全問題;ALLOWED_HOSTS列表需要指明允許的主機。

部署方式

django官方介紹了多種WSGI方式的生產部署方案:

  • apache 和 apache 模塊 mod_wsgi
  • 使用uWSGI
  • 使用Gunicorn
    除了WSGI部署,django 3.0開始也支持ASGI部署。

靜態文件

生成環境下各個django項目下的app靜態文件是不能像開發服務運行時那樣,開箱即用,可以直接訪問到的。需要人爲配置讓靜態文件能夠被所用的服務器軟件能夠正確讀取。
推薦的做法是執行命令

python manage.py collectstatic

各個app的靜態文件會被同一收集到STATIC_ROOT配置指定的位置。

Apache+Gunicorn

django部署方式多樣,可以根據需要選擇。

Gunicorn運行django服務,Apache對外暴露,反向代理到Gunicorn的方案基本配置過程大體如下:

安裝相關軟件包

通過包管理器或其他方式安裝Apache, pip或其他方式安裝gunicorn。

yum install httpd #redhat
apt install apache2 #debain
pip install gunicorn

配置Apache

配置反向代理到gunicorn運行的django服務,配置apache處理靜態資源。
修改/etc/httpd/conf/httpd.conf配置文件:

#處理靜態資源配置
Alias /static/ /path/to/static/
<Directory /path/to/static/>
    Require all granted #2.4 
</Directory>

#反向代理
ProxyPass /static/ ! #排除/static路徑
ProxyPass / http://127.0.0.1:8000/
ProxyPassReverse / http://127.0.0.1:8000/

如果想要重寫Server頭,可以加入配置

<IfModule mod_headers.c>
 Header unset Server
 Header always unset X-Powered-By
 Header unset X-Powered-By
 Header unset X-CF-Powered-By
 Header unset X-Mod-Pagespeed
 Header unset X-Pingback
</IfModule>

運行Apache

systemctl start httpd

運行Gunicorn

最簡單的情況下,可以直接運行

gunicorn django_project.wsgi

常見錯誤

  • 訪問django地址出現400錯誤,檢查django配置了ALLOWED_HOSTS = ['127.0.0.1']
  • 訪問靜態文件地址出現403, 檢查靜態文件所在目錄Apache是否有權限,可以修改所在目錄或者文件的權限,也可配置UserGroup,讓Apache以有權限的用戶/組執行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章