Gitolite: Quản lý Git Server cực nhẹ cho VPS 1GB RAM

Git tutorial - IT technology blog
Git tutorial - IT technology blog

Khi GitLab là “gánh nặng” cho VPS còi

Bạn đang vận hành một dự án outsource với ngân sách eo hẹp? Một con VPS “cò con” 1 vCPU và 1GB RAM chắc chắn sẽ “khóc thét” nếu bạn cố nhồi nhét GitLab vào. Ngay cả Gitea – dù được tiếng là nhẹ – vẫn tiêu tốn tài nguyên cho giao diện web và database.

Mình từng rơi vào thế khó: khách hàng yêu cầu bảo mật code tuyệt đối trên server Ubuntu cũ kỹ của họ. Không GitHub, không Bitbucket. Lúc đó, Gitolite chính là “cứu cánh”. Đây là lớp quản lý quyền truy cập (access control layer) chạy trên nền SSH. Nó không có giao diện hào nhoáng. Mọi thứ vận hành qua dòng lệnh và file text, nhưng bù lại nó cực kỳ ổn định.

Trong khi GitLab cần ít nhất 2-4GB RAM để chạy ổn định, Gitolite gần như không tiêu tốn RAM khi ở trạng thái nghỉ. Điểm ăn tiền nhất là khả năng phân quyền chi tiết đến từng branch hay tag. Bạn sẽ quản lý toàn bộ server Git bằng cách… push code lên một repository đặc biệt mang tên gitolite-admin.

Triển khai Gitolite trên Server

Để bắt đầu, bạn cần một server Linux (Ubuntu/Debian) đã cài Git và một máy cá nhân đóng vai trò Admin.

Bước 1: Khởi tạo User Git

Hãy tạo một user riêng để cô lập các repository. Tuyệt đối không dùng user root để chạy Gitolite nhằm đảm bảo an toàn hệ thống.

# Cập nhật và cài đặt Git
sudo apt update && sudo apt install git -y

# Tạo user 'git' bảo mật, không dùng mật khẩu
sudo adduser --system --shell /bin/bash --group git

Bước 2: Cấu hình SSH Key cho Admin

Tại máy local, hãy kiểm tra SSH Key của bạn. Nếu chưa có, hãy tạo một cặp key mới với độ dài 4096 bit:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_gitadmin

Tiếp theo, đẩy file public key lên thư mục tạm của server bằng lệnh scp:

scp ~/.ssh/id_rsa_gitadmin.pub user@your-server-ip:/tmp/admin.pub

Bước 3: Cài đặt từ Source

Bây giờ, hãy chuyển sang user git trên server để tiến hành thiết lập. Mình khuyến khích cài từ source để sở hữu phiên bản mới nhất.

# Chuyển sang user git
sudo su - git

# Clone source code và cài đặt
git clone https://github.com/sitaramc/gitolite
mkdir -p ~/bin
./gitolite/install -to ~/bin

# Kích hoạt Gitolite với key Admin đã chuẩn bị
~/bin/gitolite setup -pk /tmp/admin.pub

Hệ thống sẽ tự động tạo thư mục repositories/. Trong đó có sẵn hai repo mặc định: gitolite-admin.git (để cấu hình) và testing.git.

Quản lý theo phong cách Infrastructure as Code

Với Gitolite, bạn không cần SSH vào server mỗi khi muốn tạo repo mới. Mọi thay đổi đều được thực hiện ngay tại máy local.

1. Clone repo quản trị

Để thao tác mượt mà, hãy thêm cấu hình vào file ~/.ssh/config tại máy cá nhân:

Host git-server
    HostName your-server-ip
    User git
    IdentityFile ~/.ssh/id_rsa_gitadmin

Bây giờ, hãy đưa repo admin về máy:

git clone git-server:gitolite-admin
cd gitolite-admin

2. Thêm đồng đội vào dự án

Giả sử bạn cần thêm huy-dev vào team. Hãy lấy file id_rsa.pub của Huy, bỏ vào thư mục keydir/ và đổi tên thành huy-dev.pub. Tên file chính là username trong hệ thống Gitolite.

3. Phân quyền và tạo Repo

Mở file conf/gitolite.conf. Đây là nơi phép thuật thực sự diễn ra:

repo secret-project
    RW+     =   admin
    RW      =   huy-dev
    R       =   @all

Ý nghĩa các quyền cơ bản:

  • RW+: Toàn quyền (bao gồm cả force push và xóa branch).
  • RW: Quyền Push/Pull thông thường.
  • R: Chỉ được phép Read-only.
  • @all: Áp dụng cho mọi user có key trong hệ thống.

Sau khi sửa xong, chỉ cần commit và push:

git add .
git commit -m "Thêm huy-dev và dự án secret-project"
git push origin master

Ngay lập tức, Gitolite sẽ khởi tạo repo secret-project.git trên server. Huy có thể bắt đầu làm việc ngay.

Tính năng nâng cao: Bảo vệ Branch

Trong thực tế, bạn thường không muốn dev push thẳng vào branch master. Gitolite xử lý việc này cực kỳ gọn gàng bằng Regex:

repo secret-project
    RW+ master      =   admin
    RW  develop     =   huy-dev
    RW  feature/.*  =   huy-dev

Cấu hình này ép huy-dev phải làm việc trên develop hoặc các nhánh feature/. Nếu Huy lỡ tay push vào master, server sẽ từ chối ngay lập tức kèm thông báo lỗi.

Kinh nghiệm “xương máu” khi vận hành

Lỡ tay gõ sai cú pháp config? Đừng lo, Gitolite sẽ chặn bạn ngay lúc push. Tuy nhiên, nếu hệ thống có vấn đề, hãy kiểm tra log tại /home/git/.gitolite/logs/. Log được chia theo ngày, rất dễ để truy vết xem ai đã làm gì.

Một lưu ý quan trọng: Đừng bao giờ sửa file trực tiếp trong thư mục .gitolite trên server. Luôn thực hiện qua repo gitolite-admin. Nếu bạn mất SSH key admin, bạn buộc phải dùng quyền root trên server để chạy lại lệnh setup nhằm nạp key mới.

Gitolite có thể hơi khó tiếp cận lúc đầu vì thiếu giao diện web. Nhưng khi đã quen, bạn sẽ thấy nó nhanh, bảo mật và cực kỳ nhẹ nhàng cho những con VPS cấu hình thấp.

Share: