总体架构与部署方式
- 在 Linux 上,将 GitLab 与系统“无缝集成”通常包含:在服务器上部署 GitLab、用 GitLab Runner 执行 CI/CD、通过 SSH 与 HTTPS 进行代码访问、用 Webhook/API 与外部系统联动,以及按需采用 Docker/Kubernetes 实现可扩展交付。
- 部署选项与适用场景如下:
| 方式 |
适用场景 |
关键要点 |
| 原生安装(Omnibus) |
稳定生产、全功能使用 |
配置统一、运维简单,使用 gitlab-ctl 管理 |
| Docker 单机 |
快速试用、环境隔离 |
数据与配置需挂载卷,便于迁移 |
| Kubernetes + Helm |
弹性伸缩、大规模 |
Runner 以 K8s Executor 运行,按需扩缩 |
上述方式均为官方与业界常用实践,适合不同规模与自动化程度的团队。
安装与基础配置
- 准备与依赖
- 建议资源配置:至少 2 核 CPU、4GB 内存、20GB 磁盘(生产环境推荐更高)。
- 安装基础依赖(示例):
- Ubuntu/Debian:sudo apt-get update && sudo apt-get install -y curl openssh-server ca-certificates postfix
- CentOS/RHEL:sudo yum install -y curl policycoreutils-python openssh-server postfix
- 安装 GitLab(Omnibus 包)
- Ubuntu/Debian:
- curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
- sudo apt-get install -y gitlab-ce
- CentOS/RHEL:
- curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
- sudo yum install -y gitlab-ce
- 核心配置与生效
- 编辑 /etc/gitlab/gitlab.rb:设置 external_url ‘https://your-domain.com’
- 使配置生效:sudo gitlab-ctl reconfigure
- 常用运维:sudo gitlab-ctl start|stop|restart|status
- 邮件通知(SMTP,示例)
- 在 gitlab.rb 中启用并填写 SMTP 参数(地址、端口、账号、密码/授权码等),保存后执行 sudo gitlab-ctl reconfigure。
- 防火墙与端口
- 放行 22/TCP(SSH)、80/TCP(HTTP)、443/TCP(HTTPS),确保外部访问与 Git 操作正常。
身份认证与代码访问
- SSH 公钥登录(开发者到 GitLab)
- 在本地生成密钥:ssh-keygen -t ed25519 -C “you@example.com”
- 将公钥(~/.ssh/id_ed25519.pub)添加到 GitLab 用户 SSH Keys,之后即可使用 git@your-domain.com:group/project.git 进行克隆与推送。
- HTTPS 克隆与凭据
- 使用 HTTPS 克隆时,建议配置 Git 凭据存储 或 个人访问令牌(PAT),避免频繁输入账号密码。
- Runner 与 CI 执行环境
- 在 Linux 服务器上安装 GitLab Runner,注册到项目或实例,选择 Shell、Docker 或 Kubernetes 执行器,执行 .gitlab-ci.yml 中定义的作业。
CI/CD 与自动化集成
- 定义流水线
- 在项目根目录创建 .gitlab-ci.yml,通过 stages(如 build、test、deploy)与 jobs 描述构建、测试、部署流程;Runner 自动拉取代码并执行脚本。
- 典型交付示例(节选)
- stages:
- build_job:
- stage: build
- script:
- echo “Building…”
- mvn clean package
- test_job:
- stage: test
- script:
- echo “Running tests…”
- mvn test
- deploy_job:
- stage: deploy
- script:
- scp target/*.jar user@server:/app
- only:
- 外部系统集成
- 使用 Webhooks 将事件(如 push、merge request)推送到代码审查、质量平台或自建服务;通过 GitLab API 实现账号、仓库、流水线等的自动化管理。
- 容器化与 K8s
- 在 CI 中构建 Docker 镜像、推送到镜像仓库,并在 Kubernetes 中部署;大规模场景可用 Helm 部署 GitLab 组件与 Runner,获得更好的弹性与资源隔离。
安全加固与运维保障
- 安全基线
- 首次登录强制修改 root 密码,开启 2FA;仅开放 22/80/443 等必要端口;对外服务启用 HTTPS 并配置有效证书(如 Let’s Encrypt)。
- 备份与恢复
- 创建备份:sudo gitlab-rake gitlab:backup:create(默认目录 /var/opt/gitlab/backups)
- 恢复备份:将备份文件放入上述目录后执行 sudo gitlab-rake gitlab:backup:restore BACKUP=timestamp,随后 sudo gitlab-ctl reconfigure。
- 性能与可用性
- 将 /var/opt/gitlab 等数据目录挂载至 SSD;按内存与负载调整 PostgreSQL 与 Redis 参数(如 shared_buffers、maxmemory),提升克隆、流水线执行与页面响应速度。