繁体   English   中英

使用 Docker 在我的 VPS 上部署我的应用程序的最佳实践是什么?

[英]What is the best practice for deploying my application on my VPS using Docker?

我确实有一个(Python Flask)应用程序,我想使用 GitLab CI 和 Docker 将其部署到我的 VPS。

在我的服务器上,我想拥有我的应用程序的生产版本和暂存版本。 它们都需要 MongoDB 连接。

我的计划是在 GitLab 上自动构建应用程序并将其推送到 GitLab 的 Docker Registry。 如果我想将应用程序部署到暂存或生产,我会执行docker pulldocker rmdocker run

该计划是存储的配置(例如secret_key中) .production.env (和.staging.env ),并使用它传递给应用docker run --env-file ./env.list

我已经在我的服务器上安装了 MongoDB,应用程序的两个环境都应使用相同的 MongoDB 实例,但使用不同的数据库名称(在.env配置)。

这是部署我的应用程序的最佳实践吗? 你有什么建议? 谢谢!

这是我在不同组织和项目规模中运行良好的配置:

构建:

  1. 应用程序位于git 存储库(在您的情况下为 GitLab)。 每个应用程序都有自己的 Dockerfile。
  2. 我使用Jenkins进行构建,当然,您可以使用任何其他 CD 工具。 Jenkins 拉取应用程序的存储库,构建 docker 映像并将其发布到私有 Docker 存储库(在我的情况下为Nexus )。

部署:

  1. 我有一个独立于应用程序的中央存储库,其中包含一个 docker-compose 文件(或者可能是多个文件,这些文件为不同环境扩展了一个中央文件)。 该文件包含所有服务定义并引用了我的 Nexus 存储库中的 docker 镜像。
  2. 如果我使用机密,我会将它们存储在 HashiCorp Vault 实例中。 Jenkins 拉取它们,并将它们写入.env文件。 docker-compose 文件可以引用各个环境变量。
  3. Jenkins 拉取 docker-compose repo,在我的情况下通过 scp,将 docker-compose 文件和 .env 文件上传到我的服务器。
  4. 然后它会触发docker-compose up (对于较小的应用程序)或将 docker 堆栈重新部署到 swarm 中(对于较大的应用程序)。
  5. Jenkins 从目标服务器中删除所有内容。

如果你喜欢它,你可以通过 Docker Machine 执行第 3 步。 然而,我觉得它的好处不值得在我的情况下使用。

我可以推荐的一件事是,因为我已经在生产环境中做过多次,所以使用 TLS 加密端点部署 Docker Swarm。 此链接讨论如何通过证书保护群。 这是一些工作,但它允许您做的是为您的应用程序定义服务。

这些服务一旦在线就可以有多个副本,并且每当您更新服务(即部署新映像)时,swarm 都会负责确保一个服务始终在线。

docker service update <service name> --image <new image name>

一些 VPS 服务器实际上有 Kubernetes 即服务(如 Digital Ocean),如果有,那就更可取了。 Gitlab 实际上有一个 autodevops 功能,可以远程管理你的 Kubernetes 集群,但你也可以使用 kubectl 手动部署。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM