django 1.8 官方文档翻译: 6-6-4 部署静态文件

简介: 部署静态文件 另见 django.contrib.staticfiles 的用法简介,请参见管理静态文件(CSS、images)。

部署静态文件

另见

django.contrib.staticfiles 的用法简介,请参见管理静态文件(CSS、images)

在线上环境部署静态文件

放置静态文件到线上环境的基本步骤很简单:当静态文件改变时,运行collectstatic 命令,然后安排将收集好的静态文件的目录(STATIC_ROOT) 搬到静态文件服务器上。取决于STATICFILES_STORAGE,这些文件可能需要手工移动到一个新的位置或者Storage 类的post_process 方法可以帮你。

当然,与所有的部署任务一样,魔鬼隐藏在细节中。每个线上环境的建立都会有所不同,所以你需要调整基本的纲要以适应你的需求。下面是一些常见的方法,可能有所帮助。

网站和静态文件位于同一台服务器上

如果你的静态文件和网站位于同一台服务器,流程可能像是这样:

  • 将你的代码推送到部署的服务器上。
  • 在这台服务器上,运行collectstatic 来收集所有的静态文件到STATIC_ROOT
  • 配置Web 服务器来托管URLSTATIC_URL下的STATIC_ROOT。 例如,这是如何使用Apache 和mod_wsgi 来完成它

你可能想自动化这个过程,特别是如果你有多台Web 服务器。有许多种方法来完成这个自动化,但是许多Django 开发人员喜欢 Fabric

在一下的小节中,我们将演示一些示例的Fabric 脚本来自动化不同选择的文件部署。Fabric 脚本的语法相当简单,但这里不会讲述;参见Fabric 的文档 以获得其语法的完整解释。

所以,一个部署静态文件来多台Web 服务器上的Fabric 脚本大概会是:

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 的服务器。这种服务器通常运行一种不同类型的服务器 —— 更快但是功能很少。一些常见的选择有:

配置这些服务器在这篇文档范围之外;查看每种服务器各自的文档以获得说明。

既然你的静态文件服务器不会允许Django,你将需要修改的部署策略,大概会是这样:

  • 当静态文件改变时,在本地运行collectstatic
  • 将你本地的STATIC_ROOT 推送到静态文件服务器相应的目录中。在这一步,常见的选择rsync ,因为它只传输静态文件改变的部分。

下面是Fabric 脚本大概的样子:

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
    )

静态文件位于一个云服务或CDN 上

两位一个常见的策略是放置静态文档到一个云存储提供商比如亚马逊的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 设置。

关于如何编写这些后端的细节,请参见编写一个自定义的存储系统。有第三方的应用提供存储后端,它们支持许多常见的文件存储API。一个不错的入口是djangopackages.com 的概览

了解更多

关于django.contrib.staticfiles 中包含的设置、命令、模板标签和其它细节,参见staticfiles 参考

译者:Django 文档协作翻译小组,原文:Deploying static files

本文以 CC BY-NC-SA 3.0 协议发布,转载请保留作者署名和文章出处。

Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606。

相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
11月前
|
前端开发 数据库 Docker
一款可以直接使用的招聘网站, react django开发招聘网站,docker 部署
一款可以直接使用的招聘网站, react django开发招聘网站,docker 部署
85 0
|
11月前
|
XML 应用服务中间件 Linux
在一个centos服务器上同时部署tomcat,django,flask
在一个centos服务器上同时部署tomcat,django,flask
120 0
|
1月前
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
104 0
|
3月前
|
前端开发 JavaScript Linux
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
|
5月前
|
关系型数据库 MySQL 开发工具
Django项目部署(命令函部署)
Django项目部署(命令函部署)
|
5月前
|
运维 Serverless 测试技术
函数计算产品使用问题之如何部署Django服务
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
|
测试技术 数据安全/隐私保护 Docker
Docker部署开源项目Django-CMS企业内容管理系统
【5月更文挑战第20天】Docker部署开源项目Django-CMS企业内容管理系统
137 1
|
6月前
|
前端开发 Python
(三)整合 React 项目静态文件到 Django 项目
(三)整合 React 项目静态文件到 Django 项目
100 9
|
6月前
|
安全 数据库 Docker
百度搜索:蓝易云【Django进行docker服务器部署。】
需要注意的是,部署前请确保在开发环境中进行了充分的测试,并且在生产环境中采取了适当的安全措施,如使用安全的数据库连接、配置正确的访问权限等。
81 4
|
6月前
|
安全 JavaScript 搜索推荐
【实测】记一次用windows11家庭中文版部署django+vue项目的踩坑之旅
【实测】记一次用windows11家庭中文版部署django+vue项目的踩坑之旅