django - 使用具有多个站点的 docker 进行开发和生产

标签 django docker linode dokku

目前我有 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。然后将环境更改为生产环境并执行 git pull , 和 ./manage.py migrate并重新开始执行 sudo supervisorctl restart sitename: 的过程,但这需要时间!一定有更简单的方法!

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

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

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

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

最佳答案

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

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

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

我想出的大致是这样的:

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

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

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

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

    我试图在搜索的早期继续使用 Dokku,但不得不放弃,因为 it's not compatibleboot2docker ...这意味着在 OS X 上,您将面临设置自己的 VirtualBox 虚拟机来运行 Docker 守护进程的“乐趣”。当我不确定我是否想在一天结束时坚持 Dokku 的工作方式时,似乎不值得为此麻烦。

    关于django - 使用具有多个站点的 docker 进行开发和生产,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28321915/

    相关文章:

    python - 如何在本地和真实的 Linode 服务器(或类似服务器)上使用 virtualenv 设置 Python?

    html - 突出显示具有相同内容的行 django 模板

    maven - 在构建阶段将 .m2 文件绑定(bind)到 docker

    java - Docker maven 插件 ClientProtocolException(Windows 10 使用 Docker Toolbox)

    docker - 是否有真正的配置作为 jupyter notebook/labs 的代码?

    mysql - 由于配置错误,MYSQL数据库频繁崩溃

    django - 用于 Django session 存储的 Redis 应该放在单独的服务器上吗?

    python - Travis CI 与 mysql 和 django 返回 (1045, "Access denied for user ' root' @'localhost' (使用密码 : YES)")

    python - future 不可知论的南方数据迁移

    django - 如何使用 Django、Nginx、Gunicorn、Postgres 设置 VPS,然后正确地向其部署 Django 应用程序?