在 Docker 容器中配置极狐GitLab
所有级别
私有化部署

此容器使用官方的 Linux 软件包,所以你可以使用唯一的配置文件 /etc/gitlab/gitlab.rb 来配置实例。

编辑配置文件

要访问极狐GitLab 配置文件,你可以在正在运行的容器的上下文中启动一个 shell 会话。

  1. 启动会话:

    sudo docker exec -it gitlab /bin/bash
    

    或者你可以在编辑器中直接打开 /etc/gitlab/gitlab.rb

    sudo docker exec -it gitlab editor /etc/gitlab/gitlab.rb
    
  2. 在你喜欢的文本编辑器中,打开 /etc/gitlab/gitlab.rb 并更新以下字段:

    1. external_url 字段设置为有效的极狐GitLab 实例 URL。

    2. 要想从极狐GitLab 接受邮件,配置 SMTP 设置。极狐GitLab Docker 镜像不会预安装 SMTP 服务器。

    3. 如果需要,启用 HTTPS

  3. 保存文件并重启容器来重新配置极狐GitLab:

    sudo docker restart gitlab
    

容器每次启动时,极狐GitLab 都会重新配置自己。关于极狐GitLab 的更多配置选项,查看配置文档

预配置 Docker 容器

你可以在 docker run 命令中通过添加环境变量 GITLAB_OMNIBUS_CONFIG 来预配置 GitLab Docker 镜像。此变量可以包含任何 gitlab.rb 设置,并在加载容器的 gitlab.rb 文件之前进行评估。这种行为允许你配置外部 GitLab URL,并进行数据库配置或其他选项,例如 Linux 软件包模板中的任何其他选项。GITLAB_OMNIBUS_CONFIG 中包含的设置不会写入 gitlab.rb 配置文件,而是在加载时进行评估。要提供多个设置,请用冒号(;)分隔它们。

以下示例设置了外部 URL,启用了 LFS,并以最小的 shm 大小启动了容器

sudo docker run --detach \
  --hostname gitlab.example.com \
  --env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com'; gitlab_rails['lfs_enabled'] = true;" \
  --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 \
  registry.gitlab.cn/omnibus/gitlab-jh:latest

每次当你执行 docker run 命令时,你需要提供 GITLAB_OMNIBUS_CONFIG 选项。GITLAB_OMNIBUS_CONFIG 的内容 不会 在后续运行之间保留。

在公开的 IP 地址上运行极狐GitLab

你可以让 Docker 使用你的 IP 地址并通过修改 --publish 转发所有流量到极狐GitLab 容器。

要在 IP 198.51.100.1 上暴露极狐GitLab:

sudo docker run --detach \
  --hostname gitlab.example.com \
  --env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com'" \
  --publish 198.51.100.1:443:443 \
  --publish 198.51.100.1:80:80 \
  --publish 198.51.100.1: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 \
  registry.gitlab.cn/omnibus/gitlab-jh:latest

你可以在 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 服务:

  1. 运行如下 docker run 命令:

    sudo docker run --detach \
      --hostname gitlab.example.com \
      --env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com:8929'; gitlab_rails['gitlab_shell_ssh_port'] = 2424" \
      --publish 8929:8929 --publish 2424: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 \
      registry.gitlab.cn/omnibus/gitlab-jh:latest
    
    note 暴露的端口格式为 hostPort:containerPort
  2. 进入运行的容器:

    sudo docker exec -it gitlab /bin/bash
    
  3. 用编辑器打开 /etc/gitlab/gitlab.rb 并设置 external_url

    # For HTTP
    external_url "http://gitlab.example.com:8929"
    
    or
    
    # For HTTPS (notice the https)
    external_url "https://gitlab.example.com:8929"
    

    此 URL 中指定的端口必须与 Docker 发布到主机的端口匹配。此外,如果 NGINX 监听端口未在 nginx['listen_port'] 中显式设置,则使用 external_url 代替。有关更多信息,请参阅 NGINX 文档

  4. 设置 SSH 端口:

    gitlab_rails['gitlab_shell_ssh_port'] = 2424
    
  5. 最终,重新配置极狐GitLab:

    gitlab-ctl reconfigure
    

遵循上面的示例,你可以在 web 浏览器上访问你的实例,地址为 <hostIP>:8929,切通过 SSH 推送所需的端口为 2424

Docker compose部分中,你可以查看使用不同端口的 docker-compose.yml 示例。

配置多个数据库连接

从极狐GitLab 16.0 开始,极狐GitLab 默认使用两个数据库连接,它们指向同一个 PostgreSQL 数据库。

由于任何原因,你希望切换回单个数据库连接:

  1. 在容器内部编辑 /etc/gitlab/gitlab.rb

    sudo docker exec -it gitlab editor /etc/gitlab/gitlab.rb
    
  2. 添加如下内容:

    gitlab_rails['databases']['ci']['enable'] = false
    
  3. 重启容器:

    sudo docker restart gitlab
    

下一步

在配置完成后,考虑推荐的下一步,包括身份验证选项和注册限制。