使用 Docker 搭建 GitLab 完整指南
GitLab 是一个功能强大的 DevOps 平台,使用 Docker 可以快速部署。以下是详细步骤:
1. 准备工作
系统要求
- 至少 4GB RAM (推荐 8GB+)
- 至少 4核 CPU
- 100GB+ 磁盘空间
- Docker 20.10+
- Docker Compose 2.0+
2. 使用 Docker Compose 部署
创建 docker-compose.yml 文件:
version: '3.6'
services:
gitlab:
image: gitlab/gitlab-ee:latest # 社区版使用 gitlab/gitlab-ce
container_name: gitlab
hostname: gitlab.example.com # 替换为你的域名
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab.example.com' # 外部访问URL
# 邮件配置
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'gitlab@example.com'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.example.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "gitlab@example.com"
gitlab_rails['smtp_password'] = "yourpassword"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
# 其他配置
nginx['redirect_http_to_https'] = true
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['admin@example.com']
ports:
- "80:80"
- "443:443"
- "22:22" # SSH端口
volumes:
- ./gitlab/config:/etc/gitlab
- ./gitlab/logs:/var/log/gitlab
- ./gitlab/data:/var/opt/gitlab
restart: always
networks:
- gitlab_net
shm_size: '256m'
networks:
gitlab_net:
driver: bridge
3. 启动 GitLab
# 创建所需目录
mkdir -p gitlab/{config,logs,data}
# 启动服务
docker-compose up -d
首次启动需要几分钟时间初始化。
4. 访问与配置
获取初始密码
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
访问 https://your-domain.com 使用用户名 root 和上面获取的密码登录。
重要配置
-
SSH克隆配置:
- 确保
gitlab_rails['gitlab_shell_ssh_port'] = 22与映射端口一致
- 确保
-
备份配置:
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" gitlab_rails['backup_keep_time'] = 604800 # 保留7天 -
性能调优:
unicorn['worker_timeout'] = 60 sidekiq['concurrency'] = 10
修改配置后需要重新加载:
docker exec -it gitlab gitlab-ctl reconfigure
docker exec -it gitlab gitlab-ctl restart
5. 日常维护
备份
docker exec -it gitlab gitlab-backup create
恢复备份
# 先停止相关服务
docker exec -it gitlab gitlab-ctl stop unicorn
docker exec -it gitlab gitlab-ctl stop sidekiq
# 恢复备份 (备份文件名如 1652353536_2022_05_12_14.0.3_gitlab_backup.tar)
docker exec -it gitlab gitlab-backup restore BACKUP=1652353536_2022_05_12_14.0.3
# 重启服务
docker exec -it gitlab gitlab-ctl restart
升级版本
# 停止当前容器
docker-compose down
# 拉取新镜像
docker-compose pull
# 重新启动
docker-compose up -d
# 在容器内执行升级
docker exec -it gitlab gitlab-ctl reconfigure
docker exec -it gitlab gitlab-ctl restart
6. 常见问题解决
性能问题
-
增加资源:
# 在docker-compose.yml中添加 deploy: resources: limits: cpus: '4' memory: 8G -
调整Sidekiq:
sidekiq['min_concurrency'] = 2 sidekiq['max_concurrency'] = 8
邮件配置测试
docker exec -it gitlab gitlab-rails console
> Notify.test_email('test@example.com', 'Test', 'Test Body').deliver_now
端口冲突
如果端口冲突,可以修改为:
ports:
- "8080:80"
- "8443:443"
- "2222:22"
然后配置:
gitlab_rails['gitlab_shell_ssh_port'] = 2222
7. 安全建议
- 定期更新:每月检查并更新GitLab镜像
- 启用HTTPS:配置有效的SSL证书
- 备份策略:每日备份并测试恢复
- 监控:设置健康检查
healthcheck: test: ["CMD", "curl", "-f", "http://localhost/-/health"] interval: 1m timeout: 10s retries: 3
8. 扩展功能
集成Runner
services:
gitlab-runner:
image: gitlab/gitlab-runner:latest
container_name: gitlab-runner
restart: always
depends_on:
- gitlab
volumes:
- ./gitlab-runner/config:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
networks:
- gitlab_net
注册Runner:
docker exec -it gitlab-runner gitlab-runner register
--url "https://gitlab.example.com"
--registration-token "PROJECT_REGISTRATION_TOKEN"
--executor "docker"
--description "docker-runner"
--docker-image "alpine:latest"
这样你就拥有了一个完整的Docker化GitLab环境,包含持续集成能力。
No Comments