1. CentOS 7.9 环境下 GitLab-CE 部署全指南
在企业内部搭建代码托管平台时,GitLab 无疑是最受欢迎的选择之一。本文将基于 CentOS 7.9 系统,详细讲解 GitLab 社区版的完整部署流程,特别针对需要通过代理访问外网的特殊环境,以及项目迁移过程中可能遇到的各种实际问题。
2. 环境准备与基础配置
2.1 系统要求检查
在开始安装前,建议先确认系统资源是否满足最低要求:
- 至少 4GB 内存(实测 2GB 内存会导致运行缓慢)
- 2 核 CPU 及以上
- 10GB 以上磁盘空间(根据项目规模调整)
- 已安装并启用 EPEL 仓库
可以通过以下命令检查系统资源:
bash复制free -h
lscpu
df -h
2.2 使用国内镜像源加速安装
对于国内用户,推荐使用清华大学的镜像源来加速下载过程:
bash复制# 添加 GitLab CE 仓库
curl -sS https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce.repo | sudo tee /etc/yum.repos.d/gitlab-ce.repo
# 更新 yum 缓存
sudo yum makecache
注意:如果企业内网有自建的 yum 仓库,也可以将 GitLab 仓库同步到内网,进一步提高安装速度。
3. GitLab 安装与基础配置
3.1 执行安装命令
安装 GitLab 社区版非常简单,只需一条命令:
bash复制sudo EXTERNAL_URL="http://192.168.8.1" yum install -y gitlab-ce
这里 EXTERNAL_URL 指定了 GitLab 的访问地址,请根据实际网络环境修改 IP 地址或域名。
3.2 代理环境特殊配置
在企业内网环境中,通常需要通过代理服务器访问外网。GitLab 的多个组件都需要单独配置代理设置:
ruby复制# /etc/gitlab/gitlab.rb 关键配置
gitlab_rails['env'] = {
'http_proxy' => 'http://192.168.60.246:3128',
'https_proxy' => 'http://192.168.60.246:3128',
'no_proxy' => 'localhost,127.0.0.1,192.168.60.28,192.168.8.1'
}
gitaly['env'] = {
'http_proxy' => 'http://192.168.60.246:3128',
'https_proxy' => 'http://192.168.60.246:3128',
'no_proxy' => 'localhost,127.0.0.1,192.168.60.28,192.168.8.1'
}
配置完成后,执行以下命令使配置生效:
bash复制sudo gitlab-ctl reconfigure
重要提示:
no_proxy列表中必须包含本机 IP 地址,否则 GitLab 内部组件间的通信可能会出现问题。
4. 服务管理与初始访问
4.1 服务控制命令
GitLab 提供了一套完整的管理命令:
bash复制# 启动所有服务
sudo gitlab-ctl start
# 停止所有服务
sudo gitlab-ctl stop
# 重启所有服务
sudo gitlab-ctl restart
# 查看服务状态
sudo gitlab-ctl status
4.2 首次登录与管理员设置
安装完成后,通过浏览器访问配置的 EXTERNAL_URL(本例中为 http://192.168.8.1),使用以下凭证登录:
- 用户名:root
- 初始密码文件:
/etc/gitlab/initial_root_password
注意:初始密码文件仅在安装后 24 小时内有效。建议首次登录后立即修改密码,并创建新的管理员账户。
5. 项目迁移实战指南
5.1 启用导入功能
GitLab 默认关闭了项目导入功能,需要管理员手动开启:
- 以管理员身份登录
- 进入 Admin Area → Settings → General
- 找到 "Visibility and access controls" 部分
- 在 "Import sources" 中至少勾选:
- GitLab export
- Git repository by URL
5.2 通过 URL 导入项目
使用以下格式导入项目,其中 TOKEN 可以是 Personal Access Token 或 Group Access Token:
code复制https://oauth2:<TOKEN>@gitlab.com/nbc0/biorepository.git
关键技巧:如果 token 中包含特殊字符(如 @、:、/ 等),必须进行 URL 编码。例如 @ 需要编码为 %40。
5.3 常见导入问题排查
问题1:克隆失败(exit status 128)
解决方法:
- 使用 git 用户直接测试克隆:
bash复制sudo -u git -H bash -lc 'rm -rf /tmp/biorepository_test && \
git clone --verbose https://oauth2:<TOKEN>@gitlab.com/nbc0/biorepository.git /tmp/biorepository_test'
- 检查 GitLab 日志:
bash复制sudo grep -R "Error importing repository" -n /var/log/gitlab/ | tail -n 50
sudo grep -R "exit status 128" -n /var/log/gitlab/ | tail -n 50
问题2:代理配置未生效
如果发现 gitaly 组件没有正确应用代理设置,可以尝试:
- 确认
/etc/gitlab/gitlab.rb中的代理配置 - 重启 gitaly 服务:
bash复制sudo gitlab-ctl restart gitaly
6. GitLab Runner 代理配置
在需要通过代理访问外网的环境中,GitLab Runner 也需要相应配置:
toml复制# /etc/gitlab-runner/config.toml
environment = [
"http_proxy=http://192.168.60.246:3128",
"https_proxy=http://192.168.60.246:3128",
"no_proxy=localhost,127.0.0.1,10.49.19.138"
]
配置完成后重启 Runner:
bash复制sudo gitlab-runner restart
7. SSH 协议问题解决方案
7.1 检查 git 用户状态
GitLab 使用系统 git 用户处理 SSH 操作,首先确认该用户未被锁定:
bash复制sudo passwd -S git
如果显示 locked,需要解锁:
bash复制sudo passwd -u git
7.2 配置 SSH 只允许公钥认证
编辑 /etc/ssh/sshd_config,添加或修改以下内容:
code复制Match User git
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
然后重新加载 SSH 服务:
bash复制sudo systemctl reload sshd
8. 运维经验与注意事项
- 备份策略:定期备份 GitLab 数据,包括配置文件和应用数据:
bash复制# 备份配置
sudo gitlab-ctl backup-etc
# 备份应用数据
sudo gitlab-backup create
-
性能优化:对于大型实例,建议调整以下参数:
- 增加 Unicorn worker 数量
- 调整 Sidekiq 并发数
- 优化 PostgreSQL 配置
-
监控方案:集成 Prometheus 和 Grafana 监控 GitLab 运行状态
-
升级策略:
- 先在小规模测试环境验证升级
- 阅读官方升级文档的 breaking changes
- 确保有完整的备份
-
存储管理:定期检查仓库存储使用情况,清理无用的大文件
在实际运维中,我发现 GitLab 的日志系统非常完善,遇到问题时首先应该检查相关日志:
bash复制# 查看所有组件日志
sudo gitlab-ctl tail
# 查看特定组件日志(如 rails)
sudo gitlab-ctl tail gitlab-rails
对于高可用需求,可以考虑部署 GitLab 的高可用架构,但这需要额外的资源规划和配置工作。