如何部署静态文件

参见

介绍 django.contrib.staticfiles如何管理静态文件(如图像、JavaScript、css) .

为生产中的静态文件提供服务

将静态文件投入生产的基本要点包括两个步骤:运行 collectstatic 命令,然后安排收集的静态文件目录 (STATIC_ROOT )移动到静态文件服务器并提供服务。具体取决于 staticfiles STORAGES 别名,则可能需要手动将文件移动到新位置,或者 post_process 的方法。 Storage 班级可能会处理好这一点。

与所有部署任务一样,细节是关键。每一个生产设置都会有一点不同,所以你需要调整基本的轮廓来适应你的需要。下面是一些可能有帮助的常见模式。

从同一服务器为站点和静态文件提供服务

如果您想从已经在为您的站点提供服务的同一台服务器上提供静态文件,则该过程可能类似于:

您可能希望自动化这个过程,特别是如果您有多个Web服务器。

从专用服务器提供静态文件

大多数较大的Django站点使用单独的Web服务器--也就是不运行Django的服务器--来提供静态文件。该服务器通常运行不同类型的Web服务器--速度更快,但功能不够全面。一些常见的选择包括:

配置这些服务器超出了本文档的范围;请查看每个服务器的相应文档以获取说明。

由于静态文件服务器不会运行django,因此需要修改部署策略,使其看起来像:

  • 当静态文件更改时,运行 collectstatic 局部地。

  • 推动您的本地 STATIC_ROOT 到正在服务的目录中的静态文件服务器。 rsync 这是此步骤的常见选择,因为它只需要传输已更改的静态文件的位。

从云服务或cdn服务静态文件

另一种常见的策略是提供来自云存储提供商的静态文件,如亚马逊的S3和/或CDN(内容交付网络)。这让您可以忽略静态文件服务的问题,并且通常有助于更快地加载网页(特别是在使用CDN时)。

当使用这些服务时,基本的工作流看起来有点像上面所说的,只是它没有使用 rsync 要将静态文件传输到服务器,需要将静态文件传输到存储提供商或cdn。

有很多种方法可以做到这一点,但如果提供程序有API,则可以使用 custom file storage backend 将CDN与您的Django项目集成。如果您已经编写或正在使用第三方定制存储后端,您可以看出 collectstatic 通过设置来使用它 staticfiles 在……里面 STORAGES

例如,如果您在 myproject.storage.S3Storage 您可以将其用于:

STORAGES = {
    # ...
    "staticfiles": {"BACKEND": "myproject.storage.S3Storage"}
}

一旦完成,您所要做的就是运行 collectstatic 您的静态文件将通过您的存储包推送到S3。如果您以后需要切换到其他存储提供商,您可能只需更改 staticfilesSTORAGES 布景。

有关如何编写其中一个后端的详细信息,请参见 如何编写自定义存储类 . 有可用的第三方应用程序为许多通用文件存储API提供存储后端。一个好的起点是 overview at djangopackages.org .

了解更多

有关中包含的所有设置、命令、模板标记和其他项的完整详细信息 django.contrib.staticfilesthe staticfiles reference .