ติดตั้ง GitLab CE บน VPS Ubuntu Self-Hosted Git Server

GitLab.com ฟรีสำหรับทีมเล็ก แต่หากต้องการ ควบคุม code repository ที่ sensitive ทำงาน offline หรือหลีกเลี่ยงค่าใช้จ่าย GitLab EE การ Self-Host GitLab Community Edition บน VPS ของตัวเองคือทางเลือกที่ดี — ฟีเจอร์ครบตั้งแต่ CI/CD จน Container Registry โดยไม่มีค่าใช้จ่ายรายเดือน

Requirements ก่อนติดตั้ง

ข้อควรระวัง: GitLab ใช้ RAM ค่อนข้างมาก ถ้าใช้ VPS 4GB ควรปิด Elasticsearch และ Grafana ใน config เพื่อประหยัด RAM

ขั้นที่ 1 — ติดตั้ง Dependencies

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl openssh-server ca-certificates tzdata perl

ขั้นที่ 2 — เพิ่ม GitLab Repository

# ดาวน์โหลด install script อย่างเป็นทางการ
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

ขั้นที่ 3 — ติดตั้ง GitLab CE พร้อม URL

# แทนที่ gitlab.example.com ด้วย domain ของคุณ
sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ce

การติดตั้งใช้เวลา 10-15 นาที GitLab จะออก SSL จาก Let's Encrypt อัตโนมัติเมื่อใส่ HTTPS URL

ขั้นที่ 4 — รับ Root Password ครั้งแรก

# Password ถูก generate ไว้ที่นี่ (ลบอัตโนมัติใน 24ชม.)
sudo cat /etc/gitlab/initial_root_password

Login ด้วย username root และ password ที่ได้ จากนั้นเปลี่ยน password ทันที

ขั้นที่ 5 — ตั้งค่า GitLab

sudo nano /etc/gitlab/gitlab.rb

Setting สำคัญที่ควรปรับ:

# URL หลัก
external_url 'https://gitlab.example.com'

# Email (ตั้ง SMTP)
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.gmail.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "[email protected]"
gitlab_rails['smtp_password'] = "your-app-password"
gitlab_rails['smtp_domain'] = "gmail.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['gitlab_email_from'] = '[email protected]'

# ปิดการ Sign-up (ถ้าต้องการใช้แบบ private)
gitlab_rails['gitlab_signup_enabled'] = false

# Backup retention
gitlab_rails['backup_keep_time'] = 604800  # 7 วัน
# Apply config
sudo gitlab-ctl reconfigure

ขั้นที่ 6 — ติดตั้ง GitLab Runner

GitLab Runner ทำงาน CI/CD pipeline สามารถติดตั้งบน VPS เดิมหรือ VPS แยก

# เพิ่ม GitLab Runner repository
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash

# ติดตั้ง Runner
sudo apt-get install gitlab-runner -y

Register Runner กับ GitLab

# ดู Registration Token ใน GitLab UI:
# Admin Area → CI/CD → Runners → New instance runner

sudo gitlab-runner register \
  --url https://gitlab.example.com \
  --token YOUR_REGISTRATION_TOKEN \
  --executor shell \
  --description "my-runner"

หากใช้ Docker executor แทน Shell:

sudo gitlab-runner register \
  --url https://gitlab.example.com \
  --token YOUR_TOKEN \
  --executor docker \
  --docker-image alpine:latest \
  --description "docker-runner"

ตัวอย่าง .gitlab-ci.yml

stages:
  - build
  - test
  - deploy

build:
  stage: build
  script:
    - echo "Building..."
    - npm install
    - npm run build
  artifacts:
    paths:
      - dist/

test:
  stage: test
  script:
    - npm test

deploy:
  stage: deploy
  script:
    - rsync -avz dist/ user@server:/var/www/app/
  only:
    - main

Backup และ Restore

# สร้าง Backup
sudo gitlab-backup create

# ดู backup files
ls /var/opt/gitlab/backups/

# ตั้ง cron backup อัตโนมัติทุกวันตี 2
(crontab -l; echo "0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1") | crontab -

Backup สำคัญมาก: ต้อง backup ทั้ง /var/opt/gitlab/backups/ และ /etc/gitlab/gitlab-secrets.json ไฟล์ secrets ไม่รวมใน backup archive ถ้าหายจะ decrypt ข้อมูลไม่ได้

Maintenance Commands

# ตรวจสอบ status ทุก service
sudo gitlab-ctl status

# Restart GitLab
sudo gitlab-ctl restart

# ดู logs
sudo gitlab-ctl tail

# ดู log เฉพาะ service
sudo gitlab-ctl tail nginx
sudo gitlab-ctl tail postgresql

# Check memory usage
sudo gitlab-ctl status | grep memory

ประหยัด RAM บน VPS 4-6GB

ปิด service ที่ไม่ใช้ใน /etc/gitlab/gitlab.rb:

# ปิด Prometheus monitoring
prometheus_monitoring['enable'] = false

# ปิด Grafana
grafana['enable'] = false

# ปิด AlertManager
alertmanager['enable'] = false

# ลด worker จาก default
puma['worker_processes'] = 2
sidekiq['concurrency'] = 5
sudo gitlab-ctl reconfigure && sudo gitlab-ctl restart

ต้องการ VPS สำหรับ GitLab Self-Hosted?

AsiaGB มี VPS RAM 8GB+ ที่เหมาะสำหรับ GitLab CE เริ่มต้น 500 บาท/เดือน Full Root Access พร้อมใช้

ดู VPS Plans