一 环境准备与资源建议
- 操作系统: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;定期巡检容器与宿主机资源、磁盘与日志异常