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:9080Web访问端口(HTTP) 如配置域名默认80端口 -p 9980:80
-p 9922:22SSH克隆端口

数据卷挂载

宿主机路径容器路径作用
/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

系统初始化

  1. 首次访问

    • 浏览器打开 http://192.168.254.130:9980
    • 设置root账户密码(至少8位)
  2. 密码重置(可选)

    docker exec -it gitlab gitlab-rails console -e production
    user = User.find_by(username: 'root')
    user.password = 'new_password'
    user.save!

生产环境建议

1. 资源要求

资源类型最低要求推荐配置
CPU2核4核+
内存4GB8GB+
存储50GB100GB+(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"

基础使用指南

  1. 创建项目组

    • 顶部菜单 → Groups → New group
    • 设置组名称(如development
  2. 创建项目

    • 在组内 → New project
    • 选择"Create blank project"
  3. SSH克隆

    git clone ssh://git@192.168.254.130:9922/group-name/project-name.git
  4. HTTP克隆

    git clone http://192.168.254.130:9980/group-name/project-name.git

此部署方式:

  • 完整的企业级Git代码托管服务
  • 可视化的代码管理平台
  • 完善的用户权限系统
  • 持续集成支持(需配置GitLab Runner)
提示:定期执行gitlab-ctl reconfigure可保持配置最新,建议每月检查官方安全公告。

添加新评论