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

时间:2015-08-03 15:31:48

标签: ssl docker gitlab synology

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

我现在想通过https而不是http访问Web界面。我在几个帖子中看到过可以使用一些docker魔法,但是 没有找到任何详细说明。

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

遗憾的是,这不是违约。

6 个答案:

答案 0 :(得分:10)

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

setting gitlab docker environment vars via DSM gui

3)设置gitlab docker端口绑定: Set port binding for gitlab

答案 1 :(得分:4)

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文件而不是命令行,但很容易看到要更改/添加的内容。你需要添加:

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

    以及在同一文件中从80而不是443的端口绑定:

    {
       "container_port" : 443,
       "host_port" : 30000,
       "type" : "tcp"
    },
    
  4. 在Package Center中启动包

答案 2 :(得分:1)

您尚未指出您正在使用的gitlab图像:

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

在DSM 6.2.1上

我只是安装了此软件,这里的一些答案对我有所帮助,但我仍然遇到问题。所以我想分享我的发现:

  

我想使用Synology DSM中已经生成的let-encrypt证书。

  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
    
      

    在安装gitlab时调整为您选择的名称/文件夹(在我的情况下为“ gitlab-ce”)

  2. 在任何具有打开的ssl的计算机上创建dhparam.pem文件

    openssl dhparam -out dhparam.pem 2048
    
      

    我建议不要在NAS上执行此操作,因为它会很慢(您可能会增加关键的复杂性,直到有病人等待时为止)

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

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

    在安装gitlab时调整为您选择的名称/文件夹(在我的情况下为“ 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解决方案来说,这种方法仍然是免维护的。

答案 5 :(得分:1)

我使用@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页面时,使用“ / volume1 / docker / gitlab / gitlab / certs”后出现错误页面“ PR_END_OF_FILE_ERROR”,错误消失了,一切都很好...

我的Synology工作站是运行DSM 6.2.2-24922 Update 3的DS718 +。