Tự build Git Server & CI/CD với Gitea: Nhẹ, Nhanh và ‘Riêng Tư’ Tuyệt Đối

Ubuntu tutorial - IT technology blog
Ubuntu tutorial - IT technology blog

Tại sao Gitea + Gitea Actions là lựa chọn “vàng” cho VPS yếu?

Nếu bạn từng “đau ví” vì nâng cấp RAM chỉ để chạy GitLab, hoặc lo ngại tính riêng tư khi để code trên Cloud, Gitea chính là lời giải. GitLab thường ngốn tối thiểu 4GB-8GB RAM để hoạt động ổn định. Trong khi đó, Gitea chỉ tiêu tốn khoảng 100MB-150MB RAM ở chế độ chờ. Mình đã thử nghiệm trên một con VPS 1 vCPU – 1GB RAM của Hetzner; hệ thống vẫn chạy mượt mà dù team 5 người push code liên tục.

Bước ngoặt lớn nhất đến từ phiên bản 1.19 khi Gitea ra mắt Gitea Actions. Nó tương thích gần như 100% với file cấu hình .yaml của GitHub Actions. Bạn có thể bê nguyên workflow cũ về chạy trên server riêng mà không tốn một xu phí bản quyền hay lo hết giới hạn “free minutes”.

Khởi động: Thiết lập cơ sở dữ liệu PostgreSQL

Dù Gitea hỗ trợ SQLite rất tiện lợi, mình khuyên bạn nên dùng PostgreSQL ngay từ đầu. Nó giúp việc backup dữ liệu an toàn hơn và xử lý các tác vụ đồng thời tốt hơn hẳn khi dự án phình to.

# Cập nhật hệ thống
sudo apt update && sudo apt upgrade -y

# Cài đặt PostgreSQL
sudo apt install postgresql postgresql-contrib -y

# Tạo database và user riêng cho Gitea
sudo -u postgres psql -c "CREATE DATABASE giteadb;"
sudo -u postgres psql -c "CREATE USER gitea WITH ENCRYPTED PASSWORD 'MatKhauSieuKho';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE giteadb TO gitea;"

Đừng quên tạo một user hệ thống riêng để chạy dịch vụ. Việc này giúp cô lập quyền hạn, bảo vệ server nếu chẳng may ứng dụng có lỗ hổng:

sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password git

Cài đặt Gitea bằng File Binary

Thay vì dùng Docker, mình ưu tiên cài trực tiếp từ file binary để tiết kiệm tài nguyên và dễ debug network. Cách này giúp bạn kiểm soát hoàn toàn các tiến trình đang chạy.

# Tải bản Gitea mới nhất
wget -O /tmp/gitea https://dl.gitea.com/gitea/1.21.4/gitea-1.21.4-linux-amd64

# Cấp quyền và chuyển vào thư mục thực thi
sudo chmod +x /tmp/gitea
sudo mv /tmp/gitea /usr/local/bin/gitea

# Tạo cấu trúc thư mục lưu trữ code và log
sudo mkdir -p /var/lib/gitea/{custom,data,log}
sudo chown -R git:git /var/lib/gitea/
sudo chmod -R 750 /var/lib/gitea/
sudo mkdir -p /etc/gitea
sudo chown root:git /etc/gitea
sudo chmod 770 /etc/gitea

Tiếp theo, hãy thiết lập để Gitea tự khởi động cùng Ubuntu bằng Systemd. Bạn tạo file service tại /etc/systemd/system/gitea.service, sau đó kích hoạt dịch vụ:

sudo systemctl enable --now gitea

Bây giờ, hãy mở trình duyệt và truy cập http://IP-Server:3000. Giao diện cài đặt sẽ hiện ra. Bạn chỉ cần điền thông tin PostgreSQL đã tạo ở bước trước là xong.

Kích hoạt CI/CD với Act Runner

Gitea Actions cần một thành phần riêng biệt gọi là Act Runner để thực thi các job. Hãy coi đây là một “công nhân” luôn túc trực để nhận lệnh build từ Gitea.

Đầu tiên, bạn vào Site Administration -> Actions -> Runners trên web UI để lấy Registration Token. Sau đó, thao tác trên terminal:

# Tải Act Runner
wget -O act_runner https://dl.gitea.com/act_runner/main/act_runner-main-linux-amd64
sudo chmod +x act_runner

# Đăng ký runner với hệ thống
./act_runner register --instance http://localhost:3000 --token <TOKEN_CỦA_BẠN> --no-interactive

Sau khi đăng ký thành công, hãy setup nó chạy dưới dạng service ngầm để đảm bảo hệ thống CI/CD luôn sẵn sàng 24/7.

Kiểm chứng: Chạy thử Pipeline đầu tiên

Để test thử, hãy tạo một repo mới và thêm file .gitea/workflows/test.yaml. File này sẽ ra lệnh cho server in ra một dòng thông báo khi có code mới được push lên:

name: Gitea Actions Demo
on: [push]
jobs:
  Check-System:
    runs-on: ubuntu-latest
    steps:
      - run: echo "Hệ thống CI/CD đã hoạt động ngon lành!"
      - run: node -v

Nếu tab Actions hiện tích xanh, chúc mừng bạn! Bạn đã có một hệ thống tự động hóa xịn sò không kém gì các ông lớn.

Mẹo tối ưu để server không bị “treo”

  • Kết hợp Docker cho Runner: Dù Gitea chạy binary, nhưng Act Runner nên dùng Docker. Nó giúp tạo môi trường build sạch sẽ, không để lại file rác sau mỗi lần chạy.
  • Cấu hình Swap: Với VPS 1GB RAM, hãy tạo 2GB Swap. Khi chạy npm install hoặc build Docker image, RAM thường tăng vọt dễ gây lỗi Out-Of-Memory (OOM).
  • Reverse Proxy: Đừng dùng trực tiếp port 3000. Hãy cài Nginx và dùng Let’s Encrypt để có HTTPS. Điều này cực kỳ quan trọng để bảo vệ mã nguồn của bạn trên internet.

Việc tự vận hành Gitea giúp mình làm chủ hoàn toàn dữ liệu. Không còn lo giới hạn repo private, không lo tăng giá dịch vụ. Với các dự án outsource hoặc startup nhỏ, đây là phương án cân bằng nhất giữa chi phí và hiệu năng.

Share: