【问题标题】:Good tool for automatic setup and deployment of Django projects用于自动设置和部署 Django 项目的好工具
【发布时间】:2011-07-26 00:21:43
【问题描述】:

2021 年更新

今天我使用 Ansible 来完成这个和其他 devops 任务。在此过程中,我尝试过使用 Chef、Puppet、Saltstack 和 Docker 镜像,但我发现,作为一名在较小项目中工作的独立开发人员,像 Ansible 这样的轻量级工具非常适合。

原始问题(从 2011 年开始)

我刚开始是一名独立的 Web 开发人员,最近我通过提供一个相当简单的报价吓跑了一位客户 网站比他们预期的要高很多。基本上是 他们可以在托管解决方案中自己完成的宣传册软件 像 Wordpress.com 或 Google 网站。除了一个关键功能外, 让我觉得 Django 会很合适,还有一些合适的网络 可以促进发展。

查看我在粗略估计中列出的任务时,它很漂亮 对我来说很明显,那里的大部分时间都不是 特定于该客户网站。这让我想到我应该 有一个脚本来自动化设置和部署新的过程 Django 项目。

仍然需要手动完成一些事情,例如:

  • 设置一个新的 VPS(或者在大多数情况下,只需在现有 VPS 上使用虚拟主机)。

  • 编辑 DNS 设置以指向 clientsdomain.com 和 test.clientsdomain.com 到新的 VPS。

  • 设置 SSH 密钥

  • 编辑配置文件。

然后脚本会执行以下操作:

  • 在新的VPS上安装一些需要的包

  • 在新的 VPS 上安装默认的 iptables 防火墙

  • 为clientsdomain.com和test.clientsdomain.com添加nginx/apache配置

  • 为在 VPS 上的生产和测试以及在我的本地机器上的开发设置新的数据库。

  • 创建一个新的 Django 项目并将其放在 Bitbucket 上。

  • 为生产、测试​​和开发设置 settings.py 和 local_settings.py

  • 为生产数据库和上传的文件目录设置异地备份例程。

  • 启用一些默认应用:flatpages、admin

  • 添加一些样板模板、几个样板平面页面和一个导航栏。

  • 添加 960.gs CSS 框架

  • 添加 jQuery

  • 为搜索设置 djapian 或 Haystack(包括用于自动更新的 cron 作业)。

  • 设置新的 Google 分析配置文件。

  • 包括在生产、测试​​和开发之间复制数据库的可能性

  • 设置 Pingdom 监控

我过去曾使用RakeFabric 来处理一些类似(但不那么雄心勃勃)的东西,我认为 Fabric 可能也非常适合这项任务,但我仍然会喜欢你的输入。还有其他我应该研究的工具吗?我听说不错 关于Puppet 的事情,但仅查看他们的网站(其中包含 Enterprise 一词)就让我觉得这对于单人操作来说可能是矫枉过正。

【问题讨论】:

    标签: django deployment installation fabric puppet


    【解决方案1】:

    对于小型项目而言,Puppet 可能看起来令人生畏和矫枉过正,因为它经常用于大型部署,但我用它来管理 standalone mode 中的一台机器,而无需设置客户端服务器,这样我就不必处理 SSL证书和多台机器,这让事情变得更简单,但仍然给我带来了好处,即我可以进行非常快速的灾难恢复或移动我的主机而无需付出很多努力。有一些great reasons(幂等性、跨平台支持、完整生命周期管理、抽象、简洁的 DSL)用于在系统上使用现代配置管理系统,这些系统本质上是在循环中执行 ssh 或依赖于锁定您的平台的脚本。

    查看learning puppet 以快速了解包括示例和虚拟机操场在内的快速入门。您可以使用独立运行的简单 Puppet 脚本(清单)完成真正有用的事情,然后在需要时开始学习所有高级功能。

    另一件好事是许多 Puppet 清单和模块已经由其他人编写,它们在 Puppet Forge 和许多其他 advanced Puppet users 上共享。

    【讨论】:

    • 喜欢 puppet,但据我所知,Puppet Forge 只提供 提供模块,而不提供清单,这很不幸。
    • 清单通常只需要正确的模块并传入一些配置,并且通常特定于您的设置,而模块旨在重复使用,而不是特定于您的设置。模块的 README 应该详细说明如何从清单中使用它。您更有可能在 gist (gist.github.com/rcrowley/701221) 中找到示例清单,但就像您在 gist 中找到的任何代码一样,如果您可以将其放在可重用的地方(如模块)并在那里调用它,您会更好从长远来看,为了可维护性而关闭。
    【解决方案2】:

    我们目前使用fabric+buildout。其他人说 Chef 或 Puppet 更适合(如果您想做服务器级的事情,可能不仅仅是应用级)。

    对于 Django,还有一些专门的托管程序可以减轻您的负担,我特别喜欢 http://ep.io,我们用它来为 django-cms 的演示的全自动部署提供动力,所以也许您应该研究一下这些托管服务提供商也是如此,而不是将自己限制在对您来说开销更大的 VPS。

    【讨论】:

    • 好吧,我想可能值得研究一下 Puppet 或 Chef。
    • 我有点喜欢 VPS 路由提供的灵活性和低锁定风险。我宁愿不围绕任何一个托管服务提供商构建我的部署基础架构。不过我尝试了 Webfaction,它非常顺利,除了他们的服务器(在德克萨斯州)和我的用户(在瑞典)之间的高延迟。
    • @olvvio,完全理解这一点,但我发现很高兴知道我不必担心我的服务器并且知道他们在做什么的人正在处理它。让我有更多的时间来思考我的应用程序而不是我的服务器。
    【解决方案3】:

    最近,作为处于类似职位的人,我一直在考虑很多此类问题。

    通过设置一些可以从 git 为每个新项目提取的良好骨架代码,可以帮助您提到很多内容。

    看看这个作为通用 django 项目骨架代码的良好起点

    http://blog.zacharyvoase.com/2010/02/03/django-project-conventions/

    我将类似的东西放在一起,让我可以快速启动和运行,但也可以将服务器内容与项目内容分开。这非常重要,因为它允许您在不包括系统/服务器文件的情况下对每个项目进行版本控制。 It's here(仍在进行中)。这需要处理文件夹布局、额外的 css、样板 html 内容、grid/960 内容、jquery、开发与生产设置、数据库设置(主要是)、默认安装的应用程序等。这里是 the layout explained

    使用VirtualenvVirtualenvwrapperpip 允许您设置独立的、封装的python 环境,非常适合在一个VPS 上运行多个项目。 Pip 允许您将包安装到特定的 virualenv 并且还可以将所有包输出到可以稍后导入的文本文件。这使得将代码从开发重新部署到生产非常快速。它还允许您在框架代码中编写一个通用需求文件,该文件会自动安装所有普通 django 应用程序,即 django-tagging 等。

    在数据库方面,我已经不再尝试在不同的机器上拥有开发数据库和生产数据库,导入/导出夹具太难了。现在我在 VPS 上有单独的生产和开发数据库,​​并在开发时远程(通过 ssh)连接到开发数据库。您可以轻松地将一个复制到另一个,这也很好。

    当一切准备就绪后,您可以使用结构从开发部署到生产(我还没有陷入这个问题,所以我不确定它的易用性)

    我很想听听其他人对此的看法,因为我正要发布类似的东西!

    【讨论】:

    • 您已经将 virtualenv 文件与项目混合在一起,而不是在 ~/.virtualenvs 中。这样做的理由是什么?
    • 不确定我是否理解? project_root 是包含应用程序的内容(以及在 VCS 下提交的内容)。项目根目录中的所有内容都处理 virtualenv 等,但未提交给 VC。
    【解决方案4】:

    查看 Silk Deployment,它基于 Fabric,用于部署 Django(或任何 WSGI)+ Nginx + Gunicorn:

    http://pypi.python.org/pypi/silk-deployment/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 2019-05-31
      • 1970-01-01
      相关资源
      最近更新 更多