15分钟从零部署企业级GitLab:Docker Compose实战指南

15分钟从零部署企业级GitLab:Docker Compose实战指南

【免费下载链接】boilerplates This is my personal template collection. Here you'll find templates, and configurations for various tools, and technologies. 【免费下载链接】boilerplates 项目地址: https://gitcode.com/GitHub_Trending/bo/boilerplates

引言:为什么选择Docker Compose部署GitLab?

你是否还在为GitLab部署的复杂性而烦恼?手动配置Nginx、PostgreSQL、Redis的组合常常耗费数小时,且容易出现版本兼容性问题。本文将展示如何使用Docker Compose在15分钟内完成企业级GitLab的部署与配置,包括HTTPS设置、SSH端口自定义和数据持久化方案。读完本文后,你将能够:

  • 使用Docker Compose一键启动GitLab服务
  • 配置自定义域名与SSL证书
  • 优化GitLab性能参数
  • 实现数据备份与迁移策略

技术架构解析

GitLab容器化架构

mermaid

GitLab容器内部集成了所有必要组件,通过Docker Compose可以简化部署流程,同时保持数据独立性。这种架构的优势在于:

  • 环境一致性:开发、测试和生产环境保持一致
  • 隔离性:与宿主机系统隔离,避免依赖冲突
  • 可移植性:轻松迁移到不同服务器

部署步骤详解

1. 准备工作

确保系统已安装Docker和Docker Compose:

# 检查Docker版本
docker --version

# 检查Docker Compose版本
docker compose version

克隆项目仓库:

git clone https://gitcode.com/Trending/bo/boilerplates.git
cd boilerplates/docker-compose/gitlab

2. 配置文件解析

核心配置文件结构:

gitlab/
├── compose.yaml      # Docker Compose配置
└── config/
    └── gitlab.rb     # GitLab应用配置
compose.yaml分析
services:
  gitlab:
    image: docker.io/gitlab/gitlab-ce:18.4.0-ce.0  # 指定稳定版本
    container_name: gitlab
    shm_size: '256m'  # 共享内存大小,影响性能
    volumes:
      - ./config:/etc/gitlab  # 配置文件目录
      - ./logs:/var/log/gitlab  # 日志文件目录
      - gitlab-data:/var/opt/gitlab  # 数据卷,持久化应用数据
    ports:
      - "80:80"       # HTTP端口
      - "443:443"     # HTTPS端口
      - '2424:22'     # 自定义SSH端口
    restart: unless-stopped  # 自动重启策略

volumes:
  gitlab-data:
    driver: local  # 使用本地卷驱动
gitlab.rb关键配置
# 基础配置
external_url 'https://git.example.com'  # 外部访问URL
gitlab_rails['gitlab_shell_ssh_port'] = 2424  # 自定义SSH端口

# HTTPS配置
letsencrypt['enable'] = false  # 禁用内置Let's Encrypt
nginx['listen_port']  = 80     # 内部HTTP端口
nginx['listen_https'] = false  # 禁用内部HTTPS

# 可选:容器注册表配置
# registry_external_url 'https://registry.example.com'
# gitlab_rails['registry_enabled'] = true

3. 自定义配置

配置HTTPS

使用反向代理时,修改compose.yaml:

services:
  gitlab:
    # ... 其他配置 ...
    labels:
      - traefik.enable=true
      - traefik.http.services.gitlab.loadbalancer.server.port=80
      - traefik.http.routers.gitlab.rule=Host(`git.example.com`)
      - traefik.http.routers.gitlab.tls=true
      - traefik.http.routers.gitlab.tls.certresolver=acme
    networks:
      - frontend

networks:
  frontend:
    external: true

同时在gitlab.rb中设置:

external_url 'https://git.example.com'
nginx['listen_port'] = 80
nginx['listen_https'] = false
性能优化

根据服务器配置调整资源限制:

services:
  gitlab:
    # ... 其他配置 ...
    deploy:
      resources:
        limits:
          cpus: '4'
          memory: 8G
        reservations:
          cpus: '2'
          memory: 4G

