【问题标题】:Deployment of django app - Scaling, Static Files, Serversdjango 应用程序的部署 - 缩放、静态文件、服务器
【发布时间】:2020-09-07 07:03:16
【问题描述】:

我正在努力在 Linux 服务器上部署我的 django 应用程序。遇到各种问题,希望有人为我澄清。我搜索了几天,但我找到的答案要么太宽泛,要么已经脱离主题。

1) 根据django docs,在本地提供静态文件效率低下。这是否意味着包括htmlcssjs 文件在内的所有静态文件都应该托管在另一台服务器上?

2) 我有一个 AWS S3 存储桶来托管我的所有媒体文件,如果上述答案是肯定的,我可以使用同一个存储桶(或创建一个新存储桶)来托管我的静态文件。如果是这样,效率高吗?

3) 根据搜索,django 要想横向扩展,它应该是一个无状态的应用,是不是意味着我还要把我的数据库托管在与我自己的 Linux 服务器不同的位置?

【问题讨论】:

    标签: python django django-deployment


    【解决方案1】:

    1) 将静态文件托管在与 django 应用程序相同的服务器上是完全可以的,但是要提供所述文件,您应该使用 Web 服务器,例如 NGINX 或 Apache。 Django 不是为在生产环境中提供静态数据而设计的。另一方面,Nginx 和 Apache 在这方面做得很好。

    2) 您绝对可以将静态和媒体文件托管在 S3 存储桶中。这比将它们托管在单个服务器上要好得多,因为它们是由单独的实体提供的,这意味着无论您在负载均衡器后面运行多少应用程序服务器,它们都将从同一个服务器请求静态文件资源。为了提高效率,您甚至可以配置 AWS 的 CloudFront,即 Amazon 的 CDN(内容分发网络)。

    3) 理想情况下,您的数据库应该托管在单独的服务器上。数据库占用大量资源,因此将数据库托管在与应用程序相同的服务器上可能会导致速度减慢,有时甚至会彻底崩溃。横向扩展,您会将许多应用程序服务器连接到单个数据库实例;有效地增加了该服务器上的负载。

    以上所有要点都与您的用例和资源有关。如果您正在运行的应用程序不处理繁重的流量 - 比如每天几百次点击 - 并且您的服务器有足够的资源(RAM、CPU、存储),那么在一个盒子上运行所有东西是可以接受的。

    但是,如果您计划每天接受数以万计的连接,最好将职责分开以实现最佳可扩展性。从长远来看,它不仅使您的应用程序更加高效和响应迅速,而且当您需要进一步扩展(数据库集群、近线内容交付等)时,它还能让您的生活更轻松。

    TL;DR:如果一台服务器足够强大,您可以在一台服务器上运行所有内容,但从长远来看,这会让您的生活更加艰难。

    【讨论】:

    • 您好,感谢您的回复,我应该在哪里托管我的数据库(与我的应用程序分开)?在另一台linux机器上?还是别的什么?
    • 是的,理想情况下,您应该将其托管在单独的服务器(裸机或虚拟机)上。您可以查看 GCE 或 AWS 提供的 db 托管服务,但是由于它们提供的维护优势,它们通常会加价。
    • 如果它可以运行 linux 就可以了。地狱,你甚至可以将它安装在树莓派上,但我不建议在生产中这样做。特别是对于数据库服务器! :) 请记住,如果您获得更多流量,您最终将不得不升级,因为数据库资源最终将成为瓶颈。
    猜你喜欢
    • 1970-01-01
    • 2016-04-06
    • 2018-07-10
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    相关资源
    最近更新 更多