静态文件(二) 部署静态文件

本文译自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

转载于:https://my.oschina.net/u/3363145/blog/869175

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值