01. GitLab 怎么装最省心?Omnibus/Docker/K8s 三种姿势

「GitLab」系列已发布: 00. GitLab 不只是代码托管:一套 DevOps 平台的 6 大核心能力 | 01. GitLab 怎么装最省心?Omnibus/Docker/K8s 三种姿势(本文)

Omnibus 一键包、Docker 容器、Helm Chart 上 K8s——三种主流部署方式各有取舍。本文对比优劣,教你按团队规模选对安装姿势。

一、Omnibus 安装(官方推荐)

1.1 系统依赖准备


# Ubuntu / Debian
sudo apt update
sudo apt install -y curl openssh-server ca-certificates tzdata perl

# Postfix 邮件通知(可选,也能用外部 SMTP)
sudo apt install -y postfix

# 配置界面选 "Internet Site",填域名

1.2 添加官方仓库并安装


# 添加 EE 仓库(EE 包含 CE 全部功能,试用期免费)
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash

# 安装
sudo EXTERNAL_URL="https://gitlab.example.com" apt install -y gitlab-ee

# 只要社区版的话:


# curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash


# sudo EXTERNAL_URL="https://gitlab.example.com" apt install -y gitlab-ce

1.3 获取初始密码并登录


# 密码存在这个文件里(24 小时内有效)
sudo cat /etc/gitlab/initial_root_password

# Password: abc123def456...


# 浏览器打开 https://gitlab.example.com


# 用户名:root


# 密码:上面拿到的

1.4 RHEL 9 / CentOS Stream 9 安装


# RHEL 9 / CentOS Stream 9
sudo dnf install -y curl policycoreutils openssh-server openssh-clients perl

# 启用 Postfix
sudo systemctl enable postfix --now

# 加仓库安装
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
sudo EXTERNAL_URL="https://gitlab.example.com" dnf install -y gitlab-ee

1.5 常用维护命令


# 重新配置(改了 gitlab.rb 后必须跑)
sudo gitlab-ctl reconfigure

# 看所有服务状态
sudo gitlab-ctl status

# 重启单个服务
sudo gitlab-ctl restart nginx
sudo gitlab-ctl restart puma

# 重启全部
sudo gitlab-ctl restart

# 停止
sudo gitlab-ctl stop

# 看日志
sudo gitlab-ctl tail nginx
sudo gitlab-ctl tail puma
sudo gitlab-ctl tail postgresql

# 备份
sudo gitlab-backup create

# 升级最新版
sudo apt update && sudo apt install gitlab-ee

二、Docker 安装

2.1 单容器启动


# 建数据持久化目录
export GITLAB_HOME=/srv/gitlab
mkdir -p $GITLAB_HOME/{config,logs,data}

# 启动
sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  --shm-size 256m \
  gitlab/gitlab-ee:latest

2.2 docker-compose 部署


# docker-compose.yml
version: '3.8'
services:
  gitlab:
    image: gitlab/gitlab-ee:17.6.0-ee.0
    container_name: gitlab
    restart: always
    hostname: 'gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab.example.com'
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
    volumes:
      - '/srv/gitlab/config:/etc/gitlab'
      - '/srv/gitlab/logs:/var/log/gitlab'
      - '/srv/gitlab/data:/var/opt/gitlab'
    shm_size: '256m'
docker compose up -d
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

三、Kubernetes Helm Chart 部署

3.1 添加 Helm 仓库并安装


# 加 Helm 仓库
helm repo add gitlab https://charts.gitlab.io/
helm repo update

# 建命名空间
kubectl create namespace gitlab

# 写 values.yaml
cat > gitlab-values.yaml << 'EOF'
global:
  hosts:
    domain: example.com
    externalIP: ""
  ingress:
    configureCertmanager: true
    class: nginx
    tls:
      enabled: true
  initialRootPassword:
    secret: gitlab-root-secret
  certmanager-issuer:
    email: admin@example.com
gitlab:
  webservice:
    minReplicas: 2
    maxReplicas: 5
  sidekiq:
    minReplicas: 1
    maxReplicas: 2
  registry:
    enabled: true
  minio:
    enabled: true
  nginx-ingress:
    enabled: false
EOF

# 安装
helm install gitlab gitlab/gitlab \
  --namespace gitlab \
  --timeout 600s \
  --values gitlab-values.yaml

# 拿 root 密码
kubectl get secret gitlab-gitlab-initial-root-password -n gitlab \
  -o jsonpath="{.data.password}" | base64 --decode

3.2 查看部署状态

kubectl get pods -n gitlab -w
kubectl logs -n gitlab deployment/gitlab-webservice-default

四、SMTP 邮件配置

4.1 修改 root 密码


# Omnibus:进 Rails 控制台
sudo gitlab-rails console
user = User.find_by_username('root')
user.password = '新的强密码'
user.password_confirmation = '新的强密码'
user.save!

4.2 配置 SMTP

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.example.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "gitlab@example.com"
gitlab_rails['smtp_password'] = "your_password"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['gitlab_email_from'] = 'gitlab@example.com'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@example.com'
sudo gitlab-ctl reconfigure

# 测试发邮件
sudo gitlab-rails console

# Notify.test_email('admin@example.com', 'Test Subject', 'Test Body').deliver_now

五、常见问题排查

5.1 Puma 启动失败


# 检查 Puma
sudo gitlab-ctl status puma

# 持续失败看日志
sudo gitlab-ctl tail puma

# 最常见:内存不够
free -h

# 可用内存不足 4 GB → 加内存或调小 puma worker

六、文章引用

📌 本文首发于微信公众号 【运维知识点滴】——专注运维实战干货,微信搜索“运维知识点滴”或扫下方二维码关注,更新不迷路。
📎 微信原文:01. GitLab 怎么装最省心?Omnibus/Docker/K8s 三种姿势

微信公众号【运维知识点滴】 微信小程序【A5单据合并&大试卷拆分转A4打印】
运维实战干货 · 关注追更 Word 转 PDF · 试卷/发票打印神器 · 免费
运维实战干货 · 关注追更 Word 转 PDF · 试卷/发票打印神器 · 免费

💡 小程序【A5单据合并&大试卷拆分转A4打印】是干嘛的? 一个 Word 转 PDF 的打印神器,专治“文档版式和打印机对不上”:

  • A3 试卷打不出来? 学校发的电子版试卷多是 A3,家用打印机只吃 A4——上传 Word 一键转换:可缩到一页 A4(页数不变),也可对半拆成两张 A4(1:1 原大、字更清晰),两种模式自选;
  • 版式不乱:真实渲染引擎原样转换、绝不重排内容,转出的 PDF 和原 Word 排版一致,公式/表格/图片不跑版;
  • 两张 A5 单据拼一张 A4:出租车票、火车票等报销凭证拼版后,一次打印、整齐粘贴;
  • 隐私省心:无需注册,转换结果留存 5 天、最多下载 5 次即自动删除,不留任何历史记录;
  • 微信扫码即用,免费、免安装,支持 doc / docx(≤50MB)。

上一篇:00. GitLab 不只是代码托管:一套 DevOps 平台的 6 大核心能力