将静态文件部署到线上环境的基本步骤很简单:当静态文件改变时,运行collectstatic 命令收集静态文件,而后将该目录(STATIC_ROOT) 搬到静态文件服务器上。根据STATICFILES_STORAGE的设置,这些文件可能须要手工移动到一个新的位置,或者使用Storage 类的post_process 方法完成该任务。后端
固然,与全部的部署任务同样。每一个线上环境的创建都会有所不一样,因此你须要调整基本的纲要以适应你的需求。下面是一些常见的方法,可能有所帮助。api
若是你的静态文件和网站位于同一台服务器,流程可能像是这样:服务器
你可能想自动化这个过程,特别是若是你有多台Web 服务器。有许多种方法来完成这个自动化,可是许多Django 开发人员喜欢 Fabric。post
在一下的小节中,咱们将演示一些示例的Fabric 脚原本自动化不一样选择的文件部署。Fabric 脚本的语法至关简单,但这里不会讲述;参见Fabric 的文档 以得到其语法的完整解释。网站
因此,一个将静态文件部署到多台Web 服务器上的Fabric 脚本大概会是:spa
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 的服务器。这种服务器一般运行一种不一样类型的服务器 —— 更快可是功能不多。一些常见的选择有:code
配置这些服务器在这篇文档范围以外;查看每种服务器各自的文档以得到说明。server
既然你的静态文件服务器不会容许Django,你将须要修改的部署策略,大概会是这样:开发
下面是Fabric 脚本大概的样子:rem
from fabric.api import * from fabric.contrib import project # Where the static files get collected locally. Your STATIC_ROOT setting. env.local_static_root = '/tmp/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 )
另外一个常见的策略是放置静态文档到一个云存储提供商好比亚马逊的S3 和/或一个CDN(Content Delivery Network)上。这让你能够忽略保存静态文件的问题,而且一般能够加快网页的加载(特别是使用CDN 的时候)。
当使用这些服务时,除了不是使用rsync 传输你的静态文件到服务器上而是到存储提供商或CDN 上以外,基本的工做流程和上面的差很少。
有许多方式能够实现它,可是若是提供商具备API,那么自定义的文件存储后端 将使得这个过程至关简单。若是你已经写好或者正在使用第三方的自定义存储后端,你能够经过设置STATICFILES_STORAGE 来告诉collectstatic 来使用它。
例如,若是你已经在myproject.storage.S3Storage 中写好一个S3 存储的后端,你能够这样使用它:
STATICFILES_STORAGE = 'myproject.storage.S3Storage'
一旦完成这个,你所要作的就是运行collectstatic,而后你的静态文件将被你的存储后端推送到S3 上。若是之后你须要切换到一个不一样的存储提供商,你只需简单地修改你的STATICFILES_STORAGE 设置。