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ề Gitea Actions và Xu hướng CI/CD Tự Chủ

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 dự án phần mềm. Nếu như GitHub Actions hay GitLab CI đã quá quen thuộc với chi phí vận hành lớn hoặc phụ thuộc vào hạ tầng đám mây của bên thứ ba, thì Gitea Actions nổi lên như một giải pháp thay thế hoàn hảo cho các nhà phát triển và doanh nghiệp muốn tự chủ hạ tầng (Self-hosted).

Gitea Actions tương thích mạnh mẽ với cú pháp YAML của GitHub Actions, cho phép bạn tận dụng lại các Action sẵn có trên Marketplace mà không cần học một cú pháp mới. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách thiết lập Gitea Actions trên một máy chủ ảo (VPS) riêng, cấu hình quy trình CI/CD để tự động đóng gói (build) ứng dụng thành Docker Image, và đẩy (push) trực tiếp lên GitHub Container Registry (GHCR).

Chuẩn bị Hệ thống và Điều kiện Cần thiết

Để đả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 cơ bản sau:

  • Một VPS riêng (Ubuntu 22.04 LTS hoặc mới hơn): Đã cài đặt sẵn Docker và Docker Compose.
  • Một thực thể Gitea (Gitea Instance): Phiên bản 1.19 trở lên (quy định bắt đầu hỗ trợ Gitea Actions).
  • Tài khoản GitHub: Để cấu hình và lưu trữ Docker Image trên GitHub Container Registry.
  • Quyền quản trị viên: Truy cập SSH vào VPS để thiết lập Gitea Runner.

Bước 1: Kích hoạt Gitea Actions và Cấu hình Gitea Runner

Mặc định, tính năng Actions trên Gitea có thể chưa được bật. Bạn cần chỉnh sửa tệp cấu hình chính của Gitea (thường là app.ini) để kích hoạt nó.

Kích hoạt Actions trên Gitea

Mở tệp cấu hình Gitea bằng trình chỉnh sửa mã (ví dụ: nano) và thêm đoạn mã sau:

[actions]ENABLED = true

Sau khi lưu tệp, hãy khởi động lại dịch vụ Gitea để áp dụng các thay đổi mới.

Cài đặt Gitea Runner trên VPS

Gitea sử dụng một thành phần gọi là act_runner để thực thi các công việc trong quy trình CI/CD. Chúng ta sẽ triển khai Runner này bằng Docker Compose để dễ dàng quản lý. Tạo một thư mục mới và chuẩn bị tệp docker-compose.yml cho runner:

version: '3.8'services:  runner:    image: gitea/act_runner:latest    environment:      - GITEA_INSTANCE_URL=https://gitea.yourdomain.com      - GITEA_RUNNER_REGISTRATION_TOKEN=MA_TOKEN_CUA_BAN    volumes:      - ./data:/data      - /var/run/docker.sock:/var/run/docker.sock    restart: always

Lưu ý: Bạn cần truy cập vào giao diện quản trị Gitea (Site Administration -> Actions -> Runners) để lấy mã Registration Token và thay thế vào cấu hình trên. Khởi chạy Runner bằng lệnh: docker compose up -d.

Bước 2: Tạo GitHub Personal Access Token (PAT) cho GHCR

Để Gitea Actions có quyền đẩy Docker Image lên GitHub Container Registry, bạn cần cấp một mã xác thực bảo mật từ tài khoản GitHub của mình.

  1. Truy cập GitHub, vào phần Settings -> Developer Settings -> Personal Access Tokens -> Tokens (classic).
  2. Nhấp chọn Generate new token (classic).
  3. Đặt tên gợi nhớ cho token và chọn phạm vi quyền hạn (Scopes). Bạn bắt buộc phải tích chọn quyền write:packages, read:packages và delete:packages.
  4. Nhấp Generate token và sao lưu mã token này ở nơi an toàn. Bạn sẽ không thể nhìn thấy lại nó lần thứ hai.

Bước 3: Cấu hình Secrets bảo mật trong Gitea Repository

