GitLab Docker方式部署

GitLab Docker映像

 

GitLab Docker映像是在单个容器中运行所有必需服务的GitLab的整体映像。

GitLab CE和EE都在Docker Hub中:

注意: 要在Kubernetes上安装GitLab,请查看 GitLab Helm Charts

在以下示例中,我们使用的是GitLab CE的图像。要使用GitLab EE而不是GitLab CE,请将图像名称替换为gitlab/gitlab-ee:latest

需要Docker安装,请参阅官方安装文档

 

设置卷挂载位置

在设置其他所有内容之前,请配置一个新的环境变量$GITLAB_HOME ,该变量指向配置,日志和数据文件将驻留的目录。确保目录存在并且已授予适当的权限。

对于Linux用户,将路径设置为/opt/gitlab

export GITLAB_HOME=/opt/gitlab

对于macOS用户,请使用用户$HOME/gitlab目录:

export GITLAB_HOME=$HOME/gitlab

GitLab容器使用主机安装的卷来存储持久数据:

当地位置货柜位置用法
$GITLAB_HOME/data/var/opt/gitlab用于存储应用程序数据
$GITLAB_HOME/logs/var/log/gitlab用于存储日志
$GITLAB_HOME/config/etc/gitlab用于存储GitLab配置文件

安装

GitLab Docker镜像可以多种方式运行:

使用Docker Engine安装GitLab

您可以微调这些目录以满足您的要求。设置GITLAB_HOME变量后,即可运行图像:

sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 2222:22 \
  --name gitlab \
  --restart always \
  --volume /etc/localtime:/etc/localtime \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

这将下载并启动一个GitLab CE容器,并发布访问SSH,HTTP和HTTPS所需的端口。所有的GitLab数据都将存储为的子目录 $GITLAB_HOMErestart系统重启后,容器将自动运行。

如果您使用的是SELinux,请改为运行以下命令:

sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 2222:22 \
  --name gitlab \
  --restart always \
  --volume /etc/localtime:/etc/localtime:z \
  --volume $GITLAB_HOME/config:/etc/gitlab:Z \
  --volume $GITLAB_HOME/logs:/var/log/gitlab:Z \
  --volume $GITLAB_HOME/data:/var/opt/gitlab:Z \
  gitlab/gitlab-ce:latest

这将确保Docker进程具有足够的权限在已安装的卷中创建配置文件。

注意:--publish 8443:8443如果您正在使用Kerberos集成 ,则还需要发布Kerberos端口(例如)。 。否则,将阻止通过Kerberos进行Git操作。

初始化过程可能需要很长时间。您可以使用以下方法跟踪此过程:

sudo docker logs -f gitlab

