Cách Cài GitLab Trên VPS Ubuntu Nhanh Gọn Chỉ 15 Phút
Cài GitLab trên VPS là thứ nhiều dev tìm đến khi kho code nằm rải rác, review phải nhắn tin từng file và luôn lo lắng dữ liệu dự án nằm trên nền tảng của người khác. Bài viết sẽ đi hết từng lệnh để bạn tự vận hành GitLab Community Edition trên Ubuntu, chủ […]
Cài GitLab trên VPS là thứ nhiều dev tìm đến khi kho code nằm rải rác, review phải nhắn tin từng file và luôn lo lắng dữ liệu dự án nằm trên nền tảng của người khác. Bài viết sẽ đi hết từng lệnh để bạn tự vận hành GitLab Community Edition trên Ubuntu, chủ động toàn bộ dữ liệu dự án. Nếu chưa có máy chủ, có thể bắt đầu với một chiếc VPS giá rẻ tại ThueVPSGiaRe.vn.
1. Tổng quan về GitLab và lý do nên tự host trên VPS
GitLab là một nền tảng DevOps toàn diện dựa trên nền Git, cung cấp không gian lưu trữ mã nguồn, công cụ CI/CD mạnh mẽ cùng hệ thống quản lý công việc xuyên suốt vòng đời phát triển phần mềm. Thay vì trả phí định kỳ cho gói thương mại đám mây, việc cài đặt GitLab Community Edition (CE) trên máy chủ ảo cá nhân mang lại quyền kiểm soát dữ liệu tuyệt đối và khả năng tùy biến không giới hạn.

- Hệ thống Version Control chuẩn mực: Quản lý lịch sử commit, phân nhánh dự án và giải quyết xung đột mã nguồn trực quan.
- Tích hợp CI/CD tự động: Kiểm thử tự động, build docker images và deploy ứng dụng liền mạch ngay khi có lệnh push code.
- Quản lý tiến độ dự án: Tích hợp bảng Kanban, theo dõi Issues, Milestone và phân quyền nhóm chặt chẽ.
- Quyền kiểm soát mã nguồn: Giữ toàn bộ tài nguyên trí tuệ của doanh nghiệp trên server nội bộ, giảm thiểu nguy cơ rò rỉ dữ liệu qua bên thứ ba.
2. Yêu cầu phần cứng và hạ tầng cần chuẩn bị cài GitLab trên VPS
GitLab Omnibus là một bộ phần mềm đồ sộ đóng gói sẵn Ruby, Rails, Go, PostgreSQL, Redis và Nginx, do đó ứng dụng tiêu tốn khá nhiều tài nguyên hệ thống khi vận hành thực tế. Để đảm bảo quá trình biên dịch và tải trang không bị tắc nghẽn, bạn cần chuẩn bị một cấu hình máy chủ đáp ứng đúng các tiêu chí kỹ thuật tiêu chuẩn.
- Bộ nhớ RAM: Tối thiểu 4GB RAM (khuyến nghị ưu tiên các gói VPS 4GB RAM trở lên, tốt nhất từ 8GB nếu chạy nhiều pipeline CI/CD cùng lúc).
- Vi xử lý (CPU): Tối thiểu 2 vCPU để xử lý đồng thời các worker threads.
- Không gian lưu trữ: Dung lượng ổ đĩa khả dụng từ 20GB trở lên, khuyến nghị sử dụng SSD hoặc NVMe để có tốc độ đọc ghi IOPS cao.
- Hệ điều hành: Bản phân phối Ubuntu 20.04 LTS hoặc Ubuntu 24.04 LTS bản 64-bit sạch sẽ.
- Địa chỉ mạng: Máy chủ cần 1 địa chỉ IPv4 tĩnh công khai, kèm một tên miền (domain/subdomain) đã hoàn tất thao tác trỏ tên miền về VPS.
- Quyền hệ thống: Đăng nhập với quyền tài khoản root hoặc người dùng có đặc quyền thực thi lệnh sudo.
3. Từng bước cài đặt GitLab Community Edition (CE) trên Ubuntu
Trước khi bắt đầu cài đặt, bạn thực hiện kết nối điều khiển server từ xa theo hướng dẫn đăng nhập VPS Linux bằng SSH thông qua Terminal hoặc các công cụ dòng lệnh phổ biến. Khi đã ở trong terminal, hãy tuân thủ tuần tự các bước cài đặt dưới đây.
Bước 3.1: Đồng bộ và nâng cấp kho gói hệ điều hành
Làm mới danh sách phần mềm từ máy chủ lưu trữ gói và cập nhật toàn bộ thư viện nền của hệ thống lên phiên bản mới nhất:
sudo apt update && sudo apt upgrade -y

Bước 3.2: Thiết lập các gói phần mềm phụ trợ cần thiết
Tiến hành nạp các công cụ bổ trợ gồm chứng chỉ CA, tiện ích curl, openssh-server và múi giờ hệ thống:
sudo apt install -y curl openssh-server ca-certificates tzdata perl

Để máy chủ GitLab có khả năng gửi thư thông báo tạo tài khoản, xác nhận mật khẩu hoặc nhắc nhở merge request, hãy cài đặt thêm gói dịch vụ chuyển thư Postfix:
sudo apt install -y postfix

Trong màn hình giao diện cấu hình xanh của Postfix bật lên, dùng phím Tab để chọn kiểu cấu hình Internet Site, sau đó nhấn Enter. Ở cửa sổ nhập System mail name tiếp theo, điền tên miền máy chủ của bạn (ví dụ: gitlab.example.com) hoặc nhấn Enter giữ mặc định nếu bạn chưa kích hoạt tính năng gửi mail qua domain riêng.
Bước 3.3: Nạp kho mã nguồn GitLab CE và triển khai cài đặt
Tải tệp shell script chính thức từ Packagecloud để bổ sung khóa bảo mật GPG cùng repository phiên bản cộng đồng:
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

Sau khi tập lệnh hoàn tất ghi kho lưu trữ vào file danh sách phần mềm apt, kích hoạt lệnh tải và giải nén gói cài đặt GitLab Community Edition:
sudo apt install -y gitlab-ce


Bước 3.4: Khai báo địa chỉ URL và cấu hình tổng thể
Chỉnh sửa file thông số tổng của GitLab bằng công cụ soạn thảo nano:
sudo nano /etc/gitlab/gitlab.rb
Tìm đến biến thiết lập external_url và thay đổi giá trị bằng địa chỉ IP máy chủ hoặc tên miền thực tế mà bạn muốn sử dụng:
external_url 'http://<your-domain-or-ip>'

Nhấn tổ hợp phím Ctrl + O rồi Enter để lưu lại, tiếp tục bấm Ctrl + X để đóng trình soạn thảo. Sau đó, chạy lệnh reconfigure để toàn bộ hạ tầng Omnibus áp dụng các biến môi trường mới:
sudo gitlab-ctl reconfigure

