在 Docker 容器中安装极狐GitLab
- Tier: 基础版, 专业版, 旗舰版
- Offering: 私有化部署
要在 Docker 容器中安装极狐GitLab,可以使用 Docker Compose、Docker Engine 或 Docker Swarm 模式。
先决条件:
- 您必须有一个正常工作的 Docker 安装,而不是 Docker for Windows。由于已知的兼容性问题,Docker for Windows 未被官方支持,特别是在卷权限方面以及可能的其他未知问题。
- 您必须有一个邮件传输代理(MTA),例如 Postfix 或 Sendmail。极狐GitLab 镜像不包含 MTA。您可以在单独的容器中安装 MTA。虽然您可以在与极狐GitLab 相同的容器中安装 MTA,但在每次升级或重启后,您可能需要重新安装 MTA。
- 您不应该计划在 Kubernetes 中部署极狐GitLab Docker 镜像,因为这会创建一个单点故障。如果您想在 Kubernetes 中部署极狐GitLab,请使用 极狐GitLab Helm Chart 或 极狐GitLab Operator。
- 您必须为您的 Docker 安装拥有一个有效的、外部可访问的主机名。不要使用 localhost。
配置 SSH 端口
默认情况下,极狐GitLab 使用端口 22 通过 SSH 与 Git 交互。要使用端口 22,请跳过此部分。
要使用不同的端口,您可以:
-
立即更改服务器的 SSH 端口(推荐)。然后 SSH 克隆 URL 不需要新端口号:
plaintextssh://git@gitlab.example.com/user/project.git -
在安装后更改极狐GitLab Shell SSH 端口。然后 SSH 克隆 URL 包括配置的端口号:
plaintextssh://git@gitlab.example.com:<portNumber>/user/project.git
要更改服务器的 SSH 端口:
-
使用编辑器打开 /etc/ssh/sshd_config,并更改 SSH 端口:
confPort = 2424 -
保存文件并重启 SSH 服务:
shellsudo systemctl restart ssh -
验证您是否可以通过 SSH 连接。打开一个新的终端会话,并使用新端口 SSH 到服务器。
为卷创建目录
为配置文件、日志和数据文件创建一个目录。目录可以在您的用户主目录中(例如 ~/gitlab-docker),也可以在像 /srv/gitlab 这样的目录中。
-
创建目录:
shellsudo mkdir -p /srv/gitlab -
如果您以 root 以外的用户运行 Docker,请为新目录授予该用户适当的权限。
-
配置一个新的环境变量 $GITLAB_HOME,设置为您创建的目录的路径:
shellexport GITLAB_HOME=/srv/gitlab -
可选地,您可以将 GITLAB_HOME 环境变量附加到您的 shell 配置文件中,以便在所有未来的终端会话中应用:
- Bash: ~/.bash_profile
- ZSH: ~/.zshrc
极狐GitLab 容器使用主机挂载的卷来存储持久数据:
| 本地位置 | 容器位置 | 用途 |
|---|---|---|
| $GITLAB_HOME/data | /var/opt/gitlab | 存储应用程序数据。 |
| $GITLAB_HOME/logs | /var/log/gitlab | 存储日志。 |
| $GITLAB_HOME/config | /etc/gitlab | 存储极狐GitLab 配置文件。 |
找到要使用的极狐GitLab 版本和版本
在生产环境中,您应该将您的部署固定到一个特定的极狐GitLab 版本。在可用版本并在 Docker 标签页面中选择您要使用的版本,可以查看官方指南。
标签名称由以下部分组成:
plaintextgitlab/gitlab-jh:<version>-jh.0
其中 <version> 是极狐GitLab 版本,例如 16.5.3。版本名称总是包含 <major>.<minor>.<patch>。
出于测试目的,您可以使用 latest 标签,例如 registry.gitlab.cn/omnibus/gitlab-jh:latest,它指向最新的稳定版本。
安装
您可以通过以下方式运行极狐GitLab Docker 镜像:
使用 Docker Compose 安装极狐GitLab
使用 Docker Compose 可以配置、安装和升级基于 Docker 的极狐GitLab 安装:
-
安装 Docker Compose。
-
创建一个 docker-compose.yml 文件。例如:
yaml1services: 2 gitlab: 3 image: gitlab/gitlab-ee:<version>-ee.0 4 container_name: gitlab 5 restart: always 6 hostname: 'gitlab.example.com' 7 environment: 8 GITLAB_OMNIBUS_CONFIG: | 9 # 在这里添加任何其他 gitlab.rb 配置,每行一个 10 external_url 'https://gitlab.example.com' 11 ports: 12 - '80:80' 13 - '443:443' 14 - '22:22' 15 volumes: 16 - '$GITLAB_HOME/config:/etc/gitlab' 17 - '$GITLAB_HOME/logs:/var/log/gitlab' 18 - '$GITLAB_HOME/data:/var/opt/gitlab' 19 shm_size: '256m'
阅读 预配置 Docker 容器 章节,了解 GITLAB_OMNIBUS_CONFIG 变量的工作原理。
这是另一个 docker-compose.yml 示例,其中极狐GitLab 在自定义 HTTP 和 SSH 端口上运行。注意,GITLAB_OMNIBUS_CONFIG 变量与 ports 部分匹配:
yaml1services: 2 gitlab: 3 image: gitlab/gitlab-ee:<version>-ee.0 4 container_name: gitlab 5 restart: always 6 hostname: 'gitlab.example.com' 7 environment: 8 GITLAB_OMNIBUS_CONFIG: | 9 external_url 'http://gitlab.example.com:8929' 10 gitlab_rails['gitlab_shell_ssh_port'] = 2424 11 ports: 12 - '8929:8929' 13 - '443:443' 14 - '2424:22' 15 volumes: 16 - '$GITLAB_HOME/config:/etc/gitlab' 17 - '$GITLAB_HOME/logs:/var/log/gitlab' 18 - '$GITLAB_HOME/data:/var/opt/gitlab' 19 shm_size: '256m'
此配置与使用 --publish 8929:8929 --publish 2424:22 相同。
-
在与 docker-compose.yml 相同的目录中,启动极狐GitLab:
shelldocker compose up -d
使用 Docker Engine 安装极狐GitLab
或者,您可以使用 Docker Engine 安装极狐GitLab。
-
如果您已设置 GITLAB_HOME 变量,请调整目录以满足您的要求并运行镜像:
-
如果您不在 SELinux 上,请运行此命令:
shell1sudo docker run --detach \ 2 --hostname gitlab.example.com \ 3 --env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com'" \ 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 gitlab/gitlab-ee:<version>-ee.0此命令下载并启动极狐GitLab 容器,并发布访问 SSH、HTTP 和 HTTPS 所需的端口。所有极狐GitLab 数据都存储为 $GITLAB_HOME 的子目录。容器会在系统重启后自动重启。
-
如果您在 SELinux 上,请运行以下命令:
shell1 sudo docker run --detach \ 2 --hostname gitlab.example.com \ 3 --env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com'" \ 4 --publish 443:443 --publish 80:80 --publish 22:22 \ 5 --name gitlab \ 6 --restart always \ 7 --volume $GITLAB_HOME/config:/etc/gitlab:Z \ 8 --volume $GITLAB_HOME/logs:/var/log/gitlab:Z \ 9 --volume $GITLAB_HOME/data:/var/opt/gitlab:Z \ 10 --shm-size 256m \ 11 gitlab/gitlab-ee:<version>-ee.0此命令确保 Docker 进程有足够的权限在挂载的卷中创建配置文件。
-
-
如果您使用的是 Kerberos 集成,您还必须发布您的 Kerberos 端口(例如,--publish 8443:8443)。未能这样做会阻止使用 Kerberos 进行 Git 操作。初始化过程可能需要很长时间。您可以通过以下命令跟踪此过程:
shellsudo docker logs -f gitlab启动容器后,您可以访问 gitlab.example.com。可能需要一段时间,Docker 容器才开始响应查询。
-
访问极狐GitLab URL,并使用用户名 root 和以下命令的密码登录:
shellsudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
密码文件在首次容器重启后 24 小时内自动删除。
使用 Docker Swarm 模式安装极狐GitLab
使用 Docker Swarm 模式,您可以在 swarm 集群中配置和部署极狐GitLab 安装。
在 swarm 模式中,您可以利用 Docker 密钥和 Docker 配置来高效和安全地部署极狐GitLab 实例。密钥可用于安全传递初始 root 密码,而不将其暴露为环境变量。配置可以帮助您保持极狐GitLab 镜像尽可能通用。
以下是一个示例,使用密钥和配置,将极狐GitLab 和四个 runner 作为 stac 部署:
-
设置一个 Docker swarm。
-
创建一个 docker-compose.yml 文件:
yaml1services: 2 gitlab: 3 image: gitlab/gitlab-ee:<version>-ee.0 4 container_name: gitlab 5 restart: always 6 hostname: 'gitlab.example.com' 7 ports: 8 - "22:22" 9 - "80:80" 10 - "443:443" 11 volumes: 12 - $GITLAB_HOME/data:/var/opt/gitlab 13 - $GITLAB_HOME/logs:/var/log/gitlab 14 - $GITLAB_HOME/config:/etc/gitlab 15 shm_size: '256m' 16 environment: 17 GITLAB_OMNIBUS_CONFIG: "from_file('/omnibus_config.rb')" 18 configs: 19 - source: gitlab 20 target: /omnibus_config.rb 21 secrets: 22 - gitlab_root_password 23 gitlab-runner: 24 image: gitlab/gitlab-runner:alpine 25 deploy: 26 mode: replicated 27 replicas: 4 28configs: 29 gitlab: 30 file: ./gitlab.rb 31secrets: 32 gitlab_root_password: 33 file: ./root_password.txt为了简化,以上示例省略了 network 配置。您可以在官方 Compose 文件参考中找到更多信息。
-
创建一个 gitlab.rb 文件:
rubyexternal_url 'https://my.domain.com/' gitlab_rails['initial_root_password'] = File.read('/run/secrets/gitlab_root_password').gsub("\n", "") -
创建一个名为 root_password.txt 的文件,包含密码:
plaintextMySuperSecretAndSecurePassw0rd! -
确保您在与 docker-compose.yml 相同的目录中运行:
shelldocker stack deploy --compose-file docker-compose.yml mystack
安装 Docker 后,您需要 配置您的极狐GitLab 实例。