启动容器后,您可以访问gitlab.example.com(或者 http://192.168.59.103如果您在macOS上使用了boot2docker)。Docker容器开始响应查询可能需要一段时间。首次访问GitLab时,系统会要求您设置管理员密码。更改后,可以使用用户名root和设置的密码登录。

使用Docker Compose安装GitLab

使用Docker Compose,您可以轻松配置,安装和升级基于Docker的GitLab安装:

  1. 安装Docker Compose
  2. 创建一个docker-compose.yml文件(或下载一个示例):

    web:
      image: 'gitlab/gitlab-ce:latest'
      restart: always
      hostname: 'gitlab.example.com'
      environment:
        GITLAB_OMNIBUS_CONFIG: |
          external_url 'https://gitlab.example.com'
          # Add any other gitlab.rb configuration here, each on its own line
      ports:
        - '80:80'
        - '443:443'
        - '22:22'
      volumes:
        - '/etc/localtime:/etc/localtime'
        - '$GITLAB_HOME/config:/etc/gitlab'
        - '$GITLAB_HOME/logs:/var/log/gitlab'
        - '$GITLAB_HOME/data:/var/opt/gitlab'
  3. 确保您与以下目录位于同一目录中,docker-compose.yml然后启动GitLab:

    docker-compose up -d
提示: 阅读“预配置Docker容器”部分以查看GITLAB_OMNIBUS_CONFIG变量的工作方式。

以下是docker-compose.yml在自定义HTTP和SSH端口上运行GitLab的另一个示例。注意GITLAB_OMNIBUS_CONFIG变量如何匹配该 ports部分:

web:
  image: 'gitlab/gitlab-ce:latest'
  restart: always
  hostname: 'gitlab.example.com'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'http://gitlab.example.com:8929'
      gitlab_rails['gitlab_shell_ssh_port'] = 2224
  ports:
    - '8929:8929'
    - '2224:22'
  volumes:
    - '/etc/localtime:/etc/localtime'
    - '$GITLAB_HOME/config:/etc/gitlab'
    - '$GITLAB_HOME/logs:/var/log/gitlab'
    - '$GITLAB_HOME/data:/var/opt/gitlab'

这与使用相同--publish 8929:8929 --publish 2224:22

使用Docker群模式安装GitLab

使用Docker群集模式,您可以轻松地在群集集群中配置和部署基于Docker的GitLab安装。

在集群模式下,您可以利用Docker机密 和Docker配置有效而安全地部署您的GitLab实例。机密信息可用于安全地传递您的初始root密码,而无需将其暴露为环境变量。配置可以帮助您保持GitLab映像尽可能通用。

这是一个使用秘密和配置将GitLab与四个跑步者作为一个堆栈部署的示例:

  1. 设置Docker集群
  2. 创建一个docker-compose.yml文件:

    version: "3.6"
    services:
      gitlab:
        image: gitlab/gitlab-ce:latest
        ports:
          - "22:22"
          - "80:80"
          - "443:443"
        volumes:
          - '/etc/localtime:/etc/localtime'
          - $GITLAB_HOME/data:/var/opt/gitlab
          - $GITLAB_HOME/logs:/var/log/gitlab
          - $GITLAB_HOME/config:/etc/gitlab
        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')
  4. 创建一个root_password.txt文件:

    MySuperSecretAndSecurePass0rd!
  5. 确保您与以下目录位于同一目录docker-compose.yml并运行:

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

组态

该容器使用官方的Omnibus GitLab软件包,因此所有配置都在唯一的配置文件中完成/etc/gitlab/gitlab.rb

要访问GitLab的配置文件,可以在运行容器的上下文中启动Shell会话。这将允许您浏览所有目录并使用喜欢的文本编辑器:

sudo docker exec -it gitlab /bin/bash

您也可以编辑/etc/gitlab/gitlab.rb

sudo docker exec -it gitlab editor /etc/gitlab/gitlab.rb

打开后,请/etc/gitlab/gitlab.rb确保将设置external_url为指向有效的URL。

要从GitLab接收电子邮件,您必须配置 SMTP设置,因为GitLab Docker映像未安装SMTP服务器。您可能还对启用HTTPS感兴趣 。

完成所需的所有更改后,您将需要重新启动容器以重新配置GitLab:

sudo docker restart gitlab
注意: 每当容器启动时,GitLab都会重新配置自身。

有关配置GitLab的更多选项,请参阅 配置文档

预配置Docker容器

您可以通过将环境变量添加GITLAB_OMNIBUS_CONFIG到Docker run命令中来预先配置GitLab Docker映像。该变量可以包含任何gitlab.rb设置,并且将在加载容器的gitlab.rb文件之前进行评估。这样,您可以轻松配置GitLab的外部URL,从Omnibus GitLab模板进行任何数据库配置或任何其他选项 。

注意: 其中包含的设置GITLAB_OMNIBUS_CONFIG不会写入 gitlab.rb配置文件,它们会在加载时进行评估。

这是一个在启动容器时设置外部URL并启用LFS的示例:

sudo docker run --detach \
  --hostname gitlab.example.com \
  --env GITLAB_OMNIBUS_CONFIG="external_url 'http://my.domain.com/'; gitlab_rails['lfs_enabled'] = true;" \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume /etc/localtime:/etc/localtime \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

请注意,每次执行docker run命令时,都需要提供该GITLAB_OMNIBUS_CONFIG选项。的内容GITLAB_OMNIBUS_CONFIG是 保留后续运行之间。

使用标记版本的GitLab

还提供了GitLab Docker映像的标记版本。要查看所有可用标签,请参阅:

要使用特定的标记版本,请替换gitlab/gitlab-ce:latest为要运行的GitLab版本gitlab/gitlab-ce:12.1.3-ce.0

在公共IP地址上运行GitLab

您可以通过修改--publish标志使Docker使用您的IP地址并将所有流量转发到GitLab容器。

要在IP上公开GitLab CE 198.51.100.1

sudo docker run --detach \
  --hostname 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 /etc/localtime:/etc/localtime \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

然后,您可以在http://198.51.100.1/和访问您的GitLab实例https://198.51.100.1/

在不同的端口上暴露GitLab

GitLab将占用 容器内的某些端口

如果要使用与80(HTTP)或443(HTTPS)不同的主机端口,则需要--publishdocker run命令中添加单独的指令。

例如,在主机的port上公开Web界面,在port上公开8929SSH服务2289

  1. 使用以下docker run命令:

    sudo docker run --detach \
      --hostname gitlab.example.com \
      --publish 8929:8929 --publish 2289:22 \
      --name gitlab \
      --restart always \
      --volume /etc/localtime:/etc/localtime \
      --volume $GITLAB_HOME/config:/etc/gitlab \
      --volume $GITLAB_HOME/logs:/var/log/gitlab \
      --volume $GITLAB_HOME/data:/var/opt/gitlab \
      gitlab/gitlab-ce:latest
    注意: 发布端口的格式为hostPort:containerPort。在Docker的文档中了解更多有关 公开传入端口的信息
  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. 设置gitlab_shell_ssh_port及时区

    gitlab_rails['gitlab_shell_ssh_port'] = 2289
    gitlab_rails['time_zone'] = 'Asia/Shanghai'
  5. 最后,重新配置GitLab:

    gitlab-ctl reconfigure

按照上面的示例,您将能够从Web浏览器下访问GitLab,<hostIP>:8929并在port下使用SSH进行推送2289

docker-compose.yml使用不同的端口的例子可以在找到 多克尔撰写部分。

更新资料

在大多数情况下,更新GitLab就像下载最新的Docker image标签一样容易 。

使用Docker Engine更新GitLab

要更新使用Docker Engine安装的 GitLab :

  1. 进行备份
  2. 停止正在运行的容器:

    sudo docker stop gitlab
  3. 删除现有容器:

    sudo docker rm gitlab
  4. 拉新图像。例如,最新的GitLab CE映像:

    sudo docker pull gitlab/gitlab-ce:latest
  5. 使用先前指定的选项再次创建容器 :

    sudo docker run --detach \
    --hostname gitlab.example.com \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab \
    --restart always \
    --volume /etc/localtime:/etc/localtime \
    --volume $GITLAB_HOME/config:/etc/gitlab \
    --volume $GITLAB_HOME/logs:/var/log/gitlab \
    --volume $GITLAB_HOME/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

在第一次运行时,GitLab将重新配置并自我更新。

注意: 在主要版本之间升级时, 请参考GitLab 升级建议

使用Docker compose更新GitLab

要更新使用Docker Compose安装的 GitLab :

  1. 进行备份
  2. 下载最新版本并更新您的GitLab实例:

    docker-compose pull
    docker-compose up -d
    注意: 如果您改用标记,则需要先进行编辑docker-compose.yml

备份GitLab

您可以使用以下方法创建一个GitLab备份:

docker exec -t <container name> gitlab-backup create

阅读更多有关如何备份和还原GitLab的信息

故障排除

如果您在使用Omnibus GitLab和Docker时遇到问题,以下信息将有所帮助。

诊断潜在问题

读取容器日志:

sudo docker logs gitlab

输入运行容器:

sudo docker exec -it gitlab /bin/bash

从容器内部,您可以像通常管理Omnibus安装一样管理GitLab容器

500内部错误

更新Docker映像时,您可能会遇到一个问题,即所有路径都显示一个500页面。如果发生这种情况,请重新启动容器以尝试解决此问题:

sudo docker restart gitlab

权限问题

从较早的GitLab Docker映像进行更新时,您可能会遇到权限问题。如果以前的图像中的用户没有正确保留,则会发生这种情况。有用于修复所有文件权限的脚本。

要修复容器,请update-permissions随后执行并重新启动容器:

sudo docker exec gitlab update-permissions
sudo docker restart gitlab

Windows / Mac: Error executing action run on resource ruby_block[directory resource: /data/GitLab]

在Windows或Mac上将Docker Toolbox与VirtualBox一起使用并利用Docker卷时,会发生此错误。该/c/Users卷作为VirtualBox共享文件夹安装,并且不支持所有POSIX文件系统功能。不重新安装就无法更改目录所有权和权限,并且GitLab失败。

我们的建议是切换到使用适用于您的平台的本地Docker安装,而不是使用Docker Toolbox。

如果您不能使用本机Docker安装(Windows 10家庭版或Windows 7/8),则另一种解决方案是为Docker Toolbox的boot2docker设置NFS挂载而不是VirtualBox共享。

Linux ACL问题

如果您在Docker主机上使用文件ACL,则该docker组需要对卷具有完全访问权限才能使GitLab正常工作:

getfacl $GITLAB_HOME

# file: $GITLAB_HOME
# owner: XXXX
# group: XXXX
user::rwx
group::rwx
group:docker:rwx
mask::rwx
default:user::rwx
default:group::rwx
default:group:docker:rwx
default:mask::rwx
default:other::r-x

如果这些都不正确,请使用以下命令进行设置:

sudo setfacl -mR default:group:docker:rwx $GITLAB_HOME
注意: docker是默认组,如果您更改了此组,请相应地更新命令。
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值