# Django 2.2.9.dev20191202104323 文档

# 部署静态文件

参见

想要 `django.contrib.staticfiles` 的使用指南，请参考 管理静态文件（比如图片、JavaScript、CSS）。

## 在生产环境提供静态文件服务

在生产环境部署静态文件的要点很简单：在静态文件变化时，运行 `collectstatic`，然后将已收集的静态文件目录(`STATIC_ROOT`)移至静态文件服务器并提供服务。 `STATICFILES_STORAGE` 可能会要求手动将文件移动到新位置，不过 `Storage` 类的 `post_process` 方法可能会处理它。

当然，像所有的部署任务一样，细节决定成败。每个生成环境的配置可能都有点不同个，所以，需要调整配置以满足你的需求。以下是常见模式，可能对你有所帮助。

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

如果你想在早已提供站点服务器服务器上同时提供静态文件服务，操作步骤类似这样：

- 将代码推送至部署服务器。
- 在服务器上运行 `collectstatic`，将所有的静态文件拷贝至 `STATIC_ROOT`。
- 配置 Web 服务器，使其在 `STATIC_URL` 下为 `STATIC_ROOT` 目录下的文件提供静态文件服务。例如， 这里是如何以 Apache 配合 mod_wsgi 开始。

你可能期望将该流程自动化，特别是在你有好几个 web 服务器的时候。

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

大多数大型 Django 站点使用一个独立的 Web 服务器——即，该服务器并未运行 Django，值提供静态文件服务。这种服务器一般运行一种不同的 Web 服务器——更快，更简单。常见选项如下：

- Nginx
- 一个 Apache 的朴素版本

如何配置这些服务器超出了本文范围；查阅这些服务器各自的文档获取介绍。

由于静态文件服务器并不运行 Django，你需要将部署策略改成这样：

- 当静态文件改变时，本地运行 `collectstatic`。
- 将本地 `STATIC_ROOT` 推送到静态文件服务器提供服务的目录。 rsync 是一个常见选项，因为这种配置只会传输文件修改部分的数据流。

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

另一种常见的策略是从类似亚马逊 S3 的云存储服务商或 CDN (content delivery network) 提供静态文件服务。这能让你忽略提供静态文件服务可能出现的问题，提供 Web 页面加载速度（尤其是在用 CDN 的时候）。

使用这些服务时，基本的工作流程与上面类似，除了要将静态文件传输给存储服务商或 CDN，而不是用 `rsync` 将静态文件传输给服务器。

有很多中方法可以实现目的，但是若服务商提供一个 API 自定义文件存储后端，这将会使流程难以置信的简单。若你已编写或正在使用第三方的自定义存储后端，你可以通过将 `STATICFILES_STORAGE` 指向该存储引擎告诉 `collectstatic` 启用它。

例如，若你已在 `myproject.storage.S3Storage` 中写了一个 S3 存储后端，可以这么用:

    STATICFILES_STORAGE = 'myproject.storage.S3Storage'

只要完成了上述流程，你就只需运行 `collectstatic`，静态文件将通过存储包推送给 S3。如果稍后需要切换至另一个存储服务商，只需简单地修改 `STATICFILES_STORAGE` 配置。

关于如何编写这些后端的细节，参考 编写一个自定义存储系统。有很多可用的第三方应用提供了针对常见文件存储 API 的存储后端。 djangopackages.org 入门 是个不错的起点。

## 了解更多

想要了解所有配置项，命令，模板标签和 `django.contrib.staticfiles` 包含的其它零碎的完整细节，参考 staticfiles 参考。