部署静态文件 — Django 文档
部署静态文件
在生产中提供静态文件
将静态文件投入生产的基本大纲包括两个步骤:静态文件变化时运行:djadmin:`collectstatic`命令,然后安排收集的静态文件目录(:setting:` STATIC_ROOT`) 移动到静态文件服务器并提供服务。 根据 :setting:`STATICFILES_STORAGE`,文件可能需要手动移动到新位置,或者 Storage
类的 post_process 方法可能会处理这个问题.
当然,与所有部署任务一样,细节决定成败。 每个制作设置都会有所不同,因此您需要调整基本轮廓以满足您的需求。 以下是一些可能会有所帮助的常见模式。
从同一台服务器为站点和静态文件提供服务
如果您想从已经为您的站点提供服务的同一台服务器上提供静态文件,该过程可能如下所示:
- 将您的代码推送到部署服务器。
- 在服务器端运行:djadmin:`collectstatic`,将所有静态文件复制到:setting:`STATIC_ROOT`。
- 配置您的 Web 服务器以提供 URL :setting:`STATIC_URL` 下的 :setting:`STATIC_ROOT` 中的文件。 例如,这里是 如何使用 Apache 和 mod_wsgi 执行此操作。
您可能希望自动化此过程,尤其是当您有多个 Web 服务器时。
从专用服务器提供静态文件
大多数较大的 Django 站点使用单独的 Web 服务器(即,不运行 Django 的服务器)来提供静态文件。 该服务器通常运行不同类型的 Web 服务器——速度更快但功能较少。 一些常见的选择是:
配置这些服务器超出了本文档的范围; 检查每个服务器各自的文档以获取说明。
由于您的静态文件服务器不会运行 Django,您需要将部署策略修改为如下所示:
- 当您的静态文件更改时,请在本地运行 :djadmin:`collectstatic`。
- 将您的本地 :setting:`STATIC_ROOT` 推送到静态文件服务器到正在提供服务的目录中。 rsync 是这一步的常用选择,因为它只需要传输已更改的静态文件的位。
从云服务或 CDN 提供静态文件
另一种常见的策略是从云存储提供商(如 Amazon 的 S3 和/或 CDN(内容交付网络))提供静态文件。 这让您可以忽略提供静态文件的问题,并且通常可以加快网页加载速度(尤其是在使用 CDN 时)。
使用这些服务时,基本工作流程看起来有点像上面的,除了使用 rsync
将静态文件传输到服务器时,您需要将静态文件传输到存储提供商或 CDN .
您可以通过多种方式执行此操作,但是如果提供程序有 API,您可以使用 自定义文件存储后端 将 CDN 与您的 Django 项目集成。 如果您已经编写或正在使用 3rd 方自定义存储后端,您可以通过将 :setting:`STATICFILES_STORAGE` 设置为存储来告诉 :djadmin:`collectstatic` 使用它引擎。
例如,如果您在 myproject.storage.S3Storage
中编写了一个 S3 存储后端,则可以将其用于:
STATICFILES_STORAGE = 'myproject.storage.S3Storage'
完成后,您所要做的就是运行 :djadmin:`collectstatic`,您的静态文件将通过您的存储包推送到 S3。 如果您以后需要切换到不同的存储提供程序,您可能只需要更改您的 :setting:`STATICFILES_STORAGE` 设置。
有关如何编写这些后端之一的详细信息,请参阅 编写自定义存储系统 。 有 3rd 方应用程序可以为许多常见的文件存储 API 提供存储后端。 一个很好的起点是 djangopackages.org 上的 概述。