如何部署靜態檔案¶
另請參閱
如需 django.contrib.staticfiles
的使用簡介,請參閱 如何管理靜態檔案(例如圖像、JavaScript、CSS)。
在生產環境中提供靜態檔案¶
將靜態檔案投入生產環境的基本步驟包括兩個:當靜態檔案變更時,執行 collectstatic
命令,然後安排將收集的靜態檔案目錄(STATIC_ROOT
)移動到靜態檔案伺服器並提供服務。根據 staticfiles
的 STORAGES
別名,可能需要手動將檔案移動到新的位置,或者 Storage
類的 post_process
方法可能會處理這部分。
與所有部署任務一樣,魔鬼藏在細節中。每個生產環境的設定都會有些不同,因此您需要調整基本步驟以符合您的需求。以下是一些可能有幫助的常見模式。
從同一伺服器提供網站和您的靜態檔案¶
如果您想從已經提供您網站的同一伺服器提供靜態檔案,該過程可能如下所示:
將您的程式碼推送到部署伺服器。
在伺服器上,執行
collectstatic
以將所有靜態檔案複製到STATIC_ROOT
。設定您的網頁伺服器以在 URL
STATIC_URL
下提供STATIC_ROOT
中的檔案。例如,這裡說明了 如何使用 Apache 和 mod_wsgi 來完成此操作。
您可能需要將此過程自動化,尤其是在您有多個網頁伺服器的情況下。
從專用伺服器提供靜態檔案¶
大多數較大型的 Django 網站都使用單獨的網頁伺服器(即,不是也執行 Django 的伺服器)來提供靜態檔案。此伺服器通常執行不同類型的網頁伺服器,速度更快,但功能較少。一些常見的選擇有:
設定這些伺服器不在本文件的範圍內;請查看每個伺服器的相關文件以取得說明。
由於您的靜態檔案伺服器不會執行 Django,因此您需要修改部署策略,使其看起來像這樣:
當您的靜態檔案變更時,在本地執行
collectstatic
。將您的本地
STATIC_ROOT
推送到靜態檔案伺服器,進入正在提供服務的目錄。rsync 是此步驟的常見選擇,因為它只需要傳輸已變更的靜態檔案部分。
從雲端服務或 CDN 提供靜態檔案¶
另一種常見的做法是從雲端儲存供應商(例如 Amazon 的 S3)和/或 CDN(內容傳遞網路)提供靜態檔案。這可以讓您忽略提供靜態檔案的問題,並且通常可以加快網頁的載入速度(尤其是在使用 CDN 時)。
使用這些服務時,基本的工作流程看起來會有點像上面,但不同之處在於,您需要將靜態檔案傳輸到儲存供應商或 CDN,而不是使用 rsync
將靜態檔案傳輸到伺服器。
您可以使用多種方式來執行此操作,但如果供應商有 API,您可以使用 自訂檔案儲存後端 將 CDN 與您的 Django 專案整合。如果您已編寫或正在使用第三方自訂儲存後端,您可以藉由在 STORAGES
中設定 staticfiles
來告訴 collectstatic
使用它。
例如,如果您在 myproject.storage.S3Storage
中編寫了一個 S3 儲存後端,您可以使用它:
STORAGES = {
# ...
"staticfiles": {"BACKEND": "myproject.storage.S3Storage"}
}
完成後,您只需執行 collectstatic
,您的靜態檔案就會透過您的儲存套件推送到 S3。如果您稍後需要切換到不同的儲存供應商,您可能只需要變更 STORAGES
設定中的 staticfiles
。
如需有關如何編寫這些後端的詳細資訊,請參閱 如何編寫自訂儲存類別。有可用的第三方應用程式提供許多常見檔案儲存 API 的儲存後端。一個好的起點是 djangopackages.org 的概述。
了解更多¶
如需 django.contrib.staticfiles
中包含的所有設定、命令、樣板標籤和其他部分的完整詳細資訊,請參閱 靜態檔案參考。