使用 Plesk 和 LetsEncrypt 配置 GitLab Docker 容器

使用 Plesk 和 LetsEncrypt 配置 GitLab Docker 容器

你好,我的 GitLab 设置有问题。

我想要实现的目标:

  • 在 Docker 容器内运行 GitLab
  • 通过子域名(gitlab.mydomain.com)的 80 和 443 端口访问 GitLab(https)
  • 通过 LetsEncrypt 和 Plesk 提供的 *.mydomain.com 通配符证书管理 SSL(已用于 Plesk 管理的子域名)
  • 能够在 GitLab 容器(npm 脚本等)中运行构建任务,并最终将特定的输出文件移动到 Plesk 管理的子域目录(容器外部)

我目前所做的:

  • 有一个运行 Ubuntu 18.04.2 的 v-server,其中预装了 Plesk Onyx 17.8.11
  • 通过 Plesk 设置 mydomain.com
  • 通过 Plesk 为 mydomain.com 设置 LetsEncrypt 通配符证书
  • 通过 ssh 安装 Docker(不是 Plesk)
  • 在 mydomain.com:30080 的容器内运行 GitLab

我对服务器环境和 Docker 完全陌生,所以我不确定所需的结构。也许你们知道该怎么做?

谢谢!

答案1

这个设置对我有用:

  1. 从 Plesk 创建子域名(例如 gitlab.mydomain.com)
  2. 在“托管设置”中选择您的 Let's Encrypt 证书,并确保在 HTTPS 上设置永久 301 重定向(只需勾选复选框)
  3. 启动 Docker 容器时,公开端口 80(例如 80:10080)
  4. 在“Apache 和 nginx 设置”中添加以下内容:
location / {
    proxy_pass http://localhost:10080;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
}

这将通过 HTTPS 和 Let's Encrypt 证书为您的子域提供服务,同时将请求代理到容器的 80 端口,因此您不必担心从容器外部将证书传递给 GitLab。

据我所知,这是安全的,因为未加密的流量被限制在服务器中(如果您的 Docker 守护程序与 Plesk 位于同一台服务器上)并且无法从外部访问。

--

对于你的最后一点

能够在 GitLab 容器(npm 脚本等)中运行构建任务,并最终将特定的输出文件移动到 Plesk 管理的子域目录(容器外部)

这本身就是一个问题。

要运行构建,您需要安装 GitLab Runner。GitLab 文档建议将其安装在其他主机上,但您可以尝试使用他们的Docker 映像在同一主机上。

要构建和部署应用程序,请参阅 GitLab Runner文档。您将需要为所谓的“持续部署”设置“管道”。

要为每个应用程序创建子域,您可以:

  • 从 Plesk 手动创建子域,并使用脚本部署文件作为“管道”构建的最后一步
  • 使用一些脚本和 Plesk API 自动创建子域
  • 忽略 Plesk 并完全使用 Docker;使用反向代理来处理所有子域和 Let's Encrypt 证书,例如特拉菲克

这些只是指针,我建议您搜索并阅读有关 CI/CD 主题的更多信息。

相关内容