Hướng Dẫn Cấu Hình Gitea Actions Trên VPS Riêng: Tự Động Đóng Gói Và Đẩy Docker Image Lên GitHub Container Registry (GHCR)
Giới thiệu về Gitea Actions và Xu Hướng Tự Động Hóa CI/CD
Trong kỷ nguyên chuyển đổi số và phát triển phần mềm hiện đại, việc tối ưu hóa quy trình Tích hợp liên tục và Triển khai liên tục (CI/CD) đã trở thành yếu tố then chốt quyết định sự thành bại của một dự án công nghệ. Đối với các doanh nghiệp vừa và nhỏ (SMEs) hoặc các đội ngũ phát triển độc lập, việc tìm kiếm một giải pháp CI/CD vừa mạnh mẽ, bảo mật, vừa tiết kiệm chi phí là một bài toán hóc búa. GitHub Actions hay GitLab CI là những lựa chọn tuyệt vời nhưng thường đi kèm với giới hạn về chi phí hoặc tài nguyên ở các phiên bản miễn phí.
Sự ra đời của Gitea Actions (từ phiên bản Gitea 1.19) đã thay đổi hoàn toàn cuộc chơi. Là một nền tảng Git tự lưu trữ (self-hosted) siêu nhẹ, Gitea hiện nay không chỉ là nơi lưu trữ mã nguồn mà còn tích hợp sẵn hệ thống CI/CD mạnh mẽ, sử dụng cú pháp workflow tương thích cao với GitHub Actions. Bài viết này sẽ hướng dẫn chi tiết cách cấu hình Gitea Actions trên máy chủ ảo cá nhân (VPS) riêng để tự động đóng gói (build) và đẩy (push) Docker Image lên GitHub Container Registry (GHCR), giúp bạn làm chủ hạ tầng công nghệ của chính mình.
Tại sao nên kết hợp Gitea Actions với GitHub Container Registry (GHCR)?
Việc kết hợp một công cụ quản lý mã nguồn nội bộ (Gitea) với một kho lưu trữ image toàn cầu (GHCR) mang lại những lợi ích chiến lược cho doanh nghiệp:
- Tối ưu hóa tài nguyên VPS: Quy trình build Docker Image tiêu tốn rất nhiều CPU và RAM. Bằng cách đẩy sản phẩm hoàn thiện lên GHCR, VPS của bạn không cần gánh thêm tải trọng lưu trữ các file image nặng hàng Gigabyte.
- Bảo mật tối đa: Mã nguồn và các bước kiểm thử nội bộ được thực hiện an toàn trên VPS riêng, giảm thiểu nguy cơ rò rỉ dữ liệu qua bên thứ ba.
- Tận dụng hệ sinh thái GitHub: GHCR là một registry mạnh mẽ, có độ sẵn sàng cao (high availability) và tích hợp mượt mà với các hệ thống Kubernetes hoặc Docker Swarm khi triển khai thực tế.
Chuẩn bị môi trường trước khi cấu hình
Để quá trình cài đặt diễn ra suôn sẻ, bạn cần chuẩn bị sẵn các thành phần sau:
- Một máy chủ VPS riêng (Ubuntu 22.04 LTS hoặc mới hơn được khuyến khích) đã cài đặt sẵn Docker và Docker Compose.
- Một instance Gitea đang hoạt động ổn định trên VPS.
- Một tài khoản GitHub và một Personal Access Token (PAT) có quyền
write:packagesvàread:packagesđể phân quyền cho Gitea đẩy image lên GHCR.
Bước 1: Kích hoạt Gitea Actions trên Gitea Instance
Mặc dù Gitea đã tích hợp sẵn Actions, tính năng này thường bị tắt mặc định để tiết kiệm tài nguyên hệ thống. Để kích hoạt, bạn cần chỉnh sửa file cấu hình chính của Gitea (thường là app.ini).
Mở file app.ini và thêm đoạn cấu hình sau:
[actions]ENABLED = true
Sau khi chỉnh sửa, hãy tiến hành khởi động lại dịch vụ Gitea bằng lệnh: sudo systemctl restart gitea hoặc tái khởi động container Docker tương ứng. Khi truy cập lại giao diện quản trị Gitea, bạn sẽ thấy mục "Actions" xuất hiện trong phần cài đặt của hệ thống và kho lưu trữ.
Bước 2: Triển khai Gitea Actions Runner (Act Runner) trên VPS
Gitea Actions cần một thành phần độc lập gọi là Act Runner để trực tiếp thực thi các tác vụ trong workflow. Chúng ta sẽ triển khai Act Runner bằng Docker Compose để dễ dàng quản lý.
1. Lấy Token đăng ký (Registration Token)
Truy cập vào giao diện Gitea của bạn, đi đến mục Site Administration -> Actions -> Runners (Quản trị hệ thống -> Actions -> Trình chạy) và nhấp vào Create New Runner. Hãy sao chép chuỗi Token hiển thị trên màn hình.
2. Tạo file cấu hình Docker Compose cho Act Runner
Tạo một thư mục mới trên VPS và tạo file docker-compose.yml với nội dung sau:
version: "3.8"services: runner: image: gitea/act_runner:latest environment: - GITEA_INSTANCE_URL=http:// - GITEA_RUNNER_REGISTRATION_TOKEN= - GITEA_RUNNER_NAME=vps-internal-runner - GITEA_RUNNER_LABELS=ubuntu-latest:docker://node:16-bullseye,ubuntu-22.04:docker://node:16-bullseye volumes: - /var/run/docker.sock:/var/run/docker.sock - ./data:/data restart: always
Lưu ý quan trọng: Việc gắn file volume /var/run/docker.sock cho phép Act Runner sử dụng chính cơ chế Docker của VPS để build các Docker Image bên trong môi trường cô lập (Docker-in-Docker).
Chạy lệnh docker compose up -d để khởi chạy Runner. Kiểm tra lại trong giao diện Gitea, nếu trạng thái hiển thị màu xanh (Idle/Active) tức là bạn đã cấu hình thành công.
Bước 3: Cấu hình Secrets và Variables trên Gitea Repo
Để bảo mật thông tin đăng nhập vào GitHub Container Registry, chúng ta tuyệt đối không ghi trực tiếp mật khẩu vào mã nguồn. Thay vào đó, hãy sử dụng tính năng Secrets của Gitea.
Đi tới kho lưu trữ (Repository) của bạn trên Gitea, vào mục Settings -> Secrets -> Actions và thêm các biến sau:
GHCR_USERNAME: Tên đăng nhập tài khoản GitHub của bạn.GHCR_PAT: Chuỗi Personal Access Token của GitHub đã tạo ở bước chuẩn bị.
Bước 4: Viết Workflow tự động đóng gói và đẩy Docker Image
Bây giờ là bước quan trọng nhất: Định nghĩa quy trình CI/CD. Trong kho lưu trữ nguồn của bạn trên Gitea, tạo một thư mục có cấu trúc: .gitea/workflows/ và tạo một file có tên build-push-ghcr.yml.
name: Build and Push Docker Image to GHCRon: push: branches: - main jobs: build-and-push: runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkout@v3 - name: Log in to GitHub Container Registry run: echo "${{ secrets.GHCR_PAT }}" | docker login ghcr.io -u ${{ secrets.GHCR_USERNAME }} --password-stdin - name: Build Docker Image run: | IMAGE_NAME=ghcr.io/${{ secrets.GHCR_USERNAME }}/my-app:latest docker build -t $IMAGE_NAME . - name: Push Image to GHCR run: | IMAGE_NAME=ghcr.io/${{ secrets.GHCR_USERNAME }}/my-app:latest docker push $IMAGE_NAME
Đoạn mã trên định nghĩa rằng: Mỗi khi có một hành động push mã nguồn mới lên nhánh main, Gitea Actions sẽ tự động kích hoạt Runner trên VPS để tải mã nguồn về, đăng nhập vào hệ thống GHCR thông qua Secret bí mật, tiến hành build Dockerfile có sẵn trong project và đẩy sản phẩm lên kho lưu trữ đám bầy GitHub.
Kiểm tra kết quả và Đánh giá hiệu năng
Sau khi hoàn tất việc tạo file workflow, hãy thực hiện lệnh git commit và git push lên nhánh main. Truy cập ngay vào tab Actions trên giao diện Gitea, bạn sẽ thấy một tiến trình (pipeline) đang được thực thi theo thời gian thực.
Nếu tất cả các bước hiển thị tích xanh lá cây, hãy truy cập vào tài khoản GitHub của bạn, kiểm tra mục Packages. Bạn sẽ thấy Docker Image mới nhất của mình đã nằm an toàn trên hệ thống của GitHub, sẵn sàng cho việc kéo về (pull) và triển khai ở bất kỳ cụm máy chủ sản xuất (Production Server) nào.
Lời kết
Việc làm chủ công nghệ và tự xây dựng hệ thống CI/CD bằng Gitea Actions trên VPS riêng giúp doanh nghiệp tiết kiệm chi phí vận hành đáng kể, đồng thời tăng cường tính bảo mật và quyền kiểm soát dữ liệu. Sự linh hoạt trong việc kết hợp hiệu năng của VPS nội bộ và tính ổn định của GitHub Container Registry (GHCR) chính là chìa khóa giúp tối ưu hóa quy trình DevOps của bạn lên một tầm cao mới. Hãy áp dụng ngay giải pháp này vào dự án tiếp theo của bạn để trải nghiệm sự mượt mà của tự động hóa!
