-

部署静态文件

也可以看看

有关使用的简介django.contrib.staticfiles,请参阅 管理静态文件(例如,图像,JavaScript,CSS)。

在生产中提供静态文件

将静态文件投入生产的基本概述包括两个步骤:collectstatic更改静态文件时运行命令,然后安排将收集的静态文件目录(STATIC_ROOT)移至静态文件服务器并提供服务。根据 STATICFILES_STORAGE,可能需要手动将文件移动到新位置,否则类的post_process方法Storage可能会解决这个问题。

当然,与所有部署任务一样,细节在于魔鬼。每个生产设置都会有所不同,因此您需要调整基本轮廓以适合您的需求。以下是一些可能有用的常见模式。

从同一服务器提供站点和您的静态文件

如果要从已经为您的站点提供服务的同一台服务器提供静态文件,则该过程可能类似于:

  • 将您的代码推送到部署服务器。
  • 在服务器上,运行collectstatic以将所有静态文件复制到中STATIC_ROOT。
  • 配置您的Web服务器以STATIC_ROOT 在URL下提供文件STATIC_URL。例如, 这是使用Apache和mod_wsgi的方法。

您可能希望自动化此过程,尤其是当您有多个Web服务器时。

从专用服务器提供静态文件

大多数较大的Django站点使用单独的Web服务器(即未同时运行Django的Web服务器)来提供静态文件。该服务器通常运行其他类型的Web服务器-速度更快,但功能较少。一些常见的选择是:

  • Nginx的
  • 精简版的Apache

配置这些服务器不在本文档的讨论范围内。检查每个服务器各自的文档以获取指示。

由于您的静态文件服务器不会运行Django,因此您需要修改部署策略,使其类似于:

  • 当您的静态文件更改时,请在collectstatic本地运行。
  • 将您的本地推STATIC_ROOT送到静态文件服务器,进入正在服务的目录。rsync是此步骤的常见选择,因为它只需要传输已更改的静态文件的位。

从云服务或CDN服务静态文件

另一个常见的策略是为来自Amazon S3和/或CDN(内容交付网络)等云存储提供商的静态文件提供服务。这使您可以忽略提供静态文件的问题,并且通常可以使网页加载速度更快(尤其是在使用CDN时)。

使用这些服务时,基本工作流程看起来与上面类似,除了rsync需要将静态文件传输到存储提供程序或CDN 而不是用于将静态文件传输到服务器之外。

您可以通过多种方式执行此操作,但是如果提供程序具有API,则可以使用自定义文件存储后端 将CDN与Django项目集成。如果您已经编写或正在使用第三方的自定义存储后端,则可以collectstatic通过设置STATICFILES_STORAGE存储引擎来告诉您使用它。

例如,如果您已经编写了一个S3存储后端,则 myproject.storage.S3Storage可以将其用于:

STATICFILES_STORAGE = 'myproject.storage.S3Storage'

完成此操作后,所有您需要做的就是运行collectstatic,您的静态文件将通过存储包推送到S3。如果以后需要切换到其他存储提供商,则只需更改STATICFILES_STORAGE设置即可。

有关如何编写这些后端之一的详细信息,请参阅《 编写自定义存储系统》。有可用的第三方应用程序为许多常用文件存储API提供存储后端。djangopackages.org的概述是一个很好的起点。

了解更多

有关其中包含的所有设置,命令,模板标记和其他部分的完整详细信息django.contrib.staticfiles,请参见staticfiles参考