ติดตั้ง GitLab CE บน Cloud VPS ด้วย Docker
GitLab CE รวมทั้งที่เก็บโค้ด ระบบตรวจสอบโค้ด ระบบติดตามงาน และ CI/CD ไว้ในตัวเดียว องค์กรที่มีข้อกำหนดว่าซอร์สโค้ดต้องไม่อยู่บนบริการภายนอก หรือต้องการรัน CI โดยไม่จำกัดนาที จะได้ประโยชน์ชัดเจน
สิ่งที่ต้องรู้ก่อนคือ GitLab กินทรัพยากรมากกว่าที่หลายคนคาด ขั้นต่ำที่ใช้งานได้จริงคือ 4 คอร์และ RAM 8 GB สำหรับทีมขนาดเล็ก การติดตั้งบนเครื่อง 2 GB จะทำงานได้แต่ช้าจนใช้งานจริงไม่ไหว
สิ่งที่ต้องเตรียม
- Cloud VPS ที่มี RAM อย่างน้อย 8 GB และพื้นที่ดิสก์ 50 GB ขึ้นไป
- โดเมนที่ชี้มาที่เซิร์ฟเวอร์
- บัญชี SMTP สำหรับส่งอีเมลแจ้งเตือน
ขั้นตอนที่ 1: เตรียมไฟล์
sudo mkdir -p /srv/gitlab/{config,logs,data}
cd /srv/gitlab
sudo nano docker-compose.yml
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
restart: always
hostname: git.example.com
shm_size: 256m
ports:
- "127.0.0.1:8929:8929"
- "2224:22"
volumes:
- ./config:/etc/gitlab
- ./logs:/var/log/gitlab
- ./data:/var/opt/gitlab
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://git.example.com'
gitlab_rails['gitlab_shell_ssh_port'] = 2224
nginx['listen_port'] = 8929
nginx['listen_https'] = false
nginx['proxy_set_headers'] = {
'X-Forwarded-Proto' => 'https',
'X-Forwarded-Ssl' => 'on'
}
# ปิดส่วนที่ทีมเล็กไม่ได้ใช้ ประหยัดหน่วยความจำได้มาก
prometheus_monitoring['enable'] = false
alertmanager['enable'] = false
grafana['enable'] = false
# ลดจำนวน worker ให้เหมาะกับเครื่อง
puma['worker_processes'] = 2
sidekiq['max_concurrency'] = 10
# อีเมล
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = 'smtp.example.com'
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = '[email protected]'
gitlab_rails['smtp_password'] = 'รหัสผ่าน'
gitlab_rails['smtp_authentication'] = 'login'
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['gitlab_email_from'] = '[email protected]'
# สำรองข้อมูลอัตโนมัติ เก็บ 7 วัน
gitlab_rails['backup_keep_time'] = 604800
sudo docker compose up -d
sudo docker compose logs -f gitlab
ครั้งแรกใช้เวลา 5-10 นาที รอจนสถานะเป็น healthy
sudo docker compose ps
ขั้นตอนที่ 2: ตั้ง Nginx และ SSL
sudo nano /etc/nginx/sites-available/gitlab
server {
listen 80;
server_name git.example.com;
client_max_body_size 0;
location / {
proxy_pass http://127.0.0.1:8929;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 600s;
proxy_http_version 1.1;
}
}
sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d git.example.com --agree-tos -m [email protected] --redirect
ขั้นตอนที่ 3: เข้าใช้งานครั้งแรก
sudo docker compose exec gitlab cat /etc/gitlab/initial_root_password
เข้าสู่ระบบด้วยผู้ใช้ root และรหัสผ่านที่ได้ แล้วเปลี่ยนรหัสผ่านทันที ไฟล์นี้จะถูกลบอัตโนมัติภายใน 24 ชั่วโมง
ตั้งค่าที่ควรทำทันทีในหน้า Admin
- ปิดการสมัครสมาชิกเอง ที่ Settings แล้ว General แล้ว Sign-up restrictions
- บังคับการยืนยันตัวตนสองขั้นตอนสำหรับทุกคน
- ตั้งขนาดสูงสุดของที่เก็บโค้ดต่อโครงการ
ขั้นตอนที่ 4: ตั้งค่า SSH
เนื่องจากพอร์ต 22 ของเครื่องแม่ใช้สำหรับ SSH เข้าเซิร์ฟเวอร์อยู่แล้ว GitLab จึงใช้พอร์ต 2224 ตามที่ตั้งไว้
# ทดสอบจากเครื่องนักพัฒนา
ssh -T -p 2224 [email protected]
ตั้งใน ~/.ssh/config ให้ไม่ต้องพิมพ์พอร์ตทุกครั้ง
Host git.example.com
Port 2224
User git
IdentityFile ~/.ssh/id_ed25519
git clone [email protected]:group/project.git
ขั้นตอนที่ 5: ติดตั้ง GitLab Runner สำหรับ CI/CD
ควรติดตั้งบนเครื่องคนละเครื่องกับ GitLab เพราะงาน CI กินทรัพยากรมากและอาจทำให้ GitLab เองช้า
sudo mkdir -p /srv/gitlab-runner/config
sudo docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
รับ Token จากหน้า Admin แล้ว CI/CD แล้ว Runners แล้วลงทะเบียน
sudo docker exec -it gitlab-runner gitlab-runner register \
--non-interactive \
--url "https://git.example.com" \
--token "glrt-xxxxx" \
--executor "docker" \
--docker-image "alpine:latest" \
--docker-privileged=false \
--docker-volumes "/var/run/docker.sock:/var/run/docker.sock"
sudo docker exec gitlab-runner gitlab-runner list
ทดสอบด้วยไฟล์ .gitlab-ci.yml ในโครงการ
stages: [test]
unit-test:
stage: test
image: node:20-alpine
script:
- npm ci
- npm test
cache:
paths: [node_modules/]
ขั้นตอนที่ 6: สำรองข้อมูล
# สำรองที่เก็บโค้ดและฐานข้อมูล
sudo docker compose exec -T gitlab gitlab-backup create
# ไฟล์จะอยู่ใน
sudo ls -lh /srv/gitlab/data/backups/
สำคัญ ไฟล์สำรองที่สร้างด้วยคำสั่งนี้ไม่รวมไฟล์คอนฟิกและกุญแจเข้ารหัส ต้องสำรองแยก ไม่เช่นนั้นกู้คืนแล้วจะถอดรหัสข้อมูลรับรองที่บันทึกไว้ไม่ได้
sudo tar czf /var/backups/gitlab-config-$(date +%F).tar.gz -C /srv/gitlab config
ตั้งเวลาอัตโนมัติ
sudo nano /usr/local/bin/gitlab-backup.sh
#!/bin/bash
set -euo pipefail
cd /srv/gitlab
docker compose exec -T gitlab gitlab-backup create CRON=1
tar czf "/var/backups/gitlab-config-$(date +%F).tar.gz" -C /srv/gitlab config
# ส่งออกนอกเครื่อง
rsync -az /srv/gitlab/data/backups/ [email protected]:/srv/backups/gitlab/
find /var/backups -name 'gitlab-config-*.tar.gz' -mtime +30 -delete
ขั้นตอนที่ 7: เฝ้าดูทรัพยากร
sudo docker stats gitlab --no-stream
sudo docker compose exec gitlab gitlab-ctl status
sudo du -sh /srv/gitlab/*
หากหน่วยความจำตึง ลดจำนวน worker ลงในคอนฟิก
puma['worker_processes'] = 2
sidekiq['max_concurrency'] = 5
sudo docker compose restart gitlab
ขั้นตอนที่ 8: อัปเกรด
# สำรองก่อนเสมอ
sudo /usr/local/bin/gitlab-backup.sh
# ตรวจเวอร์ชันปัจจุบัน
sudo docker compose exec gitlab gitlab-rake gitlab:env:info | grep Version
sudo docker compose pull
sudo docker compose up -d
sudo docker compose logs -f gitlab
GitLab มีข้อกำหนดเรื่องเส้นทางการอัปเกรด ห้ามข้ามเวอร์ชันหลัก ตรวจเส้นทางที่รองรับจากเอกสารทางการก่อนอัปเกรดข้ามหลายรุ่น
ปัญหาที่พบบ่อย
เข้าหน้าเว็บแล้วขึ้น 502
GitLab ยังเริ่มไม่เสร็จ รอจนสถานะเป็น healthy ด้วย sudo docker compose ps หากค้างนานเกินสิบนาที ให้ดู Log ด้วย sudo docker compose exec gitlab gitlab-ctl tail
Clone ผ่าน SSH ไม่ได้
ตรวจว่าใช้พอร์ต 2224 และตั้ง gitlab_shell_ssh_port ตรงกัน ทดสอบด้วย ssh -T -p 2224 [email protected]
อีเมลไม่ถูกส่ง
sudo docker compose exec gitlab gitlab-rails console
Notify.test_email('[email protected]','ทดสอบ','ข้อความ').deliver_now
ดิสก์เต็มเร็ว
สาเหตุหลักคือ artifact ของ CI และ container registry ตั้งอายุให้ลบอัตโนมัติในหน้า Admin แล้ว CI/CD และตรวจขนาดด้วย sudo du -sh /srv/gitlab/data/*
ต้องการ Cloud VPS สเปกสูงสำหรับระบบพัฒนาซอฟต์แวร์ ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี








