如何部署靜態檔案

在生產環境中提供靜態檔案

將靜態檔案投入生產環境的基本步驟包括兩個:當靜態檔案變更時,執行 collectstatic 命令,然後安排將收集的靜態檔案目錄(STATIC_ROOT)移動到靜態檔案伺服器並提供服務。根據 staticfilesSTORAGES 別名,可能需要手動將檔案移動到新的位置,或者 Storage 類的 post_process 方法可能會處理這部分。

與所有部署任務一樣,魔鬼藏在細節中。每個生產環境的設定都會有些不同,因此您需要調整基本步驟以符合您的需求。以下是一些可能有幫助的常見模式。

從同一伺服器提供網站和您的靜態檔案

如果您想從已經提供您網站的同一伺服器提供靜態檔案,該過程可能如下所示:

您可能需要將此過程自動化,尤其是在您有多個網頁伺服器的情況下。

從專用伺服器提供靜態檔案

大多數較大型的 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 中包含的所有設定、命令、樣板標籤和其他部分的完整詳細資訊,請參閱 靜態檔案參考

返回頂部