4. Truy cập giao diện web và thiết lập tài khoản quản trị Root
Khi lệnh tái cấu hình hoàn thành mà không báo lỗi cú pháp, toàn bộ các tiến trình lõi đã được bật lên và lắng nghe trên các cổng tương ứng. Bạn có thể mở trình duyệt web bất kỳ và điều hướng thẳng tới liên kết đã đặt ở external_url (ví dụ: http://<103.20.97.173>).
Trong lần khởi động đầu tiên, hệ thống tự động sinh một mật khẩu ngẫu nhiên cho tài khoản quản trị cao nhất mang định danh root. Để trích xuất chuỗi mật khẩu này, hãy chạy lệnh đọc file trong terminal máy chủ:
sudo cat /etc/gitlab/initial_root_password
Lưu ý quan trọng: Tệp chứa mật khẩu tạm thời này sẽ tự động bị xóa vĩnh viễn sau đúng 24 giờ kể từ thời điểm hoàn tất cài đặt. Sau khi lấy được chuỗi ký tự, hãy truy cập giao diện đăng nhập web, điền username là root và dán mật khẩu vừa trích xuất.
Ngay sau khi vào được trang điều khiển Admin Area, bạn cần vào phần Profile cá nhân để thiết lập mật khẩu mới có độ dài tối thiểu 12 ký tự gồm chữ hoa, chữ thường, chữ số và biểu tượng đặc biệt.
Để kiểm tra tính thông suốt của dịch vụ web từ chính bên trong VPS mà không cần phụ thuộc vào trình duyệt, bạn có thể thực thi lệnh kiểm tra mã HTTP phản hồi:
curl -I http://<your-domain-or-ip>
Nếu kết quả trả về mã phản hồi HTTP/2 200 OK hoặc mã chuyển hướng HTTP/1.1 302 Found đưa bạn tới trang đăng nhập thì máy chủ đã vận hành hoàn toàn chính xác.
5. Cấu hình chứng chỉ bảo mật SSL Let’s Encrypt miễn phí
Mã nguồn ứng dụng là tài sản sống còn, do đó việc truyền tải dữ liệu qua giao thức HTTP thuần túy không có mã hóa tiềm ẩn nguy cơ bị chặn bắt gói tin trên đường truyền. Tương tự quy trình bảo mật website thông thường bằng giải pháp cài SSL Let’s Encrypt bằng Certbot, bản thân GitLab Omnibus đã tích hợp sẵn cơ chế cấp và gia hạn SSL tự động từ Let’s Encrypt mà không cần cài thêm công cụ phụ trợ độc lập.
Mở tệp thông số máy chủ bằng lệnh:
sudo nano /etc/gitlab/gitlab.rb
Thay đổi đường dẫn tại external_url sang tiền tố giao thức bảo mật https:
external_url "https://gitlab.example.com"
Kéo xuống tìm đoạn cấu hình Let’s Encrypt, xóa dấu thăng # ở đầu các dòng sau và thay địa chỉ hộp thư hợp lệ của quản trị viên:
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['[email protected]']
letsencrypt['auto_renew'] = true
Biến auto_renew = true đảm bảo máy chủ tự động làm mới chứng chỉ định kỳ trước khi hết hạn mỗi 60 ngày. Lưu tệp và tiến hành biên dịch lại môi trường:
sudo gitlab-ctl reconfigure
Sau khi script chạy xong, bạn có thể kiểm tra hiệu lực ngày tháng của tệp chứng thư đã cấp bằng lệnh OpenSSL:
sudo openssl x509 -enddate -noout -in /etc/gitlab/ssl/gitlab.example.com.crt
6. Quy trình tăng cường bảo mật và sao lưu dữ liệu cho GitLab
Một hệ thống quản lý git tự host trực tiếp ngoài internet phải luôn đối mặt với hàng loạt nỗ lực quét dò cổng và xâm nhập tự động mỗi ngày. Dưới đây là bốn quy tắc an ninh nền tảng bắt buộc phải thiết lập trên máy chủ production của bạn.
6.1. Vô hiệu hóa mật khẩu SSH và chuyển sang SSH Key
Khóa quyền đăng nhập bằng password của người dùng root nhằm chặn đứng mọi hành vi tấn công từ điển thông qua SSH:
sudo nano /etc/ssh/sshd_config
# Tìm và chỉnh sửa các dòng sau:
PermitRootLogin prohibit-password
PasswordAuthentication no
# Khởi động lại dịch vụ SSH daemon:
sudo systemctl restart ssh
6.2. Kích hoạt Fail2ban tích hợp để ngăn chặn Brute-Force
Thay vì cài đặt phần mềm bên ngoài, bạn có thể áp dụng kiến trúc phòng thủ từ công cụ Fail2ban sẵn có ngay trong file cấu hình của GitLab:
# Trong /etc/gitlab/gitlab.rb
fail2ban['enable'] = true
fail2ban['maxretry'] = 10
fail2ban['bantime'] = 3600
Mức maxretry = 10 là con số an toàn giúp tránh trường hợp nhà phát triển gõ sai thông tin một vài lần bị khóa nhầm IP làm việc. Chạy lại sudo gitlab-ctl reconfigure để kích hoạt jail.
6.3. Siết chặt chính sách cổng mạng trên tường lửa UFW
Chỉ cho phép mở các cổng dịch vụ công khai tiêu chuẩn gồm 22 (SSH), 80 (HTTP) và 443 (HTTPS), đóng toàn bộ các cổng nội bộ khác thông qua việc thiết lập tường lửa UFW trên Ubuntu một cách nghiêm ngặt.
6.4. Tự động hóa công tác sao lưu dự phòng định kỳ
Dữ liệu mã nguồn cần được sao lưu liên tục nhằm phòng ngừa rủi ro phần cứng hoặc thao tác nhầm lẫn. Việc lên lịch backup dữ liệu trên VPS có thể thực hiện thông qua tiện ích lệnh sao lưu có sẵn của chính GitLab:
sudo gitlab-backup create
Bạn nên thiết lập một cronjob tự động chạy lệnh này vào khung giờ thấp điểm (chẳng hạn 2 giờ sáng mỗi ngày) và kết hợp với các script đồng bộ rclone nhằm đẩy tệp nén sang một cụm lưu trữ đám mây tách biệt.
7. Hướng dẫn khởi tạo Repository và cộng tác dự án cơ bản
Sau khi máy chủ đã vận hành trơn tru và đảm bảo an ninh, nhóm phát triển có thể bắt đầu quá trình tạo kho mã nguồn đầu tiên theo luồng làm việc tiêu chuẩn:
- Tạo dự án mới: Tại bảng điều khiển chính, nhấp chọn nút Create a project → chọn mục Blank project. Đặt tên đại diện cho repository, thêm mô tả và xác định cấp độ truy cập (Private cho dự án mật, Internal cho toàn bộ thành viên nội bộ, hoặc Public).
- Đưa mã nguồn lên server: Sao chép đường dẫn Git clone từ giao diện và thực hiện các thao tác git cơ bản từ máy trạm:
# Clone repository về máy tính cá nhân
git clone https://<your-domain>/<username>/<project-name>.git
# Di chuyển vào thư mục dự án và thêm tệp
cd <project-name>
git add .
git commit -m "Khởi tạo mã nguồn dự án"
git push origin main
- Quản lý thành viên nhóm: Trong thanh điều hướng của từng Repository, truy cập vào menu Manage → Members để mời cộng tác viên bằng email hoặc tài khoản người dùng, đồng thời phân bổ đúng vai trò tương ứng (Reporter, Developer, Maintainer hay Owner).
8. Khắc phục sự cố thường gặp & Thủ thuật tối ưu RAM cho máy chủ
Trong môi trường sản xuất thực tế, người quản trị hệ thống thường đối mặt với một số trục trặc kỹ thuật phổ biến. Dưới đây là cách kiểm tra nhanh và phương án xử lý dứt điểm.
Khắc phục các lỗi vận hành phổ biến
- Lỗi “502 Bad Gateway” hoặc “Whoops, GitLab is taking too much time to respond”: Nguyên nhân chủ yếu do tiến trình máy chủ web Puma hoặc worker Sidekiq bị tràn bộ nhớ vật lý và crash. Bạn kiểm tra trạng thái bằng
sudo gitlab-ctl statusvà đọc log chi tiết bằngsudo gitlab-ctl tail puma. Đối với các máy chủ hạn chế về RAM, giải pháp hữu hiệu nhất là tắt tính năng giám sát Prometheus nếu không thực sự sử dụng:# Chỉnh sửa /etc/gitlab/gitlab.rb prometheus_monitoring['enable'] = false sudo gitlab-ctl reconfigure - Lỗi Let’s Encrypt thất bại khi cấp chứng chỉ: Đảm bảo tên miền đã trỏ đúng bản ghi A về địa chỉ IP của VPS và cổng 80/443 không bị chặn bởi tường lửa bên ngoài. Có thể thử xin cấp lại thủ công bằng lệnh:
sudo gitlab-ctl renew-le-certs - Lỗi bắt nhập mật khẩu liên tục khi push/pull qua HTTPS: Hiện tượng này xảy ra do Git chưa lưu cache thông tin xác thực. Bạn có thể lưu lại trên máy cục bộ bằng
git config --global credential.helper store. Tuy nhiên, cách chuẩn nhất là truy cập GitLab Web, tạo một Personal Access Token trong phần Preferences và sử dụng mã token đó thay cho mật khẩu tài khoản.
Thủ thuật tạo phân vùng Swap (RAM ảo) 4GB chống sập dịch vụ
Đối với máy chủ có mức dung lượng từ 4GB RAM, việc tạo thêm phân vùng bộ nhớ ảo theo hướng dẫn cơ chế Swap trên VPS Linux là bước đệm cực kỳ cần thiết để ứng cứu hệ thống khi có các đợt tải đột biến:
# Khởi tạo tệp tin swap dung lượng 4GB
sudo fallocate -l 4G /swapfile
# Phân quyền bảo mật chỉ cho phép root truy xuất
sudo chmod 600 /swapfile
# Định dạng tệp tin sang cấu trúc Swap
sudo mkswap /swapfile
# Kích hoạt sử dụng swapfile vào hệ thống
sudo swapon /swapfile
# Cấu hình tự động nạp swap sau mỗi lần khởi động máy chủ
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Nắm vững quy trình và cách cài gitlab trên VPS mở ra cho bạn quyền tự chủ hoàn toàn trong việc kiểm soát kho lưu trữ dự án, bảo mật sở hữu trí tuệ và linh hoạt thiết lập pipeline CI/CD mà không chịu sự gò bó từ các nhà cung cấp bên thứ ba. Ba yếu tố mang tính quyết định đến sự bền vững của máy chủ GitLab bao gồm: trang bị tối thiểu 4GB RAM kèm phân vùng Swap dự phòng, cấu hình tự động gia hạn SSL Let’s Encrypt và duy trì sao lưu dữ liệu ra cụm lưu trữ độc lập mỗi ngày. Hãy áp dụng ngay vào môi trường máy chủ của mình để tối ưu hóa hiệu suất làm việc cho toàn bộ đội ngũ.
Cần một VPS giá rẻ để bắt đầu?
Chọn cấu hình vừa đủ nhu cầu, ưu tiên chi phí dễ tiếp cận và khả năng quản trị riêng.
Nội dung trong bài viết được biên soạn nhằm mục đích chia sẻ kinh nghiệm kỹ thuật tham khảo. Cú pháp câu lệnh và tệp cấu hình thực tế có thể thay đổi tùy thuộc vào phiên bản Ubuntu, gói phát hành GitLab CE và kiến trúc hệ thống của bạn. Quản trị viên nên thử nghiệm trước trên môi trường Staging và thực hiện sao lưu toàn diện trước khi triển khai trực tiếp vào hệ thống vận hành thực tế.



