Cài đặt GitLab CE trên CentOS Stream 9: Tự dựng ‘lò luyện’ Code và CI/CD nội bộ

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

Quick start – Cài nhanh GitLab trong 5 phút

Vừa thuê một con VPS CentOS Stream 9 “mới coong” và muốn thấy kết quả ngay? Chạy nhanh chuỗi lệnh này với quyền root. Mình sẽ giải thích chi tiết từng dòng ở ngay phía dưới.

# Cập nhật hệ thống và cài đặt phụ trợ
dnf update -y
dnf install -y curl policycoreutils-python-utils openssh-server perl

# Thêm repository của GitLab
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash

# Cài đặt GitLab (thay 'gitlab.example.com' bằng IP hoặc domain của bạn)
EXTERNAL_URL="http://gitlab.example.com" dnf install -y gitlab-ce

# Mở port trên Firewall
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload

Sau khi lệnh chạy xong, hãy đợi khoảng 1 phút để các dịch vụ khởi tạo rồi truy cập domain để kiểm tra thành quả.

Tại sao nên chọn CentOS Stream 9 để chạy GitLab?

Trước đây, CentOS 7 là “ông vua” ổn định trong lòng mình. Tuy nhiên, kể từ khi Red Hat thay đổi cuộc chơi, mình đã chuyển dần các hệ thống sang CentOS Stream 9. Qua thực tế triển khai, phiên bản này xử lý I/O cực tốt nhờ Kernel mới, giúp các thao tác Git Push/Pull mượt mà hơn hẳn.

Tự vận hành GitLab CE (Community Edition) mang lại sự tự do tuyệt đối. Bạn nắm toàn bộ dữ liệu trong tay, không lo giới hạn số lượng repository hay tốn vài trăm USD mỗi tháng cho phí user trên GitHub. Với các dự án cần bảo mật cao, việc giấu GitLab sau lớp VPN là phương án an toàn nhất hiện nay.

Cấu hình phần cứng: Đừng tiết kiệm RAM

Cài GitLab trên VPS 1GB RAM là một sai lầm “chí mạng”. Bạn sẽ thấy lỗi 502 xuất hiện liên tục do Ruby on Rails và Sidekiq ngốn tài nguyên rất kinh khủng. Dưới đây là thông số mình khuyên dùng cho team khoảng 10-20 người:

  • RAM: Tối thiểu 4GB (Nên có 8GB để chạy CI/CD không bị treo).
  • CPU: 2 Cores (Ưu tiên clock speed cao).
  • Storage: 20GB trống (Nên dùng SSD/NVMe để tránh nghẽn khi nhiều người cùng commit).
  • OS: CentOS Stream 9 bản x86_64 sạch.

Chi tiết các bước triển khai

Bước 1: Chuẩn bị môi trường

GitLab cần một vài công cụ để quản lý SSH và gửi email thông báo. Trên CentOS Stream 9, việc này cực kỳ đơn giản với trình quản lý gói dnf.

dnf install -y curl policycoreutils-python-utils openssh-server perl

Kế tiếp, hãy tải script cấu hình repository chính thức từ GitLab. Script này sẽ tự động nhận diện OS và thêm các nguồn tải cần thiết vào hệ thống của bạn.

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash

Bước 2: Cài đặt và thiết lập URL

Khi cài đặt, bạn nên khai báo luôn biến EXTERNAL_URL. Đây là địa chỉ bạn sẽ dùng để truy cập web. Nếu chưa trỏ domain, bạn cứ điền tạm IP của server vào đây.

EXTERNAL_URL="http://192.168.1.100" dnf install -y gitlab-ce

Quá trình này thường mất từ 3 đến 5 phút. GitLab sẽ tự động kích hoạt gitlab-ctl reconfigure để tự cài đặt trọn gói PostgreSQL, Redis và Nginx cho bạn.

Bảo mật server với Firewalld và SELinux

Nhiều anh em có thói quen tắt sạch Firewall và SELinux để tránh lỗi vặt. Tuy nhiên, với một server chứa toàn bộ tài sản trí tuệ (source code), làm vậy chẳng khác nào mở cửa mời hacker vào nhà.

Cấu hình Firewalld

Chỉ mở đúng 3 cổng thiết yếu: HTTP (80), HTTPS (443) và SSH (22). Các cổng khác nên đóng chặt để giảm thiểu rủi ro bị scan port.

firewall-cmd --permanent --add-service={http,https,ssh}
firewall-cmd --reload

Sống chung với SELinux

CentOS Stream 9 mặc định để SELinux ở chế độ Enforcing. Đừng tắt nó. GitLab đã hỗ trợ SELinux rất tốt rồi. Nếu bạn thay đổi port SSH mặc định (ví dụ sang 2222), chỉ cần chạy thêm lệnh sau để SELinux cho phép kết nối:

semanage port -a -t ssh_port_t -p tcp 2222

Cách lấy mật khẩu Admin lần đầu

GitLab hiện nay không cho đặt pass ngay lúc cài mà sẽ tạo một chuỗi ký tự ngẫu nhiên cho tài khoản root. Để xem mật khẩu này, hãy đọc file sau:

cat /etc/gitlab/initial_root_password

Lưu ý quan trọng: Hệ thống sẽ tự xóa file này sau 24 giờ. Bạn cần đăng nhập ngay, vào mục User Settings -> Password để đổi mật khẩu cá nhân.

Nâng cấp HTTPS với Let’s Encrypt (Miễn phí)

Gửi code qua HTTP là một rủi ro lớn vì dữ liệu bị truyền đi dưới dạng text rõ. May mắn là GitLab đã tích hợp sẵn Let’s Encrypt. Bạn chỉ cần sửa file cấu hình:

vi /etc/gitlab/gitlab.rb

Tìm và cập nhật các thông số sau:

external_url 'https://gitlab.yourdomain.com'
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['[email protected]']

Cuối cùng, chạy lệnh gitlab-ctl reconfigure để GitLab tự đi xin chứng chỉ SSL và cấu hình Nginx cho bạn.

Kinh nghiệm thực tế: Xử lý khi gặp sự cố

Dưới đây là vài mẹo nhỏ mình đúc kết được sau nhiều lần “cứu net” các hệ thống GitLab:

  • Lỗi 502 Whoops: Đừng vội restart server. Thường thì do dịch vụ Puma chưa khởi động xong sau khi reconfigure. Hãy kiên nhẫn đợi 2 phút, lỗi sẽ tự hết.
  • Kích hoạt Swap: Nếu RAM server chỉ có 4GB, hãy tạo thêm 2GB-4GB Swap trên SSD. Nó sẽ giúp server không bị “đứng hình” khi team thực hiện các bản Merge Request lớn hàng trăm file.
  • Chiến lược Backup: Code là mạng sống. Hãy dùng Cronjob chạy gitlab-rake gitlab:backup:create mỗi đêm và đẩy file .tar lên một server khác hoặc S3.
  • Check sức khỏe: Dùng lệnh gitlab-ctl status để biết chính xác component nào (Redis, Postgres, Gitaly…) đang gặp vấn đề.

Tự xây dựng hệ thống quản lý code không khó, cái khó là duy trì nó ổn định. Hy vọng bài viết này giúp anh em tự tin hơn khi triển khai GitLab trên CentOS Stream 9. Chúc anh em thành công!

Share: