{{< 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 端口:

  1. 使用编辑器打开 /etc/ssh/sshd_config,并更改 SSH 端口:

    Port = 2424
    
  2. 保存文件并重启 SSH 服务:

    sudo systemctl restart ssh
    
  3. 验证您是否可以通过 SSH 连接。打开一个新的终端会话,并使用新端口 SSH 到服务器。

为卷创建目录

为配置文件、日志和数据文件创建一个目录。目录可以在您的用户主目录中(例如 ~/gitlab-docker),也可以在像 /srv/gitlab 这样的目录中。

  1. 创建目录:

    sudo mkdir -p /srv/gitlab
    
  2. 如果您以 root 以外的用户运行 Docker,请为新目录授予该用户适当的权限。

  3. 配置一个新的环境变量 $GITLAB_HOME,设置为您创建的目录的路径:

    export GITLAB_HOME=/srv/gitlab
    
  4. 可选地,您可以将 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 标签页面中选择您要使用的版本,可以查看官方指南

标签名称由以下部分组成:

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 安装:

  1. 安装 Docker Compose。
  2. 创建一个 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 相同。

  3. 在与 docker-compose.yml 相同的目录中,启动极狐GitLab:

    docker compose up -d
    

使用 Docker Engine 安装极狐GitLab

或者,您可以使用 Docker Engine 安装极狐GitLab。

  1. 如果您已设置 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 进程有足够的权限在挂载的卷中创建配置文件。

  2. 如果您使用的是 Kerberos 集成,您还必须发布您的 Kerberos 端口(例如,--publish 8443:8443)。未能这样做会阻止使用 Kerberos 进行 Git 操作。初始化过程可能需要很长时间。您可以通过以下命令跟踪此过程:

    sudo docker logs -f gitlab
    

    启动容器后,您可以访问 gitlab.example.com。可能需要一段时间,Docker 容器才开始响应查询。

  3. 访问极狐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 部署:

  1. 设置一个 Docker swarm。
  2. 创建一个 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 文件参考中找到更多信息。

  3. 创建一个 gitlab.rb 文件:

    external_url 'https://my.domain.com/'
    gitlab_rails['initial_root_password'] = File.read('/run/secrets/gitlab_root_password').gsub("\n", "")
    
  4. 创建一个名为 root_password.txt 的文件,包含密码:

    MySuperSecretAndSecurePassw0rd!
    
  5. 确保您在与 docker-compose.yml 相同的目录中运行:

    docker stack deploy --compose-file docker-compose.yml mystack
    

安装 Docker 后,您需要 配置您的极狐GitLab 实例