Hướng dẫn cài GitLab CE trên VPS riêng chi tiết 2026

Bạn đang dùng GitLab.com miễn phí và bắt đầu chạm trần giới hạn 5 GB dung lượng lưu trữ, hay nhóm dev cần private repo nhưng không muốn phụ thuộc vào dịch vụ bên ngoài? Hướng dẫn cài GitLab CE trên VPS riêng dưới đây sẽ giúp bạn dựng một GitLab self-hosted hoàn chỉnh trên Ubuntu 24.04 LTS, từ khâu chuẩn bị, cài đặt, cấu hình domain cho đến bảo mật cho production. Bạn sẽ có một server GitLab riêng với IPv4 ổn định, toàn quyền quản trị, sẵn sàng cho team sử dụng. Bài viết này dùng gói cài đặt Omnibus, cách triển khai chuẩn và được khuyến nghị cho đa số trường hợp.
- Mô hình: GitLab CE dùng gói Omnibus trên Ubuntu 24.04 LTS, cài qua APT.
- Cấu hình tối thiểu nên dùng: 4 GB RAM (khuyến nghị 8 GB) và 2 vCPU, ổ NVMe.
- Tên miền: cần trỏ sẵn A record về IP VPS, ví dụ
gitlab.congty.com. - Kết quả: GitLab truy cập bằng HTTPS, có SSL Let's Encrypt tự gia hạn, SSH cloning hoạt động.
Yêu cầu trước khi bắt đầu
Trước khi bắt đầu, bạn cần chuẩn bị những thứ sau:
- Một VPS chạy Ubuntu 24.04 LTS, tối thiểu 4 GB RAM, 2 vCPU. RAM 2 GB chạy được nhưng sẽ rất chậm và dễ bị OOM khi có CI/CD chạy; mình khuyên dùng 8 GB nếu team có hơn 5 người dùng thường xuyên.
- Quyền sudo hoặc tài khoản root để cài đặt. Bạn nên dùng user sudo thay vì root.
- Một tên miền trỏ A record về IP công cộng của VPS, ví dụ
gitlab.example.com. GitLab không chạy tốt nếu truy cập bằng IP trần vì gặp vấn đề với HTTPS certificate và host header. - Mở sẵn các cổng
22(SSH),80và443(HTTP/HTTPS) trên firewall. Lưu ý: nếu VPS của bạn dùng dịch vụ VPS Linux có firewall từ nhà cung cấp, cần mở ở cả hai lớp.
Vì sao nên tự host GitLab CE trên VPS riêng?
GitLab CE là phiên bản Community Edition, mã nguồn mở, cung cấp đầy đủ quản lý repository Git, theo dõi issue, merge request, và CI/CD pipeline. Việc tự cài trên VPS riêng giúp bạn làm chủ dữ liệu, không bị giới hạn số lượng user hay dung lượng như bản cloud miễn phí, và chi phí hàng tháng thấp hơn nhiều so với gói GitLab Premium.
Một lợi ích quan trọng nữa là tốc độ truy cập. Nếu team của bạn ở Việt Nam và đặt VPS tại Việt Nam, thao tác push/pull sẽ nhanh hơn rõ rệt so với GitLab.com có server ở nước ngoài. Chi phí một VPS Linux có IPv4 Việt Nam, ổ NVMe, thường từ khoảng 300.000đ đến 600.000đ/tháng cho cấu hình 4-8 GB RAM, rẻ hơn nhiều so với việc trả phí theo user cho gói trả phí. Đương nhiên, bạn phải tự lo backup và bảo mật, đó là phần mình sẽ hướng dẫn ở cuối bài.
Bước 1 - Cập nhật hệ thống và cài đặt các gói phụ thuộc
Đầu tiên, SSH vào VPS và cập nhật hệ điều hành:
sudo apt update
sudo apt upgrade -y
Bản upgrade có thể mất vài phút. Sau khi xong, cài một số gói cần thiết như curl, openssh-server và ca-certificates:
sudo apt install -y curl openssh-server ca-certificates tzdata perl
GitLab Omnibus sẽ tự cài và cấu hình PostgreSQL và Redis đi kèm, bạn không cần cài riêng. Kiểm tra nhanh hệ thống đã sẵn sàng:
lsb_release -a
Bạn sẽ thấy output dạng Ubuntu 24.04.2 LTS. Nếu dùng bản cũ hơn như 20.04, mình khuyên nên cài lại OS bản mới hoặc nâng cấp trước, vì GitLab mới nhất không còn hỗ trợ tốt cho các bản Ubuntu đã EOL.
Bước 2 - Thêm repository GitLab và cài đặt gói
GitLab cung cấp script để thêm repository chính thức vào hệ thống. Lưu ý phiên bản mới nhất năm 2026 là GitLab 18.x, bạn nên truy cập trang about.gitlab.com/install để lấy link chính xác cho Ubuntu 24.04. Lệnh dưới đây dùng cho luồng cài đặt chuẩn:
cd /tmp
curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
sudo bash script.deb.sh
Script này sẽ thêm repository và cập nhật danh sách gói. Sau đó tiến hành cài đặt. Bạn cần chỉ định EXTERNAL_URL là địa chỉ web sẽ truy cập GitLab, nhất định phải dùng https://:
sudo EXTERNAL_URL="https://gitlab.example.com" apt install -y gitlab-ce
Quá trình cài đặt sẽ kéo theo PostgreSQL, Redis, Nginx và các thành phần khác, có thể mất 5-10 phút tùy tốc độ mạng. Cuối cùng bạn sẽ thấy dòng chữ thông báo truy cập địa chỉ GitLab lần đầu để đặt mật khẩu admin.
Lưu ý: đừng quên mở cổng HTTP và HTTPS trên firewall nếu bạn đang dùng UFW:
sudo ufw allow http
sudo ufw allow https
sudo ufw status
Bước 3 - Hoàn tất cấu hình qua file gitlab.rb
Trước khi truy cập web, bạn nên chỉnh vài thông số trong file cấu hình chính tại /etc/gitlab/gitlab.rb. Đây là nơi quản lý gần như toàn bộ hành vi của GitLab. Mở file bằng trình soạn thảo:
sudo nano /etc/gitlab/gitlab.rb
Các mục bạn nên quan tâm chỉnh:
external_url: đã được set qua lệnh cài đặt, bạn có thể kiểm tra lại cho khớp.gitlab_rails['gitlab_shell_ssh_port']: nếu muốn GitLab lắng nghe SSH ở một cổng khác, đặt tại đây. Mặc định là 22, nhưng giữ 22 cũng ổn nếu bạn không chạy dịch vụ SSH nào khác.gitlab_rails['initial_root_password']: chỉ áp dụng cho lần khởi tạo đầu tiên.postgresql['shared_buffers']: nếu VPS có 4 GB RAM, mình thường set giữ mặc định, không tăng cao để tránh OOM.
Sau khi sửa, áp dụng cấu hình:
sudo gitlab-ctl reconfigure
Lệnh này chạy khoảng 3-5 phút và sẽ tự khởi động lại các service cần thiết. Xem trạng thái:
sudo gitlab-ctl status
Bạn nên thấy các service như run: postgresql, run: redis, run: puma, run: sidekiq, run: nginx đều ở trạng thái run.
Bước 4 - Truy cập lần đầu và đặt mật khẩu admin
Mở trình duyệt và truy cập https://gitlab.example.com. Lần đầu tiên, GitLab sẽ yêu cầu đặt mật khẩu cho tài khoản root. Bạn cũng có thể lấy mật khẩu tạm ban đầu (dạng mã hóa) bằng lệnh:
sudo cat /etc/gitlab/initial_root_password
File này chỉ tồn tại trong 24 giờ đầu sau khi cài đặt. Hãy đặt mật khẩu mạnh, ít nhất 12 ký tự, có ký tự đặc biệt. Sau khi đặt xong, đăng nhập bằng username root và mật khẩu vừa tạo.
Kiểm tra nhanh GitLab có phản hồi đúng không bằng lệnh curl từ chính VPS:
curl -I https://gitlab.example.com
Bạn sẽ thấy mã trạng thái HTTP/2 200 hoặc 302 (redirect đến trang login) là bình thường.
Bước 5 - Cấu hình SSL với Let's Encrypt tự động
Omnibus GitLab có tích hợp sẵn Let's Encrypt, chỉ cần bật trong file cấu hình. Mở /etc/gitlab/gitlab.rb và tìm các dòng:
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['[email protected]']
letsencrypt['auto_renew'] = true
Bỏ comment và đổi email liên hệ cho phù hợp. Mục auto_renew để true giúp tự gia hạn mỗi 60 ngày, bạn không cần làm gì thêm. Sau đó reconfigure lại:
sudo gitlab-ctl reconfigure
Omnibus sẽ tự động cài đặt chứng chỉ cho domain bạn đã khai báo trong external_url mà không cần dùng Certbot riêng. Kiểm tra thời hạn chứng chỉ:
sudo openssl x509 -enddate -noout -in /etc/gitlab/ssl/gitlab.example.com.crt
Hãy nhớ, tên miền phải trỏ đúng về IP VPS trước khi chạy reconfigure, nếu không Let's Encrypt sẽ không cấp được chứng chỉ. Trong trường hợp bạn có hạ tầng phức tạp cần SSL Wildcard, có thể tham khảo cách cài qua acme.sh trong một bài khác.
Bước 6 - Bảo mật GitLab và hệ điều hành
Bảo mật là phần không thể bỏ qua khi tự host. Dưới đây là những việc tối thiểu mình làm cho production GitLab.
1. Khóa SSH bằng key, tắt đăng nhập root bằng mật khẩu:
sudo nano /etc/ssh/sshd_config
# Sửa hoặc thêm:
PermitRootLogin prohibit-password
PasswordAuthentication no
# Rồi restart SSH:
sudo systemctl restart ssh
2. Cài fail2ban để chặn brute-force: GitLab Omnibus có tích hợp cấu hình fail2ban riêng, bạn chỉ cần bật trong gitlab.rb.
# Trong /etc/gitlab/gitlab.rb
fail2ban['enable'] = true
fail2ban['maxretry'] = 10
fail2ban['bantime'] = 3600
Mình thường set maxretry = 10, vì set quá thấp dễ chặn nhầm chính mình khi nhập sai mật khẩu vài lần. Sau đó reconfigure:
sudo gitlab-ctl reconfigure
3. Tăng cường firewall: Ngoài cổng 22, 80, 443, không mở cổng nào khác ra ngoài. Nếu bạn tự quản hạ tầng tại Việt Nam, kiểm tra lại quy tắc trên VPS Linux IPv4 của mình.
4. Backup định kỳ: GitLab có lệnh backup sẵn:
sudo gitlab-backup create
Bạn nên đặt crontab chạy lệnh này hằng ngày lúc 2 giờ sáng và đẩy file backup ra nơi khác, ví dụ object storage S3 với rclone hoặc một VPS khác. Mình chỉ nhắc sơ vì bài chi tiết về backup có thể là một chủ đề riêng.
Xử lý lỗi thường gặp khi cài GitLab CE
Khi cài GitLab, có vài lỗi mình gặp khá nhiều lần. Ghi lại ở đây để bạn đỡ mất thời gian.
Lỗi 1: 502 Bad Request sau khi mở web. Nguyên nhân thường là Puma hoặc Sidekiq bị chết do thiếu RAM. Kiểm tra:
sudo gitlab-ctl status
sudo gitlab-ctl tail puma
Nếu VPS có 2 GB RAM thì đây gần như là chuyện sớm muộn. Giải pháp: nâng cấp lên 4 GB, hoặc thêm swap (nhưng swap không cứu được CI/CD nặng). Cách khác là tắt bớt component không dùng, ví dụ Prometheus:
# Trong /etc/gitlab/gitlab.rb
prometheus_monitoring['enable'] = false
sudo gitlab-ctl reconfigure
Lỗi 2: Let's Encrypt không cấp chứng chỉ. Kiểm tra DNS đã trỏ đúng về IP chưa, và cổng 80 phải mở. Bạn có thể chạy thủ công:
sudo gitlab-ctl renew-le-certs
Lỗi 3: push/pull qua HTTPS yêu cầu nhập mật khẩu liên tục. Đó là do bạn chưa cấu hình credential helper hoặc dùng token. Trên máy local:
git config --global credential.helper store
Nhưng tốt hơn hết, nên tạo Personal Access Token trên GitLab và dùng token đó thay cho mật khẩu khi clone qua HTTPS.
Câu hỏi thường gặp
Cấu hình VPS tối thiểu để cài GitLab CE là bao nhiêu?
Cài GitLab CE mất bao lâu?
Phần cài gói qua APT mất 5-10 phút tùy tốc độ mạng. Lệnh gitlab-ctl reconfigure lần đầu mất thêm 3-5 phút. Toàn bộ quy trình từ lúc SSH vào đến khi đặt mật khẩu admin xong khoảng 20-30 phút nếu không gặp lỗi.
Nên cài GitLab CE bằng Docker hay Omnibus?
Mình khuyên dùng Omnibus cho GitLab CE vì nó đóng gói sẵn PostgreSQL, Redis, Nginx, và có lệnh gitlab-ctl để vận hành, backup rất tiện. Docker cũng chạy tốt nhưng cấu hình volume, network và upgrade phức tạp hơn cho người mới. Nếu bạn đã quen Docker, vẫn nên đọc kỹ tài liệu chính thức trước khi dùng.
Tự host GitLab CE có giới hạn user không?
GitLab CE không giới hạn số lượng user. Điều bạn cần quan tâm là tài nguyên phần cứng: RAM, CPU, dung lượng ổ đĩa cho repository và artifact CI/CD. Càng nhiều user hoạt động song song thì càng cần cấu hình cao.
Làm sao để nâng cấp GitLab CE lên phiên bản mới?
Nếu cài bằng Omnibus, nâng cấp rất đơn giản:
sudo apt update
sudo apt upgrade gitlab-ce
Trước khi nâng cấp, mình luôn chạy sudo gitlab-backup create để có bản sao lưu. Sau đó kiểm tra trang release của GitLab, vì một số bản nâng cấp lớn yêu cầu chạy tuần tự qua từng phiên bản trung gian, không nhảy cóc.
Bài viết liên quan
- Cách cài Node.js trên VPS Ubuntu chi tiết năm 2026
- Triển khai CI/CD lên VPS với GitHub Actions và SSH
- Cài đặt Claude Code và kết nối GitLab tự quản


