Quay lại danh sách
Tin tức công nghệ

Hướng Dẫn Cấu Hình Gitea Actions Tự Động Đóng Gói Và Đẩy Docker Image Lên GitHub Container Registry (GHCR) Từ VPS Riêng

30 tháng 5, 2026

Giới thiệu về Gitea Actions và Xu Hướng Tự Động Hóa Trên VPS Riêng

Trong kỷ nguyên của DevOps và điện toán đám mây, việc tự động hóa quy trình tích hợp và triển khai liên tục (CI/CD) đã trở thành tiêu chuẩn bắt buộc đối với các đội ngũ phát triển phần mềm. GitHub Actions hay GitLab CI là những công cụ tuyệt vời, nhưng đối với các doanh nghiệp muốn kiểm soát toàn bộ hạ tầng, bảo mật dữ liệu nội bộ và tiết kiệm chi phí, việc tự vận hành một nền tảng Git riêng là giải pháp tối ưu. Đó là lý do Gitea — một giải pháp Git service siêu nhẹ, mạnh mẽ và dễ vận hành — ngày càng trở nên phổ biến.

Kể từ phiên bản 1.19, Gitea đã tích hợp chính thức Gitea Actions, một hệ thống CI/CD có cú pháp tương thích cấu trúc YAML của GitHub Actions. Bài viết này sẽ hướng dẫn bạn từng bước chi tiết để cấu hình Gitea Actions ngay trên máy chủ VPS riêng, tự động hóa quy trình đóng gói (build) ứng dụng thành Docker Image và đẩy (push) lên GitHub Container Registry (GHCR) một cách an toàn và chuyên nghiệp.

---

Tại sao nên kết hợp Gitea Actions với GitHub Container Registry (GHCR)?

Việc sử dụng Gitea làm trung tâm lưu trữ mã nguồn (Source Code Management) kết hợp với GHCR làm kho lưu trữ Docker Image mang lại nhiều lợi ích chiến lược cho doanh nghiệp:

  • Tối ưu hóa tài nguyên VPS: Quá trình lưu trữ hàng trăm Docker Image với nhiều phiên bản (tags) khác nhau tốn rất nhiều dung lượng ổ cứng. Đẩy Image lên GHCR giúp giảm tải dung lượng lưu trữ cho VPS của bạn.
  • Bảo mật và phân quyền chuyên nghiệp: GHCR cung cấp cơ chế phân quyền mạnh mẽ, tích hợp sẵn với hệ sinh thái của GitHub, giúp bạn dễ dàng chia sẻ Docker Image cho các hệ thống Kubernetes hoặc Docker Swarm bên ngoài mà không cần mở công khai mã nguồn.
  • Tương thích cao: Do Gitea Actions sử dụng chung chuẩn với GitHub Actions, các nhà phát triển không cần phải học lại cú pháp mới, giảm thiểu tối đa chi phí đào tạo.
---

Điều kiện tiên quyết trước khi cấu hình

Để thực hiện thành công bài hướng dẫn này, hệ thống của bạn cần chuẩn bị sẵn các thành phần sau:

  1. Một máy chủ VPS (Ubuntu/Debian) đã cài đặt sẵn Gitea (phiên bản 1.19 trở lên) và Docker.
  2. Gitea Actions Runner (Act Runner) đã được cài đặt và kích hoạt thành công trên VPS.
  3. Một tài khoản GitHub và một Personal Access Token (PAT) có quyền write:packages và read:packages để tiến hành xác thực với GHCR.
---

Bước 1: Khởi tạo Personal Access Token (PAT) trên GitHub

Để Gitea Actions trên VPS có quyền đẩy Docker Image lên GHCR, bạn cần cấp quyền thông qua PAT. Hãy thực hiện các bước sau trên GitHub:

  1. Truy cập vào tài khoản GitHub của bạn, đi đến Settings > Developer settings > Personal Access Tokens > Tokens (classic).
  2. Chọn Generate new token (classic).
  3. Đặt tên cho Token (ví dụ: Gitea-VPS-to-GHCR) và chọn thời gian hết hạn (Expiration).
  4. Đánh dấu chọn vào quyền write:packages (quyền repo và read:packages sẽ tự động được chọn).
  5. Nhấn Generate token và sao chép mã token này lại. Lưu ý: Mã này chỉ hiển thị một lần duy nhất.
---

Bước 2: Cấu hình Secrets an toàn trong Repository Gitea

Tuyệt đối không được viết trực tiếp mật khẩu hoặc Token vào file cấu hình YAML. Gitea cung cấp tính năng Secrets để mã hóa và bảo vệ các thông tin nhạy cảm này.

