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

标签 docker gitlab-ci devops

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

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

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

计划是将配置(例如 secret_key )存储在 .production.env 中(和 .staging.env )并使用 docker run --env-file ./env.list 将其传递给应用程序

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

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

最佳答案

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

build :

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

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

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

    关于docker - 使用 Docker 在我的 VPS 上部署我的应用程序的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56686276/

    相关文章:

    docker - Traefik v2 不使用路径进行路由,而是使用 ip

    shell - ldconfig 返回非零代码 : 1

    angular - 调用了如何解决 "Function calls are not supported in decorators but ' StoreModule'。”

    docker - 将 Gitlab Secrets 传递给 CI 中的 docker build

    curl - 如何在 gitlab-ci 中使用变量在松弛 channel 中发送通知

    continuous-integration - 从应用程序的角度来看持续集成、持续交付、持续部署

    docker - 在 docker 中运行的实时调试节点应用程序

    docker - jenkins 安装插件失败 - docker image

    microservices - 开发人员是否应该能够在他们的开发环境中从 lerna monorepo 创建一个 docker 工件?

    docker - 如何在不同的机器上托管 Docker 守护进程和 Docker 客户端