温馨提示×

GitLab在CentOS上的容器化实践

小樊
43
2025-12-23 09:08:57
栏目: 智能运维

一 环境准备与资源建议

  • 操作系统:CentOS 7/8(64 位)
  • 容器运行时:Docker CE 与(可选)Docker Compose
  • 资源基线:至少 4GB 内存,推荐 8GB+;CPU 4 核+;磁盘按仓库与镜像规模规划
  • 安装 Docker(示例):
    • sudo yum update -y
    • sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    • sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    • sudo yum install -y docker-ce docker-ce-cli containerd.io
    • sudo systemctl start docker && sudo systemctl enable docker
  • 验证:docker --version 应返回版本号

二 部署 GitLab 与内置 Container Registry

  • 目录与权限(持久化):
    • mkdir -p /home/middleware/gitlab/{config,data,logs}
  • 方式一 Docker Compose(推荐,内置 Registry)
    • 新建 docker-compose.yml: version: ‘3’ services: gitlab: image: gitlab/gitlab-ce:latest container_name: gitlab restart: unless-stopped hostname: ‘your-gitlab-domain.com’ environment: GITLAB_OMNIBUS_CONFIG: | external_url ‘http://your-gitlab-domain.com’ gitlab_rails[‘gitlab_shell_ssh_port’] = 2222 registry_external_url ‘http://your-gitlab-domain.com:5050’ ports: - ‘80:80’ - ‘443:443’ - ‘2222:22’ - ‘5050:5050’ volumes: - ‘./config:/etc/gitlab’ - ‘./logs:/var/log/gitlab’ - ‘./data:/var/opt/gitlab’
    • 启动:docker-compose up -d
  • 方式二 Docker Run(快速启动)
    • docker run -d
      –hostname 192.168.1.1
      –publish 443:443 --publish 80:80 --publish 2222:22
      –name gitlab
      –restart always
      –volume /home/middleware/gitlab/config:/etc/gitlab
      –volume /home/middleware/gitlab/logs:/var/log/gitlab
      –volume /home/middleware/gitlab/data:/var/opt/gitlab
      gitlab/gitlab-ce:latest
  • 初始化与访问
    • 首次访问 http://your-domain-or-ip,设置 root 密码
    • 查看初始密码:docker exec -it gitlab grep ‘Password:’ /etc/gitlab/initial_root_password
    • 如需使用内置 Container Registry,在 Admin Area > Settings > General 勾选 Enable,并使用端口 5050 访问

三 端口与防火墙配置

  • 避免与宿主机 SSH 冲突:将容器 22 映射为 2222:22,并在 GitLab 中设置 SSH 端口为 2222
    • 编辑:/home/middleware/gitlab/config/gitlab.rb
      • external_url ‘http://your-domain-or-ip’
      • gitlab_rails[‘gitlab_shell_ssh_port’] = 2222
    • 使配置生效:docker exec -it gitlab gitlab-ctl reconfigure && docker restart gitlab
    • 克隆示例:git clone ssh://git@your-domain-or-ip:2222/namespace/project.git
  • 防火墙放行(firewalld)
    • sudo firewall-cmd --permanent --add-service=http
    • sudo firewall-cmd --permanent --add-service=https
    • sudo firewall-cmd --permanent --add-port=2222/tcp
    • sudo firewall-cmd --reload
  • 端口规划建议
    • HTTP/HTTPS:80/443(如被占用,可改为 8080/8443 并同步 external_url)
    • Registry:建议使用 5050 并配置反向代理与证书

四 安全与访问控制

  • HTTPS 与证书
    • 生产环境优先使用 HTTPS;可用 Let’s Encrypt 或商用证书,通过 Nginx Ingress/反向代理 终止 SSL
    • Registry 同样建议启用 HTTPS,避免明文凭据传输
  • 认证与权限
    • Registry 使用 GitLab 统一身份认证;推送/拉取需有效用户或 Personal Access Token
    • 登录示例:docker login your-gitlab-domain.com:5050
  • 镜像可信
    • 建议启用 Docker Content Trust(DCT) 对镜像进行签名与验证,提升供应链安全

五 备份恢复与升级运维

  • 备份
    • 容器内创建备份:docker exec -it gitlab gitlab-backup create
    • 备份文件位于容器内 /var/opt/gitlab/backups,如挂载数据卷,通常映射在宿主机的 /home/middleware/gitlab/data/backups
  • 恢复
    • 将备份文件放入目标实例的 /var/opt/gitlab/backups
    • 停止相关服务:docker exec -it gitlab gitlab-ctl stop
    • 执行恢复:docker exec -it gitlab gitlab-backup restore BACKUP=<备份文件名>
    • 启动:docker exec -it gitlab gitlab-ctl start
  • 升级
    • 建议先备份;拉取新镜像后使用 docker-compose up -d 或重启容器完成滚动升级;升级后执行 gitlab-ctl reconfigure
  • 监控与日志
    • 利用 GitLab 自带监控或对接 Prometheus/Grafana;定期巡检容器与宿主机资源、磁盘与日志异常

0