Docker之Gitlab部署
Docker之部署GitLab:企业级代码托管平台
核心部署命令
docker run -itd \
-p 9980:80 \
-p 9922:22 \
-v /home/gitlab/etc:/etc/gitlab \
-v /home/gitlab/log:/var/log/gitlab \
-v /home/gitlab/opt:/var/opt/gitlab \
--restart always \
--privileged=true \
--name gitlab \
gitlab/gitlab-ce
参数详解
端口映射
参数 | 说明 |
---|---|
-p 9980:9080 | Web访问端口(HTTP) 如配置域名默认80端口 -p 9980:80 |
-p 9922:22 | SSH克隆端口 |
数据卷挂载
宿主机路径 | 容器路径 | 作用 |
---|---|---|
/home/gitlab/etc | /etc/gitlab | 配置文件目录 |
/home/gitlab/log | /var/log/gitlab | 日志文件目录 |
/home/gitlab/opt | /var/opt/gitlab | 应用数据目录 |
关键配置步骤
1. 基础配置修改
docker exec -it gitlab vi /etc/gitlab/gitlab.rb
# 必须修改的核心配置
external_url 'http://192.168.254.130:9980' # 带端口的外部访问地址 如配置域名:http://xxx.xxx.com不带端口,则默认端口80
gitlab_rails['gitlab_ssh_host'] = '192.168.254.130' # 如配置域名:xxx.xxx.com
gitlab_rails['gitlab_shell_ssh_port'] = 9922
# 推荐配置(根据服务器性能调整)
unicorn['worker_timeout'] = 60
unicorn['worker_processes'] = 2 # CPU核心数
sidekiq['concurrency'] = 5 # 内存小于4G建议调低
2. 修正HTTP配置
docker exec -it gitlab vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
gitlab:
host: 192.168.254.130 # 如配置域名:http://xxx.xxx.com
port: 9980 # 必须与external_url端口一致 如配置域名:http://xxx.xxx.com 端口可改为80
https: false
3. 应用配置
docker exec -it gitlab gitlab-ctl reconfigure
docker exec -it gitlab gitlab-ctl restart
系统初始化
首次访问:
- 浏览器打开
http://192.168.254.130:9980
- 设置root账户密码(至少8位)
- 浏览器打开
密码重置(可选):
docker exec -it gitlab gitlab-rails console -e production
user = User.find_by(username: 'root') user.password = 'new_password' user.save!
生产环境建议
1. 资源要求
资源类型 | 最低要求 | 推荐配置 |
---|---|---|
CPU | 2核 | 4核+ |
内存 | 4GB | 8GB+ |
存储 | 50GB | 100GB+(SSD) |
2. 性能优化
# 在gitlab.rb中添加
postgresql['shared_buffers'] = "256MB" # 内存的1/4
redis['max_memory'] = "512MB" # 内存的1/8
3. 备份方案
# 手动备份
docker exec -it gitlab gitlab-rake gitlab:backup:create
# 自动备份(添加crontab)
0 2 * * * docker exec gitlab gitlab-rake gitlab:backup:create CRON=1
常见问题解决
Q:启动后出现502错误?
# 检查资源是否充足
docker exec -it gitlab gitlab-ctl tail
# 增加swap空间(临时方案)
dd if=/dev/zero of=/swapfile bs=1G count=4
mkswap /swapfile && swapon /swapfile
Q:如何迁移数据?
# 1. 备份数据
docker exec -it gitlab gitlab-rake gitlab:backup:create
# 2. 将备份文件(/var/opt/gitlab/backups)和配置目录复制到新服务器
# 3. 在新服务器执行相同部署命令
# 4. 恢复备份
docker exec -it gitlab gitlab-rake gitlab:backup:restore BACKUP=备份文件名
Q:邮件服务配置?
# 在gitlab.rb中配置
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'] = "password"
基础使用指南
创建项目组:
- 顶部菜单 → Groups → New group
- 设置组名称(如
development
)
创建项目:
- 在组内 → New project
- 选择"Create blank project"
SSH克隆:
git clone ssh://git@192.168.254.130:9922/group-name/project-name.git
HTTP克隆:
git clone http://192.168.254.130:9980/group-name/project-name.git
此部署方式:
- 完整的企业级Git代码托管服务
- 可视化的代码管理平台
- 完善的用户权限系统
- 持续集成支持(需配置GitLab Runner)
提示:定期执行gitlab-ctl reconfigure
可保持配置最新,建议每月检查官方安全公告。