在线部署 Django 项目的正确方法是什么?目前,我使用的方法包括 ssh-ing 到服务器、git pull、执行 Django 杂务(迁移、collectstatic 等),然后重新启动 Web 服务器。必须有一种自动化的方式来做到这一点。例如,如果我想部署到 10 台服务器上,我不想手动更新它们!
我似乎找不到任何关于最佳实践的具体内容。我听说过 Fabric,但我认为它与 Python3(我正在使用)不兼容。似乎有很多工具,但我不确定哪些是有信誉的。
任何建议都会有所帮助,谢谢
在线部署 Django 项目的正确方法是什么?目前,我使用的方法包括 ssh-ing 到服务器、git pull、执行 Django 杂务(迁移、collectstatic 等),然后重新启动 Web 服务器。必须有一种自动化的方式来做到这一点。例如,如果我想部署到 10 台服务器上,我不想手动更新它们!
我似乎找不到任何关于最佳实践的具体内容。我听说过 Fabric,但我认为它与 Python3(我正在使用)不兼容。似乎有很多工具,但我不确定哪些是有信誉的。
任何建议都会有所帮助,谢谢
只是为了解决您关于使用 Fabric 部署 Python 3 应用程序的问题:Fabric 通常不会作为项目的一部分安装(例如在 virtualenv 中),因此如果您的系统具有 Python 2,那么您应该能够安装和运行织物。另一方面,如果您的系统只有Python 3,并且没有安装 Python 2 的选项,那么您将无法使用 Fabric。
需要注意的重要一点是 Fabric 与您的项目无关 - 它作为系统工具独立存在。您绝对可以将它安装在 virtualenv 中并将其绑定到您的应用程序代码(即,如果您正在运行 Python 2 应用程序),但您不需要这样做。
至于部署 Django 应用程序的正确方法,这是视情况而定的,需要一些意见,因此我们无法真正为您回答。但我肯定会向您遇到这种情况的人推荐 Fabric,作为自动化您通常为部署执行的现有 shell 任务集的起点。
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 会为您提供许多功能,但会产生大量运营开销。