如何部署静态文件¶
另请参阅
有关使用 django.contrib.staticfiles
的介绍,请参阅 如何管理静态文件(例如图像、JavaScript、CSS)。
在生产环境中提供静态文件¶
将静态文件投入生产的基本步骤包括两个步骤:在静态文件更改时运行 collectstatic
命令,然后安排将收集的静态文件目录 (STATIC_ROOT
) 移至静态文件服务器并提供服务。根据 staticfiles
STORAGES
别名,可能需要手动将文件移至新位置,或者 Storage
类的 post_process
方法可以处理此问题。
与所有部署任务一样,关键在于细节。每个生产环境设置都会略有不同,因此你需要根据自己的需要调整基本大纲。以下是可能有所帮助的一些常见模式。
在同一服务器上提供站点和静态文件¶
如果你想在已用于提供站点的同一服务器上提供静态文件,则该过程可能如下所示
- 将你的代码推送到部署服务器。
- 在服务器上,运行
collectstatic
将所有静态文件复制到STATIC_ROOT
中。 - 将你的 Web 服务器配置为在 URL
STATIC_URL
下提供STATIC_ROOT
中的文件。例如,以下是如何 使用 Apache 和 mod_wsgi 来执行此操作。
你可能需要自动化此过程,特别是如果你有多个 Web 服务器。
在专用服务器上提供静态文件¶
大多数较大的 Django 站点使用单独的 Web 服务器(即,不运行 Django 的服务器)来提供静态文件。此服务器通常运行不同类型的 Web 服务器——速度更快,但功能更少。一些常见选择包括
配置这些服务器不在本文档的讨论范围内;请查看每台服务器各自的文档以获取说明。
由于你的静态文件服务器不会运行 Django,因此你需要修改部署策略,使其类似于
- 当你的静态文件发生更改时,在本地运行
collectstatic
。 - 将你的本地
STATIC_ROOT
推送到静态文件服务器,进入正在提供的目录。 rsync 是此步骤的常见选择,因为它只需要传输已更改的静态文件位。
在云服务或 CDN 上提供静态文件¶
另一种常见策略是从云存储提供商(如 Amazon 的 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 上的概述。
添加了STORAGES
设置。
了解更多¶
有关django.contrib.staticfiles
中包含的所有设置、命令、模板标记和其他部分的完整详细信息,请参阅staticfiles 参考。