我在 Docker 容器中通过 Synology NAS (DSM 5.2) 上的官方 GitLab 包安装了 GitLab。
我现在喜欢通过 https 而不是 http 访问 Web 界面。我在几篇文章中看到可以使用一些 docker 魔术,但没有找到任何详细说明。
谁能解释一下如何实现这一目标?
遗憾的是,这不是默认设置。
使用 DSM6,现在可以使用 dsm docker 界面进行更改(证书生成除外):
1)创建密钥/证书:
mkdir /volume1/docker/gitlab/certs
cd /volume1/docker/gitlab/certs
openssl genrsa -out gitlab.key 2048
openssl req -new -key gitlab.key -out gitlab.csr
openssl x509 -req -days 3650 -in gitlab.csr -signkey gitlab.key -out gitlab.crt
openssl dhparam -out dhparam.pem 2048
chmod 400 gitlab.key
2)搭建gitlab docker环境:
在 DSM 6.2.1 上
我刚刚安装了这个,这里的一些答案帮助了我,但我仍然遇到了问题。所以我想分享我的发现:
我想使用我已经在 Synology DSM 中生成的 Lets-encrypt 证书。
创建任务调度器(用户定义脚本)
cp /usr/syno/etc/certificate/system/default/privkey.pem /volume1/docker/gitlab-ce/gitlab/certs/gitlab.key
cp /usr/syno/etc/certificate/system/default/fullchain.pem /volume1/docker/gitlab-ce/gitlab/certs/gitlab.crt
安装 gitlab 时调整为您选择的名称/文件夹(在我的情况下为“gitlab-ce”)
在任何打开 ssl 的机器上创建一个 dhparam.pem 文件
openssl dhparam -out dhparam.pem 2048
我建议不要在 NAS 上执行此操作,因为它会很慢(您可能会增加关键的复杂性,让患者等待)
将 dhparam.pm 复制到 gitlab 内的 certificats 文件夹位置
/volume1/docker/gitlab-ce/gitlab/certs/
安装 gitlab 时调整为您选择的名称/文件夹(在我的情况下为“gitlab-ce”)
在包中心停止 gitlab(停止所有树 docker 容器)
在 synology_gitlab 容器上
5.1 添加两个环境变量
GITLAB_HTTPS=true
SSL_SELF_SIGNED=false
5.2. 将 gitlab 端口绑定(容器端口)从 80 更改为 443
如果 Synology DSM(或您手动)创建新证书,此方法将在设定的时间(您在用户定义的脚本中选择)自动更新您生成的 ssl 证书。然而,这不是即时更新,但您可以从任务调度程序界面手动触发它。对于个人 NAS 解决方案,这种方法仍然是一种无忧无虑的方式。
Crami 通过软件包安装 (sameersbn/gitlab:7.9.3) 为我提供的说明。你必须:
按照 Crami 的命令行说明生成证书:
mkdir /volume1/docker/gitlab/certs
cd /volume1/docker/gitlab/certs
openssl genrsa -out gitlab.key 2048
openssl req -new -key gitlab.key -out gitlab.csr
openssl x509 -req -days 3650 -in gitlab.csr -signkey gitlab.key -out gitlab.crt
openssl dhparam -out dhparam.pem 2048
chmod 400 gitlab.key
编辑配置文件在
/usr/syno/etc/packages/Docker/synology_gitlab.config
. 这是一个 JSON 文件而不是命令行,但很容易看到要更改/添加的内容。您需要添加:
{
"key" : "GITLAB_HTTPS",
"value" : "true"
},
{
"key" : "SSL_SELF_SIGNED",
"value" : "true"
},
以及同一文件中从 80 到 443 的端口绑定:
{
"container_port" : 443,
"host_port" : 30000,
"type" : "tcp"
},
在包中心启动包
我设法在 NAS 上创建了一个新的 docker 容器,所有工作都像我想要的那样工作。
您必须像 gitlab 包的描述中那样创建 ssl 证书,如下所示:
mkdir /volume1/docker/gitlab/certs
cd /volume1/docker/gitlab/certs
openssl genrsa -out gitlab.key 2048
openssl req -new -key gitlab.key -out gitlab.csr
openssl x509 -req -days 3650 -in gitlab.csr -signkey gitlab.key -out gitlab.crt
openssl dhparam -out dhparam.pem 2048
chmod 400 gitlab.key
然后删除并重新创建容器:
docker rm synology_gitlab
docker run --name synology_gitlab -d --link synology_gitlab_redis:redisio \
--publish 30001:22 --publish 30080:80 --publish 30000:443 \
--env "GITLAB_HTTPS=true" --env "SSL_SELF_SIGNED=true" \
--env "GITLAB_HOST=nas.freestone.net" \
--env "GITLAB_PORT=30000" \
--env "GITLAB_SSH_PORT=30001" \
--env "GITLAB_EMAIL=your@example.com" \
--env "DB_TYPE=mysql" \
--env "DB_HOST=172.17.42.1" \
--env "DB_NAME=gitlab" \
--env "DB_USER=gitlab" \
--env "DB_PASS=yourdbpassword" \
--env "SMTP_ENABLED=true" \
--env "SMTP_DOMAIN=mailserver.example.com" \
--env "SMTP_HOST=mailserver.example.com" \
--env "SMTP_PORT=587" \
--env "SMTP_USER=user@example.com" \
--env "SMTP_PASS=mailpassword" \
--env "SMTP_OPENSSL_VERIFY_MODE=none" \
--volume /volume1/docker/gitlab/:/home/git/data \
sameersbn/gitlab:7.9.3
然后你应该重新启动并运行。端口 30000 现在是 https 而不再是 http。
您尚未指明您使用的是哪个 gitlab 映像:
最常见的容器映像已经包含有关如何启用 SSL 的详细说明:
我使用了@helt 解决方案,但查看 docker 信息页面(https://hub.docker.com/r/sameersbn/gitlab/#ssl),我看到 certs 文件夹位于“docker/gitlab/gitlab/certs/ “……
对于@helt 解决方案,我更新了这个:
mkdir /volume1/docker/gitlab/gitlab/certs
cd /volume1/docker/gitlab/gitlab/certs
openssl genrsa -out gitlab.key 2048
openssl req -new -key gitlab.key -out gitlab.csr
openssl x509 -req -days 3650 -in gitlab.csr -signkey gitlab.key -out gitlab.crt
openssl dhparam -out dhparam.pem 2048
chmod 400 gitlab.key
当我只使用“/volume1/docker/gitlab/certs”时,在访问 GitLab 页面时,我有一个带有“PR_END_OF_FILE_ERROR”的错误页面,使用“/volume1/docker/gitlab/gitlab/certs”后,错误消失了一切工作正常...
我的 Synology Station 是运行 DSM 6.2.2-24922 Update 3 的 DS718+。