Django 应用程序的部署 - 缩放、静态文件、服务器
Deployment of django app - Scaling, Static Files, Servers
我正在努力在 Linux 服务器上部署我的 django
应用程序。遇到各种问题,希望有人为我澄清一下。我搜索了好几天,但我找到的答案要么过于宽泛,要么与主题相去甚远。
1) 根据 django
文档,在本地提供静态文件效率低下。这是否意味着包括 html
、css
、js
文件在内的所有静态文件都应托管在另一台服务器上?
2) 我有一个 AWS S3 存储桶来托管我的所有媒体文件,如果以上答案是肯定的,我可以使用同一个存储桶(或创建一个新的存储桶)来托管我的静态文件吗?如果是这样,效率高吗?
3) 根据搜索,为了让 django 水平扩展,它应该是一个无状态应用程序,这是否意味着我也必须将我的数据库托管在与我自己的 Linux 服务器不同的位置?
1) 将静态文件托管在与 Django 应用程序相同的服务器上是完全可以的,但是要提供所述文件,您应该使用网络服务器,例如 NGINX 或 Apache。 Django 并非设计用于在生产环境中提供静态数据。另一方面,Nginx 和 Apache 在这方面做得很好。
2) 您绝对可以将静态和媒体文件托管在 S3 存储桶中。这比将它们托管在单个服务器上要好得多,因为它们是由一个单独的实体提供的,这意味着无论您 运行 在负载均衡器后面有多少应用程序服务器,它们都将是从同一来源请求静态文件。为了提高效率,您甚至可以配置 AWS 的 CloudFront,即亚马逊的 CDN(内容分发网络)。
3) 理想情况下,您的数据库应托管在单独的服务器上。数据库占用大量资源,因此将数据库托管在与应用程序相同的服务器上可能会导致速度减慢,有时甚至会彻底崩溃。横向扩展,你会把很多应用服务器连接到一个数据库实例;有效地增加了该服务器上的负载。
以上所有要点都与您的用例和资源有关。如果您正在 运行ning 的应用程序不处理繁忙的流量 - 比如说一天几百次点击 - 并且您的服务器有足够的资源(RAM,CPU,存储),它是可以接受的运行 一切都在一个盒子里。
但是,如果您计划每天接受数以万计的连接,最好将责任分开以获得最佳的可伸缩性。它不仅使您的应用程序更加高效和响应迅速,而且在您需要进一步扩展(数据库集群、近线内容交付等)时 运行 还会让您的生活更轻松。
TL;DR:如果它足够强大,您可以 运行 单台服务器上的所有内容,但从长远来看 运行 这会让您的生活更加艰难。
我正在努力在 Linux 服务器上部署我的 django
应用程序。遇到各种问题,希望有人为我澄清一下。我搜索了好几天,但我找到的答案要么过于宽泛,要么与主题相去甚远。
1) 根据 django
文档,在本地提供静态文件效率低下。这是否意味着包括 html
、css
、js
文件在内的所有静态文件都应托管在另一台服务器上?
2) 我有一个 AWS S3 存储桶来托管我的所有媒体文件,如果以上答案是肯定的,我可以使用同一个存储桶(或创建一个新的存储桶)来托管我的静态文件吗?如果是这样,效率高吗?
3) 根据搜索,为了让 django 水平扩展,它应该是一个无状态应用程序,这是否意味着我也必须将我的数据库托管在与我自己的 Linux 服务器不同的位置?
1) 将静态文件托管在与 Django 应用程序相同的服务器上是完全可以的,但是要提供所述文件,您应该使用网络服务器,例如 NGINX 或 Apache。 Django 并非设计用于在生产环境中提供静态数据。另一方面,Nginx 和 Apache 在这方面做得很好。
2) 您绝对可以将静态和媒体文件托管在 S3 存储桶中。这比将它们托管在单个服务器上要好得多,因为它们是由一个单独的实体提供的,这意味着无论您 运行 在负载均衡器后面有多少应用程序服务器,它们都将是从同一来源请求静态文件。为了提高效率,您甚至可以配置 AWS 的 CloudFront,即亚马逊的 CDN(内容分发网络)。
3) 理想情况下,您的数据库应托管在单独的服务器上。数据库占用大量资源,因此将数据库托管在与应用程序相同的服务器上可能会导致速度减慢,有时甚至会彻底崩溃。横向扩展,你会把很多应用服务器连接到一个数据库实例;有效地增加了该服务器上的负载。
以上所有要点都与您的用例和资源有关。如果您正在 运行ning 的应用程序不处理繁忙的流量 - 比如说一天几百次点击 - 并且您的服务器有足够的资源(RAM,CPU,存储),它是可以接受的运行 一切都在一个盒子里。
但是,如果您计划每天接受数以万计的连接,最好将责任分开以获得最佳的可伸缩性。它不仅使您的应用程序更加高效和响应迅速,而且在您需要进一步扩展(数据库集群、近线内容交付等)时 运行 还会让您的生活更轻松。
TL;DR:如果它足够强大,您可以 运行 单台服务器上的所有内容,但从长远来看 运行 这会让您的生活更加艰难。