4. 启动与验证

启动GitLab服务:

docker compose up -d

首次启动需要等待5-10分钟初始化,可通过日志查看进度:

docker compose logs -f

验证服务状态:

# 检查容器状态
docker compose ps

# 检查端口监听
netstat -tulpn | grep docker

访问Web界面:https://your-gitlab-fqdn,使用初始管理员密码登录:

# 获取初始root密码
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

数据管理策略

备份方案

创建定时备份脚本:

#!/bin/bash
BACKUP_DIR="/path/to/backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)

# 创建配置文件备份
tar -czf $BACKUP_DIR/gitlab_config_$TIMESTAMP.tar.gz ./config

# 创建数据卷备份
docker run --rm -v gitlab-data:/source -v $BACKUP_DIR:/backup alpine \
  tar -czf /backup/gitlab_data_$TIMESTAMP.tar.gz -C /source .

添加到crontab:

# 每天凌晨3点执行备份
0 3 * * * /path/to/backup_script.sh

迁移步骤

  1. 在新服务器上安装Docker和Docker Compose
  2. 复制config目录和数据卷备份文件
  3. 恢复数据卷:
docker volume create gitlab-data
docker run --rm -v gitlab-data:/target -v /path/to/backups:/backup alpine \
  sh -c "rm -rf /target/* && tar -xzf /backup/gitlab_data_*.tar.gz -C /target"
  1. 启动GitLab服务:
docker compose up -d

常见问题解决方案

1. 内存不足问题

症状:GitLab容器频繁重启,日志中出现"out of memory"错误。

解决方案

  • 增加宿主机内存至少4GB
  • 调整GitLab内存配置:
# 在gitlab.rb中添加
gitlab_rails['env'] = {
  'GITLAB_RAILS_MEMORY_LIMIT' => '2048m'
}
sidekiq['concurrency'] = 5

2. 端口冲突问题

症状:启动时报错"Bind for 0.0.0.0:80 failed"。

解决方案:修改compose.yaml中的端口映射:

ports:
  - "8080:80"   # 将80端口映射到宿主机8080端口
  - "8443:443"  # 将443端口映射到宿主机8443端口

同时更新gitlab.rb中的external_url:

external_url 'https://git.example.com:8443'

3. 数据恢复失败

症状:恢复备份后无法访问GitLab。

解决方案

  • 检查文件权限:
sudo chown -R 998:998 ./config ./logs
  • 重新配置GitLab:
docker exec -it gitlab gitlab-ctl reconfigure

高级配置选项

集成外部认证

配置LDAP认证(在gitlab.rb中):

gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
  main:
    label: 'LDAP'
    host: 'ldap.example.com'
    port: 389
    uid: 'sAMAccountName'
    bind_dn: 'cn=admin,dc=example,dc=com'
    password: 'ldap_password'
    encryption: 'plain'
    base: 'dc=example,dc=com'
EOS

启用容器注册表

取消gitlab.rb中的注释并修改:

registry_external_url 'https://registry.example.com'
gitlab_rails['registry_enabled'] = true
registry_nginx['listen_port'] = 5678

更新compose.yaml添加端口映射:

ports:
  - '5678:5678'  # 容器注册表端口

总结与展望

本文详细介绍了使用Docker Compose部署GitLab的完整流程,从基础配置到高级功能,涵盖了企业级应用所需的各个方面。通过容器化部署,我们不仅简化了安装过程,还提高了系统的可维护性和可移植性。

未来可以进一步探索的方向:

  • 实现GitLab高可用集群
  • 集成CI/CD流水线
  • 配置监控与告警系统

希望本文能帮助你快速部署和优化GitLab服务,如有任何问题或建议,欢迎在评论区留言讨论。

如果觉得本文有用,请点赞、收藏并关注作者,获取更多DevOps实战教程!

【免费下载链接】boilerplates This is my personal template collection. Here you'll find templates, and configurations for various tools, and technologies. 【免费下载链接】boilerplates 项目地址: https://gitcode.com/GitHub_Trending/bo/boilerplates

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值