gitlab部署需满足内存≥8gib、cpu≥4vcpu、开放80/443/22端口,external_url等关键配置修改后必须执行gitlab-ctl reconfigure生效,首次登录须立即改密、禁用注册、上传ssh密钥。

git 本身只是版本控制工具,不能“搭建平台”;真正能搭出代码管理平台的是 GitLab —— 它是基于 git 的完整 Web 服务,含仓库托管、权限、CI/CD、MR、Issue 等。直接装 git 不会得到 GitLab。
GitLab 部署前必须确认的硬件和网络条件
很多安装卡在 gitlab-ctl reconfigure 阶段,根本原因不是命令错,而是环境不达标:
- 内存必须 ≥ 8 GiB:低于此值,
gitlab-ctl reconfigure会长时间卡住或失败,日志里反复出现omnibus_gitconfig[git] (dynamically defined)类似无意义循环 - CPU 必须 ≥ 4 vCPU:单核或 2 核机器跑 GitLab 会出现响应延迟、Web 页面加载超时、CI job 被挂起
- 安全组必须放行
80(HTTP)、443(HTTPS)、22(SSH)端口:缺22就无法用git clone git@gitlab.example.com:group/project.git - 域名或 IP 必须可公网访问(或至少局域网内可达):配置
external_url后若无法从浏览器打开,先curl -I http://your-ip看是否返回200
/etc/gitlab/gitlab.rb 中最关键的 3 个配置项
改完必须执行 gitlab-ctl reconfigure,否则全无效。别只改注释行:
-
external_url "http://10.6.2.160":填你实际能访问的 IP 或域名,不要带路径,结尾不加/;如果用 HTTPS,这里必须写https://并配好证书 -
gitlab_rails['gitlab_shell_ssh_port'] = 22:确保 SSH 端口和宿主机一致;若宿主机 SSH 改过端口(比如 2222),这里也得同步改,否则git push失败报Connection refused -
unicorn['port'] = 8080(可选但推荐):避免和宿主机其他服务(如 Nginx)冲突;配合反向代理时更可控
改完检查:sudo gitlab-ctl reconfigure && sudo gitlab-ctl restart,再等 1–2 分钟,用 gitlab-ctl status 确认所有服务为 run 状态。
首次登录后立即要做的 3 件事
默认账号 root,密码 123456,但登录后不操作就会埋雷:
- 立刻修改密码:进
Profile Settings → Password,输旧密码123456,设强密码;否则后续所有 API 调用、CI token、SSH key 绑定都可能因密码弱被拦截 - 关闭用户自注册:
Admin Area → Settings → General → Sign-up restrictions → Disable sign-up;否则外网暴露时,任何人都能注册并新建项目 - 生成并上传 SSH key:
Settings → SSH Keys,粘贴本地~/.ssh/id_rsa.pub内容;没这一步,git clone和git push只能走 HTTPS(每次输密码)
常见 push 拒绝错误及对应修复点
执行 git push origin main 报错,别急着重装,先看错误关键词:
-
Permission denied (publickey):本地没配 SSH key,或 GitLab 用户没上传,或git remote add用了 HTTPS 地址(应为git@gitlab.example.com:group/project.git) -
remote: GitLab: The project you were looking for could not be found.:远程 URL 里的 group 或 project 名写错,注意大小写和 URL 编码(空格变%20) -
Updates were rejected because the remote contains work that you do not have locally.:本地分支没关联上游,运行git branch --set-upstream-to=origin/main main再 push -
fatal: unable to access 'https://...': Could not resolve host:DNS 问题,不是 GitLab 问题;换curl https://your-gitlab-domain测试连通性
GitLab 不是黑盒,每个拒绝都有明确归属——是网络、权限、URL、还是本地 git 配置。盯住错误第一行,比重装快十倍。