Để tránh việc lộ lọt thông tin nhạy cảm như tên đăng nhập và token của GitHub trong mã nguồn, Gitea cung cấp tính năng Secrets. Hãy truy cập vào Kho lưu trữ (Repository) của bạn trên Gitea, chọn Settings -> Actions -> Secrets và thêm hai biến sau:

  • GH_USERNAME: Tên tài khoản GitHub của bạn (ví dụ: tech-admin).
  • GH_PAT: Mã Personal Access Token vừa khởi tạo ở Bước 2.

Bước 4: Viết Quy trình Tự động hóa CI/CD (Workflow YAML)

Bây giờ là bước quan trọng nhất: Định nghĩa quy trình build và push. Trong thư mục gốc của dự án trên Gitea, hãy tạo cấu trúc thư mục .gitea/workflows/ và tạo một tệp có tên là build-push.yml.

Cấu trúc tệp cấu hình YAML chi tiết như sau:

name: Build and Push Docker Image to GHCRon:  push:    branches:      - main    tags:      - 'v*'jobs:  build-and-push:    runs-on: ubuntu-latest    steps:      - name: Checkout Source 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.GH_USERNAME }}          password: ${{ secrets.GH_PAT }}      - name: Extract Metadata for Docker        id: meta        uses: docker/metadata-action@v4        with:          images: ghcr.io/${{ secrets.GH_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 }}

Giải thích chi tiết các bước trong Workflow:

Đoạn cấu hình trên tự động hóa hoàn toàn các thao tác thủ công của lập trình viên:

  • on.push: Kích hoạt quy trình bất cứ khi nào có mã nguồn mới được đẩy lên nhánh main hoặc khi có một thẻ phiên bản (tag) mới được tạo (ví dụ: v1.0.0).
  • docker/login-action: Thực hiện đăng nhập an toàn vào hệ sinh thái ghcr.io bằng các thông tin Secret đã cấu hình.
  • docker/metadata-action: Tự động phân tích và sinh ra các thẻ (tags) cho Docker Image dựa trên tên nhánh hoặc số phiên bản mã nguồn, tránh xung đột dữ liệu.
  • docker/build-push-action: Tiến hành biên dịch Dockerfile trong thư mục hiện hành và đẩy trực tiếp thành phẩm lên hạ tầng lưu trữ của GitHub.

Bước 5: Thử nghiệm và Giám sát Kết quả Triển khai

Để kiểm tra hệ thống, hãy thực hiện một thay đổi nhỏ trong mã nguồn ứng dụng của bạn, sau đó tiến hành commit và push lên nhánh main trên Gitea Server.

Ngay lập tức, hãy chuyển sang tab Actions trên giao diện web của Gitea. Bạn sẽ thấy một tiến trình (Workflow Run) mới xuất hiện ở trạng thái In Progress. Nhấp vào tiến trình để theo dõi trực tiếp logs thực thi của từng bước từ việc kéo mã nguồn, chuẩn bị môi trường Docker, cho đến giai đoạn truyền tải các layer dữ liệu lên mạng lưới của GitHub Container Registry.

Khi tất cả các bước hiển thị dấu tích xanh thành công, hãy truy cập vào mục Packages trên trang cá nhân hoặc tổ chức GitHub của bạn. Bạn sẽ thấy Docker Image mới đã được hiển thị sẵn sàng với đầy đủ phiên bản gắn thẻ, sẵn sàng để kéo về và triển khai ở bất kỳ máy chủ sản xuất (Production Server) nào.

Kết luận và Tối ưu hóa Bảo mật

Việc kết hợp giữa Gitea Actions và GitHub Container Registry mang lại một giải pháp CI/CD cân bằng hoàn hảo: Bạn vừa giữ được tính riêng tư và tiết kiệm tài nguyên khi lưu trữ mã nguồn trên VPS cá nhân, vừa tận dụng được hạ tầng mạng lưới CDN phân phối Docker Image tốc độ cao và hoàn toàn miễn phí của GitHub.

Để nâng cao tính an toàn khi vận hành hệ thống dài hạn, doanh nghiệp nên lưu ý định kỳ thu hồi và làm mới (rotate) các chuỗi mã thông báo GitHub PAT, đồng thời cấu hình giới hạn tài nguyên CPU/RAM thích hợp cho act_runner trên VPS nhằm tránh làm ảnh hưởng đến các dịch vụ cốt lõi khác đang chạy song song.

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