Hãy truy cập vào Repository của bạn trên Gitea, chọn Settings > Actions > Secrets và thêm hai biến sau:

  • GHCR_USERNAME: Tên đăng nhập tài khoản GitHub của bạn (viết thường).
  • GHCR_TOKEN: Chuỗi Personal Access Token (PAT) vừa khởi tạo ở Bước 1.
---

Bước 3: Xây dựng file cấu hình Workflow YAML

Trong thư mục gốc của dự án trên Gitea, hãy tạo một thư mục có cấu trúc .gitea/workflows/ và tạo một file mới tên là build-push-ghcr.yaml. Đây là nơi chúng ta định nghĩa toàn bộ kịch bản CI/CD.

Dưới đây là mẫu cấu hình chuẩn hóa dành cho môi trường doanh nghiệp:

name: Build and Push Docker Image to GHCR

on:
  push:
    branches:
      - main
    tags:
      - 'v*'

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v3

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2

      - name: Log in to GitHub Container Registry
        uses: docker/login-action@v2
        with:
          registry: ghcr.io
          username: ${{ secrets.GHCR_USERNAME }}
          password: ${{ secrets.GHCR_TOKEN }}

      - name: Extract Metadata for Docker
        id: meta
        uses: docker/metadata-action@v4
        with:
          images: ghcr.io/${{ secrets.GHCR_USERNAME }}/my-app
          tags: |
            type=ref,event=branch
            type=semver,pattern={{version}}
            latest

      - name: Build and Push Docker Image
        uses: docker/build-push-action@v4
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max
Giải thích các thành phần quan trọng trong Workflow:
• on: push: Kích hoạt workflow khi có hành động push code lên nhánh main hoặc khi tạo tag phiên bản mới (ví dụ: v1.0.0).
• docker/login-action: Thực hiện đăng nhập an toàn vào hệ thống ghcr.io bằng cách sử dụng các Secrets đã cấu hình ở Bước 2.
• docker/metadata-action: Tự động phân tích và gắn thẻ (tag) cho Docker Image (như tag latest hoặc theo số phiên bản của Git).
• cache-from / cache-to: Cấu hình cơ chế lưu bộ nhớ đệm (Cache) giúp tăng tốc độ build cho những lần tiếp theo lên gấp 5-10 lần.
---

Bước 4: Kiểm tra và Vận hành Hệ thống

Sau khi đã chuẩn bị xong file cấu hình và Dockerfile cho ứng dụng của bạn, hãy thực hiện lệnh git commit và git push lên Gitea Server:

git add .
git commit -m "feat: tích hợp Gitea Actions build Docker"
git push origin main

Ngay lập tức, bạn có thể chuyển sang giao diện Web của Gitea, vào tab Actions để theo dõi trực quan quá trình thực thi từng bước (Step-by-step). Nếu cấu hình chính xác, tất cả các bước sẽ hiển thị tích xanh thành công.

Cuối cùng, hãy truy cập vào mục Packages trên trang cá nhân hoặc Organization của bạn trên GitHub để kiểm tra Docker Image mới đã được đẩy lên thành công.

---

Những lưu ý bảo mật và tối ưu hiệu năng khi chạy trên VPS

Khi tự vận hành hệ thống CI/CD trên máy chủ riêng, doanh nghiệp cần lưu ý một số điểm mấu chốt sau để đảm bảo tính ổn định và an toàn:

  • Giới hạn tài nguyên của Act Runner: Mặc định, quá trình build Docker có thể ngốn rất nhiều CPU và RAM của VPS. Bạn nên cấu hình giới hạn tài nguyên (Docker cgroups) cho Gitea Runner để tránh làm ảnh hưởng đến các ứng dụng khác đang chạy trên cùng server.
  • Dọn dẹp Docker dữ liệu rác (Garbage Collection): Quá trình build liên tục sẽ sinh ra các layer thừa (dangling images). Hãy thiết lập một cronjob định kỳ trên VPS để chạy lệnh docker system prune -f nhằm giải phóng ổ cứng.
  • Bảo mật Runner: Luôn chạy Act Runner dưới quyền một user hạn chế, không sử dụng quyền root trực tiếp của hệ thống để giảm thiểu rủi ro bị tấn công leo thang đặc quyền qua container.
---

Kết luận

Xây dựng một hệ thống CI/CD khép kín và tự chủ với Gitea Actions hướng tới GitHub Container Registry là phương án cân bằng hoàn hảo giữa tính linh hoạt, tính kinh tế và hiệu suất quản trị hạ tầng. Nó giải phóng các kỹ sư phần mềm khỏi những tác vụ thủ công, đảm bảo mọi commit code đều được đóng gói chuẩn hóa và sẵn sàng triển khai lên môi trường Production một cách nhanh chóng và an toàn nhất.

Hướng Dẫn Cấu Hình Gitea Actions Tự Động Đóng Gói Và Đẩy Docker Image Lên GitHub Container Registry (GHCR) Từ VPS Riêng | DPTCloud