Help us learn about your current experience with the documentation. Take the survey.

配置在 Docker 容器中运行的 GitLab

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab Self-Managed

该容器使用官方 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 运行命令添加环境变量 GITLAB_OMNIBUS_CONFIG 来预配置 GitLab Docker 镜像。该变量可以包含任何 gitlab.rb 设置,并在加载容器的 gitlab.rb 文件之前进行评估。此行为允许您配置外部 GitLab URL, 并从 Linux 包模板 中进行数据库配置或任何其他选项。GITLAB_OMNIBUS_CONFIG 中包含的设置不会写入 gitlab.rb 配置文件,而是在加载时进行评估。要提供多个设置,请用冒号 (;) 分隔它们。

以下示例设置外部 URL,启用 LFS,并以 Prometheus 所需的最小 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 \
  gitlab/gitlab-ee:<version>-ee.0

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

在公共 IP 地址上运行 GitLab

您可以通过修改 --publish 标志,让 Docker 使用您的 IP 地址并将所有流量转发到 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 \
  gitlab/gitlab-ee:<version>-ee.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 服务:

  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 \
      gitlab/gitlab-ee:<version>-ee.0

    发布端口的格式是 hostPort:containerPort。有关更多信息,请参阅 Docker 文档中关于 暴露传入端口 的内容。

  2. 进入运行中的容器:

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

    # 对于 HTTP
    external_url "http://gitlab.example.com:8929"
    
    或者
    
    # 对于 HTTPS(注意 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 访问您的 GitLab 实例, 并通过端口 2424 进行 SSH 推送。

您可以在 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

下一步

配置好您的安装后,请考虑执行 推荐的下一步操作,包括身份验证选项 和注册限制。