Django部署静态文件

线上环境下部署静态文件

将静态文件部署到线上环境的基本步骤很简单:当静态文件改变时,运行collectstatic 命令收集静态文件,然后将该目录(STATIC_ROOT) 搬到静态文件服务器上。根据STATICFILES_STORAGE的设置,这些文件可能需要手工移动到一个新的位置,或者使用Storage 类的post_process 方法完成该任务。

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

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

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

  • 将你的代码推送到部署的服务器上。
  • 在这台服务器上,运行collectstatic 来收集所有的静态文件到STATIC_ROOT。
  • 配置Web 服务器来托管URL STATIC_URL下的STATIC_ROOT。

你可能想自动化这个过程,特别是如果你有多台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 的服务器。这种服务器通常运行一种不同类型的服务器 —— 更快但是功能很少。一些常见的选择有:

  • Nginx
  • 精简版的Apache

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

既然你的静态文件服务器不会允许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 设置。

转载于:https://my.oschina.net/liuyuantao/blog/755959

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将 Django 项目中的静态文件发布到生产环境,可以按照以下步骤进行操作: 1. 在项目的 settings.py 文件中设置静态文件目录: ```python STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), ] ``` 这里将项目根目录下的 static 目录作为静态文件的目录,也可以根据需要设置其他目录。 2. 在项目的 urls.py 文件中配置静态文件 URL: ```python from django.conf.urls.static import static from django.conf import settings urlpatterns = [ # ... 其他 URL 配置 ... ] urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) ``` 这里将静态文件 URL 设置为 `/static/`,将静态文件目录设置为 settings.py 文件中的 `STATICFILES_DIRS` 配置项。 3. 收集静态文件: 在项目根目录下执行以下命令: ```sh python manage.py collectstatic ``` 这将会把所有静态文件收集到一个指定的目录中,该目录由 `STATIC_ROOT` 配置项指定。 4. 配置 Web 服务器: 根据不同的 Web 服务器,需要配置不同的选项来将静态文件发布到生产环境中。例如,在使用 Nginx 作为 Web 服务器时,可以通过以下配置来指定静态文件的目录: ```nginx location /static/ { alias /path/to/static/; } ``` 这里将 `/path/to/static` 目录作为静态文件的目录。 注意:在进行生产环境部署时,需要将 `DEBUG` 配置项设置为 `False`,以关闭 Django 的调试模式。同时,也要确保静态文件目录和 URL 的配置正确无误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值