你好,我的 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
这个设置对我有用:
- 从 Plesk 创建子域名(例如 gitlab.mydomain.com)
- 在“托管设置”中选择您的 Let's Encrypt 证书,并确保在 HTTPS 上设置永久 301 重定向(只需勾选复选框)
- 启动 Docker 容器时,公开端口 80(例如 80:10080)
- 在“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 主题的更多信息。