【问题标题】:Django deployment methoddjango部署方法
【发布时间】:2017-04-11 00:13:23
【问题描述】:

在线部署 Django 项目的正确方法是什么?目前,我使用的方法包括 ssh-ing 到服务器、git pull、执行 Django 杂务(迁移、collectstatic 等),然后重新启动 Web 服务器。必须有一种自动化的方式来做到这一点。例如。如果我想部署到 10 台服务器上,我不想手动更新它们!

我似乎找不到任何关于最佳实践的具体内容。我听说过 Fabric,但我认为它与 Python3(我正在使用)不兼容。似乎有很多工具,但我不确定哪些是有信誉的。

任何建议都会有所帮助,谢谢

【问题讨论】:

    标签: django django-deployment


    【解决方案1】:

    只是为了解决您关于使用 Fabric 部署 Python 3 应用程序的问题:Fabric 通常不会作为项目的一部分安装(例如在 virtualenv 中),因此如果您的系统具有 Python 2,那么您应该能够安装并运行 Fabric。另一方面,如果您的系统只有有 Python 3,并且没有安装 Python 2 的选项,那么您将无法使用 Fabric。

    需要注意的重要一点是 Fabric 与您的项目无关 - 它作为系统工具独立存在。您绝对可以将它安装在 virtualenv 中并将其绑定到您的应用程序代码(即,如果您正在运行 Python 2 应用程序),但您不需要这样做。

    至于部署 Django 应用程序的正确方法,这是根据情况而定的,需要一些意见,因此我们无法真正为您解答。但我肯定会向您遇到这种情况的人推荐 Fabric,作为自动化您通常为部署执行的现有 shell 任务集的起点。

    【讨论】:

    【解决方案2】:

    Fabric 可能与 Python3 不兼容,但即使您的主项目是 Python3,在 Fabric 中编写部署脚本也不会对您造成太大伤害。

    您在这里确实面临 3 个不同的问题... 1. 打包您的代码,2. 编排您的部署,以及 3. 管理您的服务器。

    在问题 1 中,git 是 Python 的常见选择。您的其他选择是构建操作系统级别的包(如 apt)或构建 Docker 映像。

    对于问题 2,Fabric 实际上是实际部署的不错选择。程序部分(运行迁移、构建新的虚拟环境等)在 Python 中非常容易编码。可以在此处使用其他配置管理工具,例如 Ansible 或 Chef。

    问题 3 是 Ansible 或 Chef 等工具真正发挥作用的地方(如果您使用其中之一,则使用相同的工具执行第 2 步通常是有意义的)。

    我目前最喜欢的方法是构建 Docker 容器。对于小型(单服务器)部署,我只需编写一个与 Docker-machine 结合的 Makefile。对于多服务器,ECS 很容易上手(如果您在 AWS 上)来管理您的配置和部署。如果您不在 AWS 上,kubernetes 可以为您提供许多功能,但会产生大量运营开销。

    【讨论】:

    • 谢谢。我选择了 Fabric,因为我的项目很小并且有截止日期。刚刚写了一个 fabfile.py,它非常适合部署。当我有更多时间时,我想尝试使用 Docker,我一直在听说那个!
    猜你喜欢
    • 2010-09-23
    • 2018-11-13
    • 2020-07-11
    • 2012-08-27
    • 2021-07-02
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    相关资源
    最近更新 更多