GitLab.com ฟรีสำหรับทีมเล็ก แต่หากต้องการ ควบคุม code repository ที่ sensitive ทำงาน offline หรือหลีกเลี่ยงค่าใช้จ่าย GitLab EE การ Self-Host GitLab Community Edition บน VPS ของตัวเองคือทางเลือกที่ดี — ฟีเจอร์ครบตั้งแต่ CI/CD จน Container Registry โดยไม่มีค่าใช้จ่ายรายเดือน
Requirements ก่อนติดตั้ง
- VPS RAM 8GB+ (ขั้นต่ำ 4GB แต่จะช้า)
- CPU 2 Core+
- Disk 50GB+ (Repository จะโตเรื่อยๆ)
- Ubuntu 22.04 LTS
- Domain + DNS A Record ชี้มาที่ VPS
ข้อควรระวัง: 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