5

目前我有 3 台 linode 服务器:

1:缓存服务器(Ubuntu,清漆)

2:应用服务器(Ubuntu、nginx、rabbitmq-server、python、php5-fpm、memcached)

3:数据库服务器(Ubuntu,postgresql + pg_bouncer)

在我的应用服务器上,我有多个站点(顶级域)。每个站点都位于使用 virtualenvwrapper 创建的虚拟环境中。有些网站很大,流量很大,有些网站很小,流量很小。

一个典型的站点由 python (django)、celery (beat、flower) 和 gunicorn 组成。

我目前的开发模式现在是在应用服务器上的暂存环境中工作,并将更改提交到 git。然后将环境更改为生产环境并执行 a git pull,然后 a./manage.py migrate并重新启动进程执行sudo supervisorctl restart sitename:,但这需要时间!一定有更简单的方法!

因此,docker 似乎可以帮助简化一切,但我无法决定如何管理每个站点内的所有站点和容器的最佳方法。

我查看了http://panamax.iohttps://github.com/progrium/dokku,但不确定其中一个是否符合我的需求。

理想情况下,我会在本地机器上运行每个站点的开发版本(模拟缓存服务器、应用服务器和数据库服务器),在那里进行代码更改并测试它们。当我看到更改生效时,我会执行一个命令来完成所有繁重的工作并将更改发送到 linode 服务器(我认为主要是应用服务器),执行所有迁移并在服务器上重新启动项目.

谁能指出我正确的方向来实现这一目标?

4

1 回答 1

4

我遇到了同样的问题。我并不认为这是最好的答案,并且有兴趣看看其他人提出了什么。

Docker 上似乎还没有任何真正的交钥匙解决方案。

令人沮丧的是,大多数 'Django+Docker' 教程只关注单个 Django 站点,因此它们将 Web 服务器和所有内容捆绑在同一个 Docker 容器中。我认为如果您在服务器上有多个站点,您希望它们共享一个网络服务器,但这很快就会比教程中介绍的更复杂,这不再有太大帮助。

我想出的大致是这样的:

  • 使用Fig来管理容器和复杂的 Docker 配置,这些配置总是作为命令行选项输入很乏味
  • 站点是 Django,在 uWSGI+Nginx 上(没有理由你不能拥有其他站点)
  • 我每个站点都有一个 git repo,还有一个用于“服务器”的 git repo
  • db、nginx 和每个站点的单独容器
  • 每个站点容器都有自己的 uWSGI 实例...我进行了一些配置切换,因此我可以调出一个带有 uWSGI 作为独立 Web 服务器的“开发”容器,或者一个将 uWSGI 套接字暴露给主服务器的“实时”容器Nginx 容器,然后接管作为前端 Web 服务器。
  • 我还不确定“开发”uWSGI 服务器有多有用,我可能会切换到只运行 Django 开发服务器并将我的本地代码目录作为容器中的一个卷共享,这样我就可以编辑并实时重新加载。
  • 在“服务器”存储库中,我拥有所有共享的 Dockerfile,用于 Nginx 服务器、基本 uWSGI 应用程序等。
  • 在“服务器”存储库中,我完成了Fabric任务来进行部署(服务器上的结帐服务器和站点存储库、构建 docker 映像、运行fig up等)。

说到部署,坦率地说,我不太热衷于 Docker Registry 的想法。这似乎意味着您每次要部署新的容器版本时都必须将数百兆字节的图像文件上传到注册表服务器。如果您当时处于有限的带宽连接上,这很糟糕,而且看起来效率很低。

这就是为什么到目前为止我决定通过 Git 部署新代码并在服务器上构建新图像。我根本不使用 Docker Registry(除了用于基本 Ubuntu 映像的公共注册表)。这似乎有点违背 Docker 实践的原则,所以我很好奇反馈。

我强烈建议您先陷入困境并构建自己的解决方案。如果您必须花时间学习像 Dokku、Panamax 等可能对您有用也可能不适用的解决方案(我认为它们中的任何一个都还没有真正准备好),您不妨花时间直接学习 Docker ......然后将更容易进一步评估解决方案。

我试图在搜索的早期继续使用 Dokku,但不得不放弃,因为它与boot2docker不兼容……这意味着在 OS X 上,你面临着设置自己的 VirtualBox vm 来运行 Docker 的“乐趣”守护进程。当我不确定我是否想在一天结束时被 Dokku 的工作方式所困扰时,这似乎不值得麻烦。

于 2015-02-04T13:16:34.150 回答