如何部署静态文件¶
另请参阅
有关使用django.contrib.staticfiles
的介绍,请参阅如何管理静态文件(例如图像、JavaScript、CSS)。
在生产环境中提供静态文件¶
将静态文件部署到生产环境的基本步骤包括两步:当静态文件发生更改时运行collectstatic
命令,然后安排将收集的静态文件目录(STATIC_ROOT
)移动到静态文件服务器并提供服务。根据staticfiles
STORAGES
别名,可能需要手动将文件移动到新位置,或者post_process
Storage
类的 方法可能会处理此问题。
与所有部署任务一样,细节决定成败。每个生产环境设置都会略有不同,因此您需要调整基本步骤以适应您的需求。下面是一些可能有所帮助的常见模式。
从同一服务器提供站点和静态文件¶
如果您想从已经提供站点服务的同一服务器提供静态文件,该过程可能如下所示
将您的代码推送到部署服务器。
在服务器上,运行
collectstatic
将所有静态文件复制到STATIC_ROOT
。配置您的 Web 服务器以在 URL
STATIC_URL
下提供STATIC_ROOT
中的文件。例如,以下是如何使用 Apache 和 mod_wsgi 执行此操作。
您可能希望自动化此过程,尤其是在您拥有多个 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
中包含的所有设置、命令、模板标签和其他部分的完整详细信息,请参阅静态文件参考。