如何部署静态文件

在生产环境中提供静态文件

将静态文件部署到生产环境的基本步骤包括两步:当静态文件发生更改时运行collectstatic命令,然后安排将收集的静态文件目录(STATIC_ROOT)移动到静态文件服务器并提供服务。根据staticfiles STORAGES别名,可能需要手动将文件移动到新位置,或者post_processStorage类的 方法可能会处理此问题。

与所有部署任务一样,细节决定成败。每个生产环境设置都会略有不同,因此您需要调整基本步骤以适应您的需求。下面是一些可能有所帮助的常见模式。

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

如果您想从已经提供站点服务的同一服务器提供静态文件,该过程可能如下所示

您可能希望自动化此过程,尤其是在您拥有多个 Web 服务器的情况下。

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

大多数较大的 Django 站点使用单独的 Web 服务器(即,不运行 Django 的服务器)来提供静态文件。此服务器通常运行不同类型的 Web 服务器——速度更快,但功能较少。一些常见的选择是

配置这些服务器不在本文档的讨论范围之内;请查看每个服务器各自的文档以获取说明。

由于您的静态文件服务器不会运行 Django,因此您需要修改部署策略,使其类似于

  • 当静态文件更改时,在本地运行collectstatic

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

从云服务或 CDN 提供静态文件

另一种常见的策略是从亚马逊的 S3 等云存储提供商和/或 CDN(内容交付网络)提供静态文件。这使您可以忽略提供静态文件的问题,并且通常可以加快网页加载速度(尤其是在使用 CDN 时)。

使用这些服务时,基本工作流程看起来与上述类似,不同之处在于,您无需使用rsync将静态文件传输到服务器,而是需要将静态文件传输到存储提供商或 CDN。

您可以通过多种方式执行此操作,但如果提供商有 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中包含的所有设置、命令、模板标签和其他部分的完整详细信息,请参阅静态文件参考

返回顶部