搭建GitLab代码仓库
约 790 字大约 3 分钟
2026-08-29
本文用 Docker 方式在服务器上搭建 GitLab 社区版(GitLab CE)私有代码仓库——代码完全自持,适合团队内部协作与 CI/CD。
配置建议
- 已安装 Docker,参见部署Docker环境。
- 内存 4GB 起(GitLab 较吃内存,2GB 会频繁卡顿);磁盘预留 20GB 以上。
- 需要放行端口:80 / 443(网页)、2222(SSH 拉取代码)。
启动 GitLab 容器
mkdir -p /data/gitlab
docker run -d \
--hostname gitlab.example.com \
-p 80:80 -p 443:443 -p 2222:22 \
-v /data/gitlab/config:/etc/gitlab \
-v /data/gitlab/logs:/var/log/gitlab \
-v /data/gitlab/data:/var/opt/gitlab \
--name gitlab --restart always \
gitlab/gitlab-ce:latest数据、配置、日志全部落在宿主机 /data/gitlab/,升级或重建容器数据不丢。
初始化需要几分钟
首次启动要初始化数据库与服务,docker ps 显示健康检查未通过、网页短暂 502 都属正常,执行 docker logs -f gitlab 看到 gitlab Reconfigured! 后再等一两分钟即可访问。
获取初始密码并登录
浏览器访问 http://<服务器IP>,用户名为 root,初始密码在容器内:
docker exec -it gitlab cat /etc/gitlab/initial_root_password该文件 24 小时后自动删除
登录后立即修改 root 密码(右上角头像 → Preferences → Password)。
常用初始化设置
- 界面换中文:Preferences → Language → 简体中文 → 保存刷新。
- 关闭公开注册:管理区域(Admin)→ Settings → General → Sign-up restrictions → 取消勾选 Sign-up enabled,防止陌生人注册。
- 建项目:New project → 填名称 → 内部/私有可见性。
拉取与推送代码
网页复制仓库地址时注意协议:
- HTTP:
http://<服务器IP>/<分组>/<项目>.git,首次推送用 root 账号(建议在 Preferences → Access Tokens 建专用令牌代替密码)。 - SSH:容器内 SSH 端口被映射为宿主机 2222,地址形如
ssh://git@<服务器IP>:2222/<分组>/<项目>.git;本地生成密钥并把公钥粘到 Preferences → SSH Keys,参见使用SSH密钥对实现免密登录。
数据备份与恢复
# 手动备份(生成到宿主机 /data/gitlab/data/backups/)
docker exec -t gitlab gitlab-backup create
# 恢复(先停写入服务)
docker exec -t gitlab gitlab-ctl stop puma
docker exec -t gitlab gitlab-ctl stop sidekiq
docker exec -t gitlab gitlab-backup restore BACKUP=<备份文件名不带_timestamp后缀>配合 Cron 定时任务每天凌晨自动执行备份命令即可。
常见问题
网页一直 502?
绝大多数是内存不足:free -h 确认后加大内存,或先配 swap 兜底(参见配置Swap与虚拟内存)再观察;单核低配机器初始化也可能超过 10 分钟。
端口被占用启动失败?
服务器上已有 Nginx 等服务占用 80 时,把映射改为 -p 8080:80 -p 8443:443,用 IP:8080 访问;或让 GitLab 走已有 Nginx 反代(参见Nginx服务配置多站点)。
root 密码丢了?
docker exec -it gitlab gitlab-rake "gitlab:password:reset[root]"按提示输入两次新密码即生效。
忘记备份了,容器还能重建吗?
数据卷在宿主机 /data/gitlab/,只要这个目录还在,删掉容器重新 docker run(同样的挂载路径)即可完整恢复。
