{{< details >}}
- Tier: 基础版, 专业版, 旗舰版
- Offering: 私有化部署
{{< /details >}}
要在 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 不需要新端口号:
ssh://git@gitlab.example.com/user/project.git
-
在安装后更改极狐GitLab Shell SSH 端口。然后 SSH 克隆 URL 包括配置的端口号:
ssh://git@gitlab.example.com:<portNumber>/user/project.git
要更改服务器的 SSH 端口:
-
使用编辑器打开
/etc/ssh/sshd_config
,并更改 SSH 端口:Port = 2424
-
保存文件并重启 SSH 服务:
sudo systemctl restart ssh
-
验证您是否可以通过 SSH 连接。打开一个新的终端会话,并使用新端口 SSH 到服务器。
为卷创建目录
为配置文件、日志和数据文件创建一个目录。目录可以在您的用户主目录中(例如 ~/gitlab-docker
),也可以在像 /srv/gitlab
这样的目录中。
-
创建目录:
sudo mkdir -p /srv/gitlab
-
如果您以
root
以外的用户运行 Docker,请为新目录授予该用户适当的权限。 -
配置一个新的环境变量
$GITLAB_HOME
,设置为您创建的目录的路径:export GITLAB_HOME=/srv/gitlab
-
可选地,您可以将
GITLAB_HOME
环境变量附加到您的 shell 配置文件中,以便在所有未来的终端会话中应用:- Bash:
~/.bash_profile
- ZSH:
~/.zshrc
- Bash:
极狐GitLab 容器使用主机挂载的卷来存储持久数据:
本地位置 | 容器位置 | 用途 |
---|---|---|
$GITLAB_HOME/data |
/var/opt/gitlab |
存储应用程序数据。 |
$GITLAB_HOME/logs |
/var/log/gitlab |
存储日志。 |
$GITLAB_HOME/config |
/etc/gitlab |
存储极狐GitLab 配置文件。 |
找到要使用的极狐GitLab 版本和版本
在生产环境中,您应该将您的部署固定到一个特定的极狐GitLab 版本。在可用版本并在 Docker 标签页面中选择您要使用的版本,可以查看官方指南。
标签名称由以下部分组成:
gitlab/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
文件。例如:services: gitlab: image: gitlab/gitlab-ee:<version>-ee.0 container_name: gitlab restart: always hostname: 'gitlab.example.com' environment: GITLAB_OMNIBUS_CONFIG: | # 在这里添加任何其他 gitlab.rb 配置,每行一个 external_url 'https://gitlab.example.com' ports: - '80:80' - '443:443' - '22:22' volumes: - '$GITLAB_HOME/config:/etc/gitlab' - '$GITLAB_HOME/logs:/var/log/gitlab' - '$GITLAB_HOME/data:/var/opt/gitlab' shm_size: '256m'
{{< alert type=”note” >}}
阅读 预配置 Docker 容器 章节,了解
GITLAB_OMNIBUS_CONFIG
变量的工作原理。{{< /alert >}}
这是另一个
docker-compose.yml
示例,其中极狐GitLab 在自定义 HTTP 和 SSH 端口上运行。注意,GITLAB_OMNIBUS_CONFIG
变量与ports
部分匹配:services: gitlab: image: gitlab/gitlab-ee:<version>-ee.0 container_name: gitlab restart: always hostname: 'gitlab.example.com' environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://gitlab.example.com:8929' gitlab_rails['gitlab_shell_ssh_port'] = 2424 ports: - '8929:8929' - '443:443' - '2424:22' volumes: - '$GITLAB_HOME/config:/etc/gitlab' - '$GITLAB_HOME/logs:/var/log/gitlab' - '$GITLAB_HOME/data:/var/opt/gitlab' shm_size: '256m'
此配置与使用
--publish 8929:8929 --publish 2424:22
相同。 -
在与
docker-compose.yml
相同的目录中,启动极狐GitLab:docker compose up -d
使用 Docker Engine 安装极狐GitLab
或者,您可以使用 Docker Engine 安装极狐GitLab。
-
如果您已设置
GITLAB_HOME
变量,请调整目录以满足您的要求并运行镜像:-
如果您不在 SELinux 上,请运行此命令:
sudo docker run --detach \ --hostname gitlab.example.com \ --env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com'" \ --publish 443:443 --publish 80:80 --publish 22:22 \ --name gitlab \ --restart always \ --volume $GITLAB_HOME/config:/etc/gitlab \ --volume $GITLAB_HOME/logs:/var/log/gitlab \ --volume $GITLAB_HOME/data:/var/opt/gitlab \ --shm-size 256m \ gitlab/gitlab-ee:<version>-ee.0
此命令下载并启动极狐GitLab 容器,并发布访问 SSH、HTTP 和 HTTPS 所需的端口。所有极狐GitLab 数据都存储为
$GITLAB_HOME
的子目录。容器会在系统重启后自动重启。 -
如果您在 SELinux 上,请运行以下命令:
sudo docker run --detach \ --hostname gitlab.example.com \ --env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com'" \ --publish 443:443 --publish 80:80 --publish 22:22 \ --name gitlab \ --restart always \ --volume $GITLAB_HOME/config:/etc/gitlab:Z \ --volume $GITLAB_HOME/logs:/var/log/gitlab:Z \ --volume $GITLAB_HOME/data:/var/opt/gitlab:Z \ --shm-size 256m \ gitlab/gitlab-ee:<version>-ee.0
此命令确保 Docker 进程有足够的权限在挂载的卷中创建配置文件。
-
-
如果您使用的是 Kerberos 集成,您还必须发布您的 Kerberos 端口(例如,
--publish 8443:8443
)。未能这样做会阻止使用 Kerberos 进行 Git 操作。初始化过程可能需要很长时间。您可以通过以下命令跟踪此过程:sudo docker logs -f gitlab
启动容器后,您可以访问
gitlab.example.com
。可能需要一段时间,Docker 容器才开始响应查询。 -
访问极狐GitLab URL,并使用用户名
root
和以下命令的密码登录:sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
{{< alert type=”note” >}}
密码文件在首次容器重启后 24 小时内自动删除。
{{< /alert >}}
使用 Docker Swarm 模式安装极狐GitLab
使用 Docker Swarm 模式,您可以在 swarm 集群中配置和部署极狐GitLab 安装。
在 swarm 模式中,您可以利用 Docker 密钥和 Docker 配置来高效和安全地部署极狐GitLab 实例。密钥可用于安全传递初始 root 密码,而不将其暴露为环境变量。配置可以帮助您保持极狐GitLab 镜像尽可能通用。
以下是一个示例,使用密钥和配置,将极狐GitLab 和四个 runner 作为 stac 部署:
- 设置一个 Docker swarm。
-
创建一个
docker-compose.yml
文件:services: gitlab: image: gitlab/gitlab-ee:<version>-ee.0 container_name: gitlab restart: always hostname: 'gitlab.example.com' ports: - "22:22" - "80:80" - "443:443" volumes: - $GITLAB_HOME/data:/var/opt/gitlab - $GITLAB_HOME/logs:/var/log/gitlab - $GITLAB_HOME/config:/etc/gitlab shm_size: '256m' environment: GITLAB_OMNIBUS_CONFIG: "from_file('/omnibus_config.rb')" configs: - source: gitlab target: /omnibus_config.rb secrets: - gitlab_root_password gitlab-runner: image: gitlab/gitlab-runner:alpine deploy: mode: replicated replicas: 4 configs: gitlab: file: ./gitlab.rb secrets: gitlab_root_password: file: ./root_password.txt
为了简化,以上示例省略了
network
配置。您可以在官方 Compose 文件参考中找到更多信息。 -
创建一个
gitlab.rb
文件:external_url 'https://my.domain.com/' gitlab_rails['initial_root_password'] = File.read('/run/secrets/gitlab_root_password').gsub("\n", "")
-
创建一个名为
root_password.txt
的文件,包含密码:MySuperSecretAndSecurePassw0rd!
-
确保您在与
docker-compose.yml
相同的目录中运行:docker stack deploy --compose-file docker-compose.yml mystack
安装 Docker 后,您需要 配置您的极狐GitLab 实例。