在 Synology NAS 上使用 Docker 在 GitLab 上启用 SSL

Enable SSL on GitLab with Docker on Synology NAS

我在 Docker 容器中的 Synology NAS (DSM 5.2) 上通过官方 GitLab 软件包安装了 GitLab。

我现在喜欢通过 https 而不仅仅是 http 访问 Web 界面。我在几篇文章中看到可以使用一些 docker 魔法,但是 没有找到详细说明。

任何人都可以解释一下如何实现这一目标吗?

可惜这不是默认的

您还没有说明您使用的是哪个 gitlab 镜像:

最常见的容器映像已经包含有关如何启用 SSL 的详细说明:

我设法在 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。

Crami 为我提供的软件包安装说明 (sameersbn/gitlab:7.9.3)。你必须:

  1. 按照 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
    
  2. 在套件中心停止套件
  3. 编辑配置文件 /usr/syno/etc/packages/Docker/synology_gitlab.config。它是一个 JSON 文件而不是命令行,但很容易看出 change/add 的内容。您需要添加:

    {
       "key" : "GITLAB_HTTPS",
       "value" : "true"
    },
    {
       "key" : "SSL_SELF_SIGNED",
       "value" : "true"
    },
    

    以及同一文件中从 80 到 443 的端口绑定:

    {
       "container_port" : 443,
       "host_port" : 30000,
       "type" : "tcp"
    },
    
  4. 在套件中心启动套件

对于 DSM6,现在可以使用 dsm docker 界面进行更改(证书的生成除外):

1) 创建一个 key/cert:

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环境:

3) 设置 gitlab docker 端口绑定:

DSM 6.2.1

我刚刚安装了这个,这里的一些答案对我有帮助,但我仍然 运行 遇到问题。所以我想分享我的发现:

I wanted to use the lets-encrypt certs i already had generated inside Synology DSM.

  1. 创建任务计划程序(用户定义的脚本)

    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
    

    adjust to your chosen name/folder when installing gitlab (in my case "gitlab-ce")

  2. 在任何打开 ssl 的机器上创建一个 dhparam.pem 文件

    openssl dhparam -out dhparam.pem 2048
    

    I advice not to do this on a NAS, because it will be slow (you may increase key complexity to which ever you have patients for waiting)

  3. 将 dhparam.pm 复制到 gitlab 中的 certificats 文件夹位置

    /volume1/docker/gitlab-ce/gitlab/certs/
    

    adjust to your chosen name/folder when installing gitlab (in my case "gitlab-ce")

  4. 在包中心停止gitlab(停止所有树docker容器)

  5. 在 synology_gitlab 容器上

    5.1 添加两个环境变量

    GITLAB_HTTPS=true  
    SSL_SELF_SIGNED=false
    

    5.2。将 gitlab 端口绑定(容器端口)从 80 更改为 443

如果 Synology DSM(或您手动)创建新证书,此方法将在设定的时间(您在用户定义脚本中的选择)自动更新您生成的 ssl 证书。然而,这不是即时更新,但您可以从任务计划程序界面手动触发它。对于个人 NAS 解决方案,这种方法仍然是免费的。

我使用了@helt 解决方案,但查看 docker 信息页面 (https://hub.docker.com/r/sameersbn/gitlab/#ssl),我发现证书文件夹位于 "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 工作站是 DS718+ 运行 DSM 6.2.2-24922 Update 3.