ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Docker部署GitLab:企业级DevOps平台搭建指南

Docker部署GitLab:企业级DevOps平台搭建指南

1. 项目概述

GitLab作为一款开源的DevOps平台,已经成为现代软件开发团队不可或缺的工具。它集成了代码托管、CI/CD、项目管理等功能于一体,而Docker容器化部署方式则大幅简化了GitLab的安装和维护过程。本文将详细介绍如何使用Docker快速搭建企业级GitLab服务。

2. 环境准备

2.1 系统要求

建议使用Linux服务器(如Ubuntu 20.04+或CentOS 7+),配置至少4核CPU、8GB内存和100GB存储空间。对于小型团队,2核4GB的配置也可运行,但性能会受限。

2.2 Docker安装

在Ubuntu系统上安装Docker的完整命令如下:

# 卸载旧版本 sudo apt-get remove docker docker-engine docker.io containerd runc # 安装依赖 sudo apt-get update sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release # 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 设置稳定版仓库 echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装Docker引擎 sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io # 验证安装 sudo docker run hello-world

注意:生产环境建议安装特定版本的Docker而非最新版,以避免兼容性问题。

3. GitLab容器部署

3.1 基础部署命令

使用官方GitLab CE镜像的最简部署方式:

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

3.2 关键参数解析

  • --hostname:必须设置为最终访问的域名
  • 端口映射:
    • 80:HTTP访问
    • 443:HTTPS访问
    • 22:SSH克隆(建议修改为其他端口如2222以避免冲突)
  • 数据卷:
    • config:配置文件
    • logs:日志文件
    • data:应用数据

3.3 生产环境优化配置

建议创建docker-compose.yml文件进行管理:

version: '3' services: gitlab: image: gitlab/gitlab-ce:14.10.2 container_name: gitlab restart: always hostname: 'gitlab.yourdomain.com' environment: GITLAB_OMNIBUS_CONFIG: | external_url 'https://gitlab.yourdomain.com' gitlab_rails['gitlab_shell_ssh_port'] = 2222 nginx['listen_port'] = 80 nginx['listen_https'] = false ports: - "80:80" - "443:443" - "2222:22" volumes: - '/srv/gitlab/config:/etc/gitlab' - '/srv/gitlab/logs:/var/log/gitlab' - '/srv/gitlab/data:/var/opt/gitlab' shm_size: '256m'

4. 初始配置

4.1 首次访问

  1. 容器启动后需要等待2-5分钟初始化
  2. 访问http://服务器IP
  3. 首次登录使用root账户,密码存放在容器内:
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

4.2 重要配置项

修改/etc/gitlab/gitlab.rb(对应宿主机/srv/gitlab/config/gitlab.rb):

# 基础配置 external_url 'https://gitlab.example.com' gitlab_rails['time_zone'] = 'Asia/Shanghai' # 邮箱配置(必须) gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.example.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "gitlab@example.com" gitlab_rails['smtp_password'] = "password" gitlab_rails['smtp_domain'] = "example.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true # 备份配置 gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" gitlab_rails['backup_keep_time'] = 604800 # 保留7天 # 性能优化 puma['worker_processes'] = 2 # CPU核心数 sidekiq['concurrency'] = 5 # 根据内存调整

应用配置变更:

sudo docker exec -it gitlab gitlab-ctl reconfigure sudo docker exec -it gitlab gitlab-ctl restart

5. 日常维护

5.1 备份恢复

创建备份:

sudo docker exec -it gitlab gitlab-backup create

恢复备份:

# 先停止相关服务 sudo docker exec -it gitlab gitlab-ctl stop puma sudo docker exec -it gitlab gitlab-ctl stop sidekiq # 执行恢复(BACKUP=备份文件名去掉_gitlab_backup.tar) sudo docker exec -it gitlab gitlab-backup restore BACKUP=1234567890 # 重启服务 sudo docker exec -it gitlab gitlab-ctl restart

5.2 版本升级

  1. 停止并删除当前容器
  2. 备份数据
  3. 拉取新版本镜像
  4. 使用相同配置启动新容器

建议使用以下升级脚本:

#!/bin/bash # 停止并删除旧容器 sudo docker stop gitlab sudo docker rm gitlab # 拉取最新镜像 sudo docker pull gitlab/gitlab-ce:latest # 启动新容器(使用原有数据卷) sudo docker run --detach \ --hostname gitlab.example.com \ --publish 443:443 --publish 80:80 --publish 2222:22 \ --name gitlab \ --restart always \ --volume /srv/gitlab/config:/etc/gitlab \ --volume /srv/gitlab/logs:/var/log/gitlab \ --volume /srv/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest

6. 常见问题解决

6.1 502错误

可能原因及解决方案:

  1. 内存不足:增加SWAP或升级服务器配置
  2. 端口冲突:检查80/443端口是否被占用
  3. 服务未就绪:等待初始化完成(查看日志:docker logs -f gitlab)

6.2 邮件发送失败

测试邮件配置:

sudo docker exec -it gitlab gitlab-rails console Notify.test_email('test@example.com', 'Test', 'Test Body').deliver_now

6.3 性能优化

  1. 增加PUMA workers:
puma['worker_processes'] = 4
  1. 调整Sidekiq线程:
sidekiq['concurrency'] = 10
  1. 启用缓存:
gitlab_rails['redis_cache_instance'] = 'redis://redis.example.com:6379'

7. 安全加固建议

  1. 定期更新容器镜像
  2. 配置HTTPS(使用Let's Encrypt):
letsencrypt['enable'] = true letsencrypt['contact_emails'] = ['admin@example.com']
  1. 限制Docker API访问
  2. 设置定期自动备份
  3. 启用双因素认证

通过以上步骤,您已经成功部署了一个基于Docker的企业级GitLab服务。这种部署方式不仅简化了安装过程,还便于后续的维护和升级。根据团队规模和使用场景,可以进一步调整资源配置和功能设置。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进