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

29 tháng 5, 2026

Giới thiệu về xu hướng tự động hóa CI/CD với Gitea Actions

Trong kỷ nguyên DevOps hiện đại, 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 một tiêu chuẩn bắt buộc đối với mọi đội ngũ phát triển phần mềm. Quy trình này không chỉ giúp giảm thiểu sai sót do con người gây ra mà còn tối ưu hóa tốc độ đưa sản phẩm ra thị trường. Gitea, một nền tảng quản lý mã nguồn Git gọn nhẹ và mạnh mẽ, đã giới thiệu Gitea Actions – một tính năng CI/CD mạnh mẽ được thiết kế tương thích cao với cú pháp của GitHub Actions.

Bài viết này sẽ hướng dẫn bạn từng bước cấu hình Gitea Actions trên máy chủ ảo cá nhân (VPS) để tự động hóa quy trình xây dựng (build) và đẩy (push) Docker Image lên GitHub Container Registry (GHCR). Đây là một giải pháp hoàn hảo cho các doanh nghiệp vừa và nhỏ hoặc lập trình viên độc lập muốn sở hữu một hệ thống CI/CD độc lập, bảo mật nhưng vẫn tận dụng được hạ tầng lưu trữ Docker Image mạnh mẽ, miễn phí của GitHub.

Tại sao nên kết hợp Gitea Actions và GitHub Container Registry?

Việc kết hợp một công cụ quản lý mã nguồn tự lưu trữ (Self-hosted) như Gitea với một dịch vụ lưu trữ image đám mây như GHCR mang lại nhiều lợi ích chiến lược cho doanh nghiệp:

  • Tiết kiệm tài nguyên VPS: Quy trình xây dựng Docker Image diễn ra ngay trên VPS của bạn thông qua Gitea Runner, trong khi việc lưu trữ các tệp tin Image nặng hàng Gigabyte được chuyển giao hoàn toàn cho GitHub, giúp tiết kiệm dung lượng ổ cứng tối đa.
  • Tương thích mã nguồn mở: Gitea Actions sử dụng định dạng YAML tương tự GitHub Actions, giúp đội ngũ kỹ sư dễ dàng tiếp cận mà không mất thời gian học một cú pháp hoàn toàn mới như Jenkins hay Gitlab CI.
  • Bảo mật dữ liệu tuyệt đối: Mã nguồn dự án được lưu trữ nội bộ trên VPS riêng của bạn, giảm thiểu rủi ro rò rỉ thông tin từ các nền tảng bên thứ ba.

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

Để đảm bảo quá trình cấu hình diễn ra suôn sẻ, hệ thống của bạn cần đáp ứng các yêu cầu kỹ thuật cơ bản sau:

  1. Một máy chủ VPS đã cài đặt sẵn Gitea (phiên bản 1.19 trở lên) và đã kích hoạt tính năng Gitea Actions trong tệp cấu hình app.ini.
  2. Một Gitea Runner (act_runner) đã được đăng ký thành công và đang hoạt động ở trạng thái Idle trên VPS.
  3. Tài khoản GitHub cá nhân hoặc tổ chức để truy cập và khởi tạo mã thông báo trên GitHub Container Registry.
  4. Dự án của bạn đã có sẵn một tệp Dockerfile chuẩn hóa nằm ở thư mục gốc của kho lưu trữ.

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

Để Gitea Actions trên VPS của bạn có quyền đẩy Docker Image lên GitHub Container Registry, bạn cần cấp quyền truy cập thông qua một mã thông báo bảo mật (PAT). Hãy thực hiện theo các bước sau:

Lưu ý bảo mật: Tuyệt đối không chia sẻ mã thông báo này với bất kỳ ai và chỉ cấp đúng các quyền hạn tối thiểu cần thiết để đảm bảo an toàn thông tin.

  • Truy cập vào tài khoản GitHub của bạn, đi tới phần Settings > Developer Settings > Personal Access Tokens > Tokens (classic).
  • Nhấn chọn Generate new token (classic).
  • Đặt tên gợi nhớ cho mã thông báo này tại mục Note (ví dụ: gitea-vps-ghcr-token).
  • Tại phần chọn phạm vi quyền (Scopes), bạn bắt buộc phải tích chọn quyền write:packages (quyền này tự động kích hoạt quyền read:packages) để cho phép đẩy gói lên registry.
  • Cuối cùng, nhấn Generate token và sao chép chuỗi ký tự được hiển thị. Hãy lưu nó vào một nơi an toàn vì bạn sẽ không thể xem lại mã này lần thứ hai.

Bước 2: Cấu hình Secrets trong kho lưu trữ Gitea

Sau khi đã có mã thông báo từ GitHub, bạn cần tích hợp nó vào hệ thống quản lý biến môi trường bảo mật (Secrets) của Gitea để tệp cấu hình CI/CD có thể gọi ra sử dụng một cách an toàn.

Hãy truy cập vào kho lưu trữ dự án trên Gitea của bạn, điều hướng đến mục Settings > Actions > Secrets và tiến hành thêm hai biến cấu hình mới:

  • GHCR_USERNAME: Tên đăng nhập tài khoản GitHub của bạn (viết thường).
  • GHCR_TOKEN: Dán chuỗi ký tự Personal Access Token (PAT) mà bạn vừa khởi tạo và sao chép ở Bước 1.

Việc sử dụng Secrets đảm bảo rằng thông tin đăng nhập quan trọng không bao giờ bị lộ dưới dạng văn bản thuần túy trong mã nguồn công khai.

Bước 3: Xây dựng tệp cấu hình Workflow Gitea Actions

Bây giờ là bước quan trọng nhất: Khởi tạo quy trình tự động hóa. Trong thư mục gốc của dự án, bạn hãy tạo một cấu trúc thư mục chính xác như sau: .gitea/workflows/deploy.yml. Tiến hành thêm đoạn mã cấu hình YAML chi tiết dưới đây vào tệp tin:

name: Build and Push Docker Image to GHCR

on:
  push:
    branches:
      - main

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout mã nguồn từ VPS
        uses: actions/checkout@v3

      - name: Đăng nhập vào GitHub Container Registry
        uses: docker/login-action@v2
        with:
          registry: ghcr.io
          username: ${{ secrets.GHCR_USERNAME }}
          password: ${{ secrets.GHCR_TOKEN }}

      - name: Trích xuất thông tin Metadata cho Docker
        id: meta
        uses: docker/metadata-action@v4
        with:
          images: ghcr.io/${{ secrets.GHCR_USERNAME }}/my-app
          tags: |
            type=ref,event=branch
            type=sha,format=short
            latest

      - name: Thiết lập Docker Buildx
        uses: docker/setup-buildx-action@v2

      - name: Xây dựng và Đẩy Docker Image lên GHCR
        uses: docker/build-push-action@v4
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}

Hãy cùng phân tích sâu hơn các thành phần cốt lõi trong đoạn mã cấu hình trên:

  • on.push.branches: Chỉ định rằng quy trình CI/CD sẽ chỉ tự động kích hoạt khi có hành động đẩy mã nguồn (push) hoặc gộp nhánh (merge) vào nhánh chính main.
  • runs-on: ubuntu-latest: Định hướng cho Gitea Runner sử dụng môi trường hệ điều hành Ubuntu để thực thi các tác vụ xây dựng.
  • docker/login-action: Tiền hành đăng nhập vào máy chủ ghcr.io bằng cách sử dụng các thông tin xác thực an toàn được lấy từ kho lưu trữ Secrets mà bạn đã thiết lập ở bước trước.
  • docker/build-push-action: Tác vụ cốt lõi chịu trách nhiệm đọc tệp Dockerfile, tiến hành biên dịch mã nguồn thành Docker Image, gắn thẻ phiên bản (tags) theo mã băm Git rút gọn (SHA) và tiến hành đẩy trực tiếp lên hệ sinh thái lưu trữ của GitHub.

Bước 4: Kiểm tra và vận hành quy trình tự động hóa

Khi tệp cấu hình đã sẵn sàng, hãy thực hiện một lệnh git commit và git push mã nguồn mới lên nhánh main của Gitea trên VPS. Ngay lập tức, bạn truy cập vào giao diện web của Gitea, chọn tab Actions để theo dõi trực quan trạng thái thực thi của quy trình.

Hệ thống sẽ hiển thị tiến trình chạy theo thời gian thực của từng bước: từ việc tải mã nguồn, thiết lập môi trường Docker Buildx cho đến bước nén và đẩy dữ liệu lên đám mây. Nếu tất cả các biểu tượng chuyển sang màu xanh lá cây, quy trình của bạn đã thành công tốt đẹp.

Cuối cùng, bạn hãy truy cập vào mục Packages trên trang cá nhân GitHub của mình để kiểm tra. Tại đây, bạn sẽ thấy Docker Image mới nhất đã được đẩy lên kèm theo các thẻ phiên bản chi tiết tương ứng với commit trên Gitea.

Kết luận và các lưu ý tối ưu hóa hiệu năng

Cấu hình thành công Gitea Actions để tự động đóng gói và đẩy Docker Image lên GitHub Container Registry giúp bạn hoàn thiện một vòng lặp phát triển phần mềm khép kín, an toàn và chuyên nghiệp. Để hệ thống hoạt động ổn định và lâu dài trên VPS riêng, doanh nghiệp nên lưu ý một số điểm tối ưu sau:

  • Dọn dẹp tài nguyên định kỳ: Hãy cấu hình lệnh cron-job trên VPS để dọn dẹp các Docker layer đệm thừa bằng lệnh docker system prune -f, tránh tình trạng đầy ổ cứng máy chủ.
  • Quản lý phiên bản Image chặt chẽ: Tránh việc lạm dụng thẻ latest trong môi trường sản xuất (Production). Hãy ưu tiên sử dụng thẻ dựa trên mã băm Git (Git SHA) để dễ dàng kiểm soát lỗi và rollback hệ thống khi có sự cố xảy ra.

Hy vọng bài viết này mang lại những kiến thức hữu ích cho lộ trình tối ưu hóa hạ tầng DevOps của bạn. Chúc các bạn cấu hình thành công!

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