部署 Django App 的策略
Strategies for deploying Django App
我有一个问题可能比django相关的开发更笼统。背景很简单:
我正在从事一个项目,该项目的页面主要与 Web 应用程序相关联(这就是我使用 Django 的目的)。然而,除了与应用程序相关的页面之外,还有很多辅助页面(如登录页面、常见问题解答页面、联系页面等)基本上与网络应用程序无关。
部署此类项目的标准策略是什么?通过 Django 将请求路由到这些静态页面似乎有缺陷。似乎有意义的是 运行 两台服务器:一台负责 运行 Django 应用程序,另一台单独的服务器负责提供静态页面(可能包括应用程序部分使用的静态内容)的网站)。
做出这些决定时应遵循哪些指导原则?
运行 Django 与静态站点或其他 CMS 并存的情况并不少见。
您需要一个前端服务器来将请求路由到静态内容或 CMS。
有两种常见的策略:
使用 URL 前缀来确定路由的位置(例如,com/static/ 到静态文件,example.com/ 到 Django)。您需要一个前端服务器将请求路由到静态内容或用另一个 framework/language 编写的 Web app/CMS(这是在 Apache 中使用 Alias 指令配置的)。
将应用程序服务器和静态文件服务器放在不同的 domain/subdomain 上(例如 static.example.com 到 static 和 app.example.com 到 Django)。您可以通过将前端服务器配置为在单台机器上服务(在 Apache 上使用 VirtualHost 配置)或作为单独的机器来执行此操作。无论哪种情况,您都需要配置 DNS 以将您的子域指向正确的机器。
前者设置起来更简单,但后者可以让您更好地扩展。
通常用于前端应用程序服务器的服务器包括 Apache、Nginx 或 uWSGI,但几乎任何生产质量的 Web 服务器都可以做到。
事实上,Django 的部署文档(例如 Apache)总是会指示您让前端服务器为您的静态文件提供服务,即使在仅安装 Django 的情况下也是如此,因为 Django 并不是为有效地提供静态文件而设计的内容不同于前端 Web 服务器。
django.contrib.staticfiles 应用程序可以让 Django 引用托管在不同服务器上的静态文件,并在开发期间使用 Django 的内置服务器轻松切换提供静态内容,但使用前端生产端服务器。
我有一个问题可能比django相关的开发更笼统。背景很简单:
我正在从事一个项目,该项目的页面主要与 Web 应用程序相关联(这就是我使用 Django 的目的)。然而,除了与应用程序相关的页面之外,还有很多辅助页面(如登录页面、常见问题解答页面、联系页面等)基本上与网络应用程序无关。
部署此类项目的标准策略是什么?通过 Django 将请求路由到这些静态页面似乎有缺陷。似乎有意义的是 运行 两台服务器:一台负责 运行 Django 应用程序,另一台单独的服务器负责提供静态页面(可能包括应用程序部分使用的静态内容)的网站)。
做出这些决定时应遵循哪些指导原则?
运行 Django 与静态站点或其他 CMS 并存的情况并不少见。
您需要一个前端服务器来将请求路由到静态内容或 CMS。
有两种常见的策略:
使用 URL 前缀来确定路由的位置(例如,com/static/ 到静态文件,example.com/ 到 Django)。您需要一个前端服务器将请求路由到静态内容或用另一个 framework/language 编写的 Web app/CMS(这是在 Apache 中使用 Alias 指令配置的)。
将应用程序服务器和静态文件服务器放在不同的 domain/subdomain 上(例如 static.example.com 到 static 和 app.example.com 到 Django)。您可以通过将前端服务器配置为在单台机器上服务(在 Apache 上使用 VirtualHost 配置)或作为单独的机器来执行此操作。无论哪种情况,您都需要配置 DNS 以将您的子域指向正确的机器。
前者设置起来更简单,但后者可以让您更好地扩展。
通常用于前端应用程序服务器的服务器包括 Apache、Nginx 或 uWSGI,但几乎任何生产质量的 Web 服务器都可以做到。
事实上,Django 的部署文档(例如 Apache)总是会指示您让前端服务器为您的静态文件提供服务,即使在仅安装 Django 的情况下也是如此,因为 Django 并不是为有效地提供静态文件而设计的内容不同于前端 Web 服务器。
django.contrib.staticfiles 应用程序可以让 Django 引用托管在不同服务器上的静态文件,并在开发期间使用 Django 的内置服务器轻松切换提供静态内容,但使用前端生产端服务器。