本文译自Django官网。
适用:Django1.10
网址:https://docs.djangoproject.com/en/1.10/howto/static-files/deployment/
参考文件
使用django.contrib.staticfiles的介绍见管理静态文件(e.g. images, JavaScript, CSS)。
生产过程中提供静态文件
将静态文件放入生产的基本流程很简单:
- 更改静态文件时运行collectstatic命令;
- 将收集的静态文件目录(STATIC_ROOT)移动到静态文件服务器并提供服务。
- 根据STATICFILES_STORAGE,可能需要手动将文件移动到新位置,否则Storage类的post_process方法可能会受到影响。
当然,与所有部署任务一样,细节很重要。 每个生产设置都会有所不同,因此需要根据需要调整基本流程。 以下是一些可能有帮助的常见模式。
从相同的服务器提供网址和静态文件
如果使用提供网址的服务器提供静态文件,过程是这样的:
- 将代码上传到部署服务器;
- 在服务器上运行collectstatic复制所有的静态文件到STATIC_ROOT。
- 配置Web服务器在STATIC_ROOT中STATIC_URL下提供文件。
例如,这里是如何使用Apache和mod_wsgi。 你可能很希望自动执行该过程,特别是有多个Web服务器的情况下。实现这个自动化的方法很多,但是许多Django开发人员喜欢的一个方法是Fabric。
在下面的部分中,我们将展示一些自动部署文件的fabfiles示例(即Fabric脚本)。fabfile的语法相当简单,但这里不做介绍; Fabric语法的完整说明见Fabric文档。
将静态文件部署到几个Web服务器的fabfile可能如下所示:
from fabric.api import *
# Hosts to deploy onto
env.hosts = ['www1.example.com', 'www2.example.com']
# Where your project code lives on the server
env.project_root = '/home/www/myproject'
def deploy_static():
with cd(env.project_root):
run('./manage.py collectstatic -v0 --noinput')
从专用服务器提供静态文件
大多数大的Django网站使用一个单独的Web服务器(比如一个不运行Django的服务器)来提供静态文件。这个服务器通常运行不同类型的Web服务器-速度更快,但功能更少。 一些常见的选择是:
配置这些服务器超出了本文的范畴,检查每个服务器的相应文档以得到说明。
由于静态文件服务器不再运行Django,我们需要将部署策略更改为:
- 更改静态文件时,运行collectstatic;
- 将本地STATIC_ROOT推送到静态文件服务器正在提供静态文件的目录中,此步骤通常选择rsync,因为它只需要传输已更改的静态文件。
下面是可能的fabfile:
from fabric.api import *
from fabric.contrib import project
# Where the static files get collected locally. Your STATIC_ROOT setting.
env.local_static_root = '/path/to/static'
# Where the static files should go remotely
env.remote_static_root = '/home/www/static.example.com'
@roles('static')
def deploy_static():
local('./manage.py collectstatic')
project.rsync_project(
remote_dir=env.remote_static_root,
local_dir=env.local_static_root,
delete=True,
)
从云端服务或CDN提供静态文件
另一个常见的策略是从Amazon S3和/或CDN(内容传送网络)等云存储提供商提供静态文件。这样可以忽略提供静态文件的问题,并且通常可以加快加载网页的速度(特别是使用CDN时)。
使用这些服务时,基本的工作流将与上面所述有些相似,除了不再需要使用rsync将静态文件传输到服务器,而是需要将静态文件传输到存储提供商或CDN。
有许多方法可以执行此操作,但如果提供商有自定义文件存储后端的API将使该过程变得非常简单。 如果已经编写或正在使用第三方自定义存储后端,则可以通过将STATICFILES_STORAGE设置为存储引擎来告诉collectstatic来使用它。
例如,如果在myproject.storage.S3Storage中编写了S3存储后端,则可以使用它:
STATICFILES_STORAGE = 'myproject.storage.S3Storage'
它一旦实现,所有需要做的只有运行collectstatic然后静态文件将通过存储包上传到S3。如果稍后需要更换一个不同的存储提供商,这个过程可以像更换STATICFILES_STORAGE一样简单。
编写自定义存储系统中有如何写一个这样的终端的详细介绍。有许多第三方应用程序提供通过文件存储APIs提供存储后端的服务。 我们可以从djangopackages.com的概述开始。
了解更多
关于设置、命令、模板标签和Django.contrib.staticfiles包含的细节的完整介绍见静态文件app。

被折叠的 条评论
为什么被折叠?



