设置 GitLab CI/CD 以将多个存储库部署到 DigitalOcean Droplet 上的 Docker 容器
Set up GitLab CI/CD for deploying multiple repositories to Docker containers on a DigitalOcean Droplet
我对 Docker 和 DigitalOcean Droplets 的概念很陌生。我创建了一个在 Ubuntu 20.04.
上运行 Docker 19.03.12 的 DigitalOcean Droplet
我目前在 GitLab 上有三个存储库:
- 两个 Node.js 服务器
- 一个 Vue.js 前端
我想完成以下任务:
- 为每个存储库设置一个 CI/CD 管道,将每个应用程序部署到我的 DigitalOcean Droplet 上的 docker 容器。
这是我正在努力解决的问题:
- 每个项目的Docker文件包含什么?
- 我的 GitLab CI 脚本包含什么?
- 由于我的 DigitalOcean Droplet 有一个 public 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 文件。在我的例子中,我需要 dockerize 两个 Node 应用程序和一个 Vue 应用程序。
抱歉缺少信息,这是我能以(有限的)知识提供的最多的背景信息。
有两种可能性,一种是在你的 droplet 上使用三个 docker 容器,它们可以相互通信。听起来这就是您可能会考虑的(基于 “部署每个应用程序的每个存储库” 和 “每个项目的 Dockerfile 包含什么”)
另一种选择是使用一个容器来容纳所有三个存储库,我认为这对您来说可能是更好的解决方案(但两者都有优点)。
好处是后者可能简单一点
想法是三个存储库中的 none 需要一个 docker 文件(无论如何用于部署)
相反,您创建了一个只有 Dockerfile
和 .gitlab-ci.yml
文件的第 4 个存储库。该 docker 文件将拉取其他三个存储库并使它们成为同一图像的一部分,因此它们可以 运行 在您的 Droplet 上作为一个容器。然后,您的其他三个回购协议中的每一个都将与您的第四个回购协议挂钩,这将通知那个回购协议生成图像。
如果您需要访问所有三个应用程序,您可能需要三个单独的端口来 运行。
但是请注意,还需要提供 vue 前端,因此您可以使用其中一台服务器将 vue 应用程序作为平面文件提供服务,并为其托管 api .
我对 Docker 和 DigitalOcean Droplets 的概念很陌生。我创建了一个在 Ubuntu 20.04.
上运行 Docker 19.03.12 的 DigitalOcean Droplet我目前在 GitLab 上有三个存储库:
- 两个 Node.js 服务器
- 一个 Vue.js 前端
我想完成以下任务:
- 为每个存储库设置一个 CI/CD 管道,将每个应用程序部署到我的 DigitalOcean Droplet 上的 docker 容器。
这是我正在努力解决的问题:
- 每个项目的Docker文件包含什么?
- 我的 GitLab CI 脚本包含什么?
- 由于我的 DigitalOcean Droplet 有一个 public 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 文件。在我的例子中,我需要 dockerize 两个 Node 应用程序和一个 Vue 应用程序。
抱歉缺少信息,这是我能以(有限的)知识提供的最多的背景信息。
有两种可能性,一种是在你的 droplet 上使用三个 docker 容器,它们可以相互通信。听起来这就是您可能会考虑的(基于 “部署每个应用程序的每个存储库” 和 “每个项目的 Dockerfile 包含什么”)
另一种选择是使用一个容器来容纳所有三个存储库,我认为这对您来说可能是更好的解决方案(但两者都有优点)。
好处是后者可能简单一点
想法是三个存储库中的 none 需要一个 docker 文件(无论如何用于部署)
相反,您创建了一个只有 Dockerfile
和 .gitlab-ci.yml
文件的第 4 个存储库。该 docker 文件将拉取其他三个存储库并使它们成为同一图像的一部分,因此它们可以 运行 在您的 Droplet 上作为一个容器。然后,您的其他三个回购协议中的每一个都将与您的第四个回购协议挂钩,这将通知那个回购协议生成图像。
如果您需要访问所有三个应用程序,您可能需要三个单独的端口来 运行。
但是请注意,还需要提供 vue 前端,因此您可以使用其中一台服务器将 vue 应用程序作为平面文件提供服务,并为其托管 api .