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:latest3.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 首次访问
- 容器启动后需要等待2-5分钟初始化
- 访问http://服务器IP
- 首次登录使用root账户,密码存放在容器内:
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password4.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 restart5. 日常维护
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 restart5.2 版本升级
- 停止并删除当前容器
- 备份数据
- 拉取新版本镜像
- 使用相同配置启动新容器
建议使用以下升级脚本:
#!/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:latest6. 常见问题解决
6.1 502错误
可能原因及解决方案:
- 内存不足:增加SWAP或升级服务器配置
- 端口冲突:检查80/443端口是否被占用
- 服务未就绪:等待初始化完成(查看日志:docker logs -f gitlab)
6.2 邮件发送失败
测试邮件配置:
sudo docker exec -it gitlab gitlab-rails console Notify.test_email('test@example.com', 'Test', 'Test Body').deliver_now6.3 性能优化
- 增加PUMA workers:
puma['worker_processes'] = 4- 调整Sidekiq线程:
sidekiq['concurrency'] = 10- 启用缓存:
gitlab_rails['redis_cache_instance'] = 'redis://redis.example.com:6379'7. 安全加固建议
- 定期更新容器镜像
- 配置HTTPS(使用Let's Encrypt):
letsencrypt['enable'] = true letsencrypt['contact_emails'] = ['admin@example.com']- 限制Docker API访问
- 设置定期自动备份
- 启用双因素认证
通过以上步骤,您已经成功部署了一个基于Docker的企业级GitLab服务。这种部署方式不仅简化了安装过程,还便于后续的维护和升级。根据团队规模和使用场景,可以进一步调整资源配置和功能设置。