django-部署nginx-靜態文件配置
nginx 配置靜態文件路徑
-
創建新路徑-主要存放Django所有靜態文件 如:
/home/jerome/項目名_static/
-
在Django settings.py 中添加新配置
STATIC_ROOT = '/home/jerome/項目名_static/static' # 此配置路徑 存放所有正式環境中需要的靜態文件
-
進入項目,執行
python3 manage.py collectstatic
。執行該命令后,Django將項目中所有靜態文件 復制到 STATIC_ROOT 中 ,包括Django內建的靜態文件【如admin后台的樣式】
-
Nginx配置中添加新配置
# file : sudo vim /etc/nginx/nginx.conf
# 新添加location /static 路由配置,重定向到指定的 第一步創建的路徑即可
server {
...
location /static {
# root 第一步創建文件夾的絕對路徑,如:
root /home/jerome/項目名_static;
}
...
}
檢查一下是否語法錯誤 sudo nginx -t
重啟 sudo service nginx restart/sudo /etc/init.d/nginx restart
django 靜態文件 部署到nginx服務器 相關問題
項目目錄下的 setting.py 文件
STATIC_URL = "/static/" 表示在URL里通過static訪問靜態資源,django利用STATIC_URL來讓瀏覽器可以直接訪問靜態文件。
STATICFILES_DIRS
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'common_static'),
)
該條代碼不是必須的,如果加上,則公共靜態文件存放在 STATICFILES_DIRS目錄下。
STATIC_ROOT
STATICFILES_ROOT = (
os.path.join(BASE_DIR, 'static/'),
)
在部署的時候 執行collectstatic 命令后,會將項目中各個APP目錄下的static文件夾以及STATICFILES_DIRS文件夾內的靜態文件全部復制到 STATIC_ROOT 所指向的文件夾。
一 、在開發時使用runserver 0.0.0.0:80 啟動時,django尋找靜態文件按以下順序查找,查到了就不再繼續往下查找:
1、查找STATICFILES_DIRS對應的目錄下的靜態文件(如果設置了STATICFILES_DIRS)
2、查找各APP目錄下的Static文件夾下的靜態文件
二、使用Nginx + uWSGI 部署時,Nginx服務器接管了靜態文件的響應,所以尋找靜態文件的順序為
1、靜態文件按照在Nginx 設置的靜態目錄下查找。
Nginx 設置的靜態目錄
總結、可以看出,當使用Nginx + uWSGI 部署時,就不再從STATICFILES_DIRS以及各APP目錄下的Static文件夾中尋找靜態文件了。而是直接從Nginx 設置的靜態目錄下查找,所以我們需要將所有的靜態文件復制到Nginx 設置的靜態目錄下,慶幸的是,django有一個方便的做法,那就是設置好setting.py里的 STATIC_ROOT,然后在終端執行 python manage.py collectstatic,就將所有的靜態文件全部復制到STATIC_ROOT目錄下了。