温馨提示×

Linux下GitLab的容器化部署如何操作

小樊
42
2025-12-06 16:14:52
栏目: 智能运维

Linux下使用Docker部署GitLab的完整步骤

一 准备与规划

  • 安装并启动 Docker(验证:docker --version),可选安装 Docker Compose(验证:docker-compose --version)。
  • 规划目录与端口:建议设置环境变量 GITLAB_HOME=/srv/gitlab,并创建目录 /srv/gitlab/{config,logs,data} 用于持久化;端口建议映射为 80→80、443→443、22→22,若冲突可改为 5480→80、5443→443、5022→22
  • 资源建议:容器至少需要 4 GB 内存(生产环境建议 4–8 GB),并适当调整 shm_size(如 256 MB)以避免性能问题。
  • 邮件能力:官方镜像默认不包含 MTA,需配置 SMTP 或使用外部邮件服务。

二 部署方式

  • 方式A Docker Compose(推荐)
    1. 创建目录并进入:mkdir -p $GITLAB_HOME/{config,logs,data} && cd $GITLAB_HOME
    2. 新建 docker-compose.yml(示例为自定义端口):
      version: “3.6” services: gitlab: image: gitlab/gitlab-ce:latest container_name: gitlab restart: always hostname: gitlab.example.com environment: GITLAB_OMNIBUS_CONFIG: | external_url ‘http://gitlab.example.com:5480’ gitlab_rails[‘gitlab_shell_ssh_port’] = 5022 gitlab_rails[‘time_zone’] = ‘Asia/Shanghai’ ports:
      • “5480:80”
      • “5443:443”
      • “5022:22” volumes:
      • ./config:/etc/gitlab
      • ./logs:/var/log/gitlab
      • ./data:/var/opt/gitlab shm_size: “256m”
    3. 启动:docker-compose up -d
  • 方式B docker run(单容器) docker run -d
    –hostname gitlab.example.com
    -p 8443:443 -p 8080:80 -p 2222:22
    –name gitlab
    –restart always
    -v /srv/gitlab/config:/etc/gitlab
    -v /srv/gitlab/logs:/var/log/gitlab
    -v /srv/gitlab/data:/var/opt/gitlab
    gitlab/gitlab-ce:latest
  • 首次访问与初始密码:浏览器打开 http://服务器IP:5480(或配置的端口),使用 root 登录;初始密码位于容器内 /etc/gitlab/initial_root_password,该文件在容器启动后 24 小时自动删除,请尽快登录并修改密码。

三 关键配置

  • 外部访问地址:在容器内编辑 /etc/gitlab/gitlab.rb,设置 external_url ‘http://your_domain_or_ip:port’;如改用非标准端口,需同步设置 gitlab_rails[‘gitlab_shell_ssh_port’] 为映射的 SSH 端口(如 5022)。
  • 生效配置:执行 gitlab-ctl reconfigure,必要时 gitlab-ctl restart
  • 时区:在 gitlab.rb 中设置 gitlab_rails[‘time_zone’] = ‘Asia/Shanghai’
  • HTTPS 与证书:
    • 自签名或已有证书:将证书挂载到容器内(如 /etc/gitlab/ssl),并在 gitlab.rb 中配置
      nginx[‘ssl_certificate’] = “/etc/gitlab/ssl/your_domain.crt”
      nginx[‘ssl_certificate_key’] = “/etc/gitlab/ssl/your_domain.key”
      同时确保 external_url 使用 https://
    • Let’s Encrypt:在 gitlab.rb 中启用
      letsencrypt[‘enabled’] = true
      letsencrypt[‘contact_emails’] = [‘admin@example.com’]
      执行 reconfigure 后自动申请与续期。
  • 邮件 SMTP(示例):
    gitlab_rails[‘smtp_enable’] = true
    gitlab_rails[‘smtp_address’] = “smtp.example.com”
    gitlab_rails[‘smtp_port’] = 587
    gitlab_rails[‘smtp_user_name’] = “ci@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[‘gitlab_email_from’] = ‘gitlab@example.com’
    完成后执行 reconfigure。

四 运维与安全

  • 防火墙与云安全组:放行 80/443/22(或自定义的 5480/5443/5022)端口。
  • 备份与恢复:
    • 备份:docker exec -t gitlab gitlab-rake gitlab:backup:create(备份文件位于 /var/opt/gitlab/backups,对应宿主机 $GITLAB_HOME/data/backups
    • 恢复:docker exec -it gitlab gitlab-rake gitlab:backup:restore BACKUP=备份文件名
  • 升级:先备份,再拉取新镜像并重启(docker-compose pull && docker-compose up -d),或替换 docker run 镜像后重启。
  • 日志与排障:查看容器日志 docker-compose logs -fdocker logs -f gitlab;常见无法访问多为端口未放行或域名解析错误。
  • 安全建议:尽快修改 root 密码,按需关闭 用户注册,限制 SSH 端口暴露面,使用 HTTPS,并定期备份。

五 常见问题与提示

  • SSH 克隆地址显示端口不正确:在 gitlab.rb 设置 gitlab_rails[‘gitlab_shell_ssh_port’] 为映射的 5022,并重启;克隆时使用 ssh://git@your_domain:5022/namespace/project.git
  • 页面重定向或端口丢失:确保 external_url 包含实际端口(如 http://ip:5480),并重新 reconfigure。
  • SELinux 环境:挂载卷时添加 :Z 标签(如 /srv/gitlab/config:/etc/gitlab:Z)。
  • 资源不足导致卡顿:提升宿主机内存与 shm_size,并减少并发任务。

0