配置在 Docker 容器中运行的极狐GitLab
Tier: 基础版,专业版,旗舰版
Offering: 私有化部署
此容器使用官方 Linux 软件包,因此您可以使用唯一的配置文件 /etc/gitlab/gitlab.rb 来配置实例。
编辑配置文件
要访问极狐GitLab 配置文件,您可以在运行中容器的上下文中启动一个 shell 会话。
-
启动会话:
shellsudo docker exec -it gitlab /bin/bash或者,您也可以直接在编辑器中打开 /etc/gitlab/gitlab.rb:
shellsudo docker exec -it gitlab editor /etc/gitlab/gitlab.rb -
在您偏好的文本编辑器中,打开 /etc/gitlab/gitlab.rb 并更新以下字段:
-
保存文件并重启容器以重新配置极狐GitLab:
shellsudo docker restart gitlab
每次容器启动时,极狐GitLab 都会重新配置自身。有关极狐GitLab 中的更多配置选项,请参阅配置文档。
自定义用户和群组 ID
默认情况下,Docker 安装会忽略 gitlab.rb中的 uid 和 gid 设置,例如 user['uid'] 或 postgresql['gid']。Docker 镜像在构建时以固定 ID 创建其服务用户和群组,并且 gitlab-ctl reconfigure 不会更改它们。有关镜像使用的 ID,请参阅 Docker 设置脚本。
如果您需要自定义服务 UID 或 GID,请使用 Linux 软件包安装,并按照说明指定数字用户和群组标识符。
预配置 Docker 容器
您可以通过在 Docker 运行命令中添加环境变量 GITLAB_OMNIBUS_CONFIG 来预配置极狐GitLab Docker 镜像。此变量可以包含任何 gitlab.rb 设置,并会在加载容器的 gitlab.rb 文件之前进行求值。此行为允许您从 Linux 软件包模板配置外部极狐GitLab URL、 数据库配置或任何其他选项。GITLAB_OMNIBUS_CONFIG中包含的设置不会写入 gitlab.rb 配置文件,而是在加载时求值。要提供多个设置,请使用分号(;)分隔它们。
以下示例设置外部 URL、启用 LFS,并使用 Prometheus 所需的最小 shm 大小启动容器:
shell1sudo docker run --detach \ 2 --hostname gitlab.example.com \ 3 --env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com'; gitlab_rails['lfs_enabled'] = true;" \ 4 --publish 443:443 --publish 80:80 --publish 22:22 \ 5 --name gitlab \ 6 --restart always \ 7 --volume $GITLAB_HOME/config:/etc/gitlab \ 8 --volume $GITLAB_HOME/logs:/var/log/gitlab \ 9 --volume $GITLAB_HOME/data:/var/opt/gitlab \ 10 --shm-size 256m \ 11 registry.gitlab.cn/omnibus/gitlab-jh:<version>-jh.0
每次执行 docker run 命令时,您都需要提供 GITLAB_OMNIBUS_CONFIG 选项。GITLAB_OMNIBUS_CONFIG的内容不会在后续运行之间保留。
在公网 IP 地址上运行极狐GitLab
您可以通过修改 --publish 标志,让 Docker 使用您的 IP 地址并将所有流量转发到 极狐GitLab 容器。
要在 IP 198.51.100.1 上公开极狐GitLab:
shell1sudo docker run --detach \ 2 --hostname gitlab.example.com \ 3 --env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com'" \ 4 --publish 198.51.100.1:443:443 \ 5 --publish 198.51.100.1:80:80 \ 6 --publish 198.51.100.1:22:22 \ 7 --name gitlab \ 8 --restart always \ 9 --volume $GITLAB_HOME/config:/etc/gitlab \ 10 --volume $GITLAB_HOME/logs:/var/log/gitlab \ 11 --volume $GITLAB_HOME/data:/var/opt/gitlab \ 12 --shm-size 256m \ 13 registry.gitlab.cn/omnibus/gitlab-jh:<version>-jh.0
然后,您可以通过 http://198.51.100.1/ 和 https://198.51.100.1/ 访问您的极狐GitLab 实例。
在不同端口上公开极狐GitLab
极狐GitLab 在容器内占用特定端口。
如果您想使用与默认端口 80(HTTP)、443(HTTPS)或 22(SSH)不同的主机端口,您需要在 docker run 命令中添加单独的 --publish 指令。
例如,要在主机的端口 8929 上公开 Web 界面,并在端口 2424 上公开 SSH 服务:
-
使用以下 docker run 命令:
shell1sudo docker run --detach \ 2 --hostname gitlab.example.com \ 3 --env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com:8929'; gitlab_rails['gitlab_shell_ssh_port'] = 2424" \ 4 --publish 8929:8929 --publish 2424:22 \ 5 --name gitlab \ 6 --restart always \ 7 --volume $GITLAB_HOME/config:/etc/gitlab \ 8 --volume $GITLAB_HOME/logs:/var/log/gitlab \ 9 --volume $GITLAB_HOME/data:/var/opt/gitlab \ 10 --shm-size 256m \ 11 registry.gitlab.cn/omnibus/gitlab-jh:<version>-jh.0发布端口的格式为hostPort:containerPort。有关 公开传入端口的更多信息,请参阅 Docker 文档。
-
进入运行中的容器:
shellsudo docker exec -it gitlab /bin/bash -
使用您的编辑器打开 /etc/gitlab/gitlab.rb 并设置 external_url:
ruby1# For HTTP 2external_url "http://gitlab.example.com:8929" 3 4or 5 6# For HTTPS (notice the https) 7external_url "https://gitlab.example.com:8929"此 URL 中指定的端口必须与 Docker 发布到主机的端口匹配。 此外,如果未在 nginx['listen_port']中显式设置 NGINX 监听端口, 则会改用 external_url。 更多信息,请参阅 NGINX 文档。
-
设置 SSH 端口:
rubygitlab_rails['gitlab_shell_ssh_port'] = 2424 -
最后,重新配置极狐GitLab:
shellgitlab-ctl reconfigure
按照前面的示例,您的 Web 浏览器可以通过 <hostIP>:8929 访问您的极狐GitLab 实例,并通过端口 2424 进行 SSH 推送。
您可以在 Docker compose 部分查看使用不同端口的 docker-compose.yml 示例。
自定义 SSH 服务器配置
极狐GitLab Docker 镜像使用配置文件 /assets/sshd_config 运行 OpenSSH。 此文件是镜像的一部分,因此当您重新创建容器时,对它的更改不会保留。
要自定义 SSH 服务器,例如限制允许的算法或添加主机证书,请将配置文件添加到配置卷的 sshd_config.d 目录中。镜像会包含 /etc/gitlab/sshd_config.d/中的每个 *.conf 文件。
如果该目录不存在或为空,SSH 服务器将使用默认配置。
对于大多数设置,SSH 服务器使用它找到的第一个值,并且 drop-in 文件会在 /assets/sshd_config中的默认值之前读取。因此,drop-in 文件可以覆盖 保护容器安全的设置,例如 AllowUsers、PasswordAuthentication 和 AuthorizedKeysCommand。 只更改您需要的设置。
添加到 sshd_config.d 目录的文件:
- 按字母顺序读取。请为文件名添加数字前缀,例如 10-macs.conf。
- 如果包含无效设置,会导致 SSH 服务器无法启动。在重启容器之前,请始终运行下面步骤中的检查。
以下步骤中的算法名称仅用于说明。请确认您的 SSH 客户端支持您允许的算法,因为移除某个算法可能会导致较旧的客户端无法连接。
要添加配置文件以自定义 SSH 服务器:
-
在 Docker 主机上,在您的配置卷中创建该目录:
shellsudo mkdir -p $GITLAB_HOME/config/sshd_config.d -
创建一个 drop-in 文件,放入配置文件夹。例如,仅允许两种消息认证码(MAC)算法:
shellsudo tee $GITLAB_HOME/config/sshd_config.d/10-macs.conf <<'EOF' MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com EOF -
确保该目录和文件归 root 所有,且群组或其他用户不可写:
shellsudo chown -R root:root $GITLAB_HOME/config/sshd_config.d sudo chmod -R go-w $GITLAB_HOME/config/sshd_config.d -
检查生成的配置:
shellsudo docker exec gitlab /usr/sbin/sshd -t -f /assets/sshd_config如果命令输出错误,请在继续之前修复该 drop-in 文件。
-
重启容器:
shellsudo docker restart gitlab -
可选。确认该设置已生效:
shellsudo docker exec gitlab /usr/sbin/sshd -T -f /assets/sshd_config | grep -i '^macs'
配置多个数据库连接
极狐GitLab 默认使用两个指向同一 PostgreSQL 数据库的数据库连接。
如果出于任何原因,您希望切换回单个数据库连接:
-
在容器内编辑 /etc/gitlab/gitlab.rb:
shellsudo docker exec -it gitlab editor /etc/gitlab/gitlab.rb -
添加以下行:
rubygitlab_rails['databases']['ci']['enable'] = false -
重启容器:
shellsudo docker restart gitlab
后续步骤
配置安装后,请考虑执行推荐的后续步骤,包括身份验证选项和新用户账号限制。