设置 GitLab CI/CD 以将多个存储库部署到 DigitalOcean Droplet 上的 Docker 容器

Posted

技术标签:

【中文标题】设置 GitLab CI/CD 以将多个存储库部署到 DigitalOcean Droplet 上的 Docker 容器【英文标题】:Set up GitLab CI/CD for deploying multiple repositories to Docker containers on a DigitalOcean Droplet 【发布时间】:2021-08-26 20:59:13 【问题描述】:

我对 Docker 和 DigitalOcean Droplets 的概念非常陌生。我创建了一个在 Ubuntu 20.04 上运行 Docker 19.03.12 的 DigitalOcean Droplet。

我目前在 GitLab 上有三个存储库:

两个 Node.js 服务器 一个 Vue.js 前端

我想完成以下工作:

为每个存储库设置 CI/CD 管道,将每个应用程序部署到我的 DigitalOcean Droplet 上的 docker 容器中。

这就是我正在努力解决的问题:

每个项目的 Dockerfile 包含什么? 我的 GitLab CI 脚本包含什么? 由于我的 DigitalOcean Droplet 有一个公共 IP 地址,我如何将三个单独的应用程序部署到该 IP 地址并仍然能够访问它们?通过将它们部署到不同的端口号?

我已尝试按照https://www.digitalocean.com/community/tutorials/how-to-set-up-a-continuous-deployment-pipeline-with-gitlab-ci-cd-on-ubuntu-18-04 的教程进行操作,但它并不完全符合我的要求,因为它仅适用于一个应用程序。本教程还关注一个静态 html 文件。就我而言,我需要将两个 Node 应用程序和一个 Vue 应用程序 docker 化。

抱歉,信息不足,这是我能够以我的(有限)知识提供的最多上下文。

【问题讨论】:

【参考方案1】:

有两种可能性,一种是在您的 Droplet 上使用三个 docker 容器,它们可以相互通信。听上去你可能会考虑(基于“部署每个应用程序的每个存储库”“每个项目的 Dockerfile 包含什么”

另一种选择是拥有一个包含所有三个 repos 的容器,我认为这对你来说可能是一个更好的解决方案(但两者都有优点)。

好处是后者可能会简单一些。

这个想法是这三个 repos 都不需要 dockerfile(无论如何都用于部署)

相反,您创建了一个只有 Dockerfile.gitlab-ci.yml 文件的第四个 repo。该 dockerfile 将拉取其他三个 repos 并使它们成为同一映像的一部分,因此它们可以作为一个容器在您的 droplet 上运行。然后,您的其他三个 repo 中的每一个都将与您的第 4 个 repo 挂钩,这将通知那个 repo 生成图像。

如果您需要访问所有三个应用程序,您可能需要三个单独的端口来运行。

但请注意,vue 前端也需要提供服务,因此您可以使用其中一台服务器将 vue 应用程序作为平面文件提供服务,并为其托管 api。

【讨论】:

以上是关于设置 GitLab CI/CD 以将多个存储库部署到 DigitalOcean Droplet 上的 Docker 容器的主要内容,如果未能解决你的问题,请参考以下文章

我应该将我的 Nuxt 应用程序直接部署到 Google App Engine 还是应该在我的代码存在于存储库中的地方使用 Gitlab CI/CD?

如何使用 gitlab-ci 作业推送到 gitlab 存储库?

gitlab 添加 CI CD

为我的 GitLab-Server 上的每个存储库激活 CI/CD 管道

在哪里指定 GitLab ci/cd 管道的存储库凭据?

使用 GitLab CI/CD 等 GitHub 操作