DevOps

Gitea Actions: CI/CD Self-Hosted Gratis Tanpa Batas Minutes 2026

Gitea Actions: CI/CD Self-Hosted Gratis Tanpa Batas Minutes 2026

GitHub Actions memang tools CI/CD paling populer di dunia dengan integrasi native ke GitHub, marketplace action yang lengkap, dan workflow file yang mudah dibaca. Namun ada masalah yang jarang dibahas: biaya. Untuk private repository, GitHub memberikan 2.000 menit gratis per bulan; public repository gratis tanpa batas, tetapi banyak project production — aplikasi klien, side project berbayar, internal tools — harus memakai private repo. Untuk project yang serius dengan multiple branches, frequent builds, dan matrix testing, kuota 2.000 menit itu habis dalam hitungan hari. Di Indonesia, dengan kurs $1 = Rp16.000, biaya GitHub Actions bisa signifikan bagi startup kecil dan freelancer.

Kasus nyatanya: sebuah project kantor menghabiskan hingga $47 per bulan hanya untuk GitHub Actions, belum termasuk storage artifact dan container registry yang juga punya limit. Solusinya adalah self-host CI/CD dengan Gitea Actions — biayanya bisa turun drastis hingga $0. Artikel ini memandu setup Gitea Actions dari nol, termasuk konfigurasi Docker runner yang menjalankan workflow di server sendiri. Yang menarik: Gitea Actions memakai syntax yang identik dengan GitHub Actions, jadi migrasinya drop-in — cukup copy-paste file workflow, ganti trigger dari webhook GitHub ke webhook Gitea, dan workflow langsung jalan.

Kenapa Gitea Actions? CI/CD Self-Hosted yang Sebenarnya Gratis

Gitea Actions adalah alternatif self-hosted untuk GitHub Actions yang menghilangkan biaya per-menit. Keunggulan utamanya ada di tiga hal: kontrol penuh atas infrastruktur runner, tanpa limit menit maupun concurrent job, dan kompatibilitas syntax penuh dengan GitHub Actions sehingga tim tidak perlu belajar workflow baru sama sekali. Semua biaya yang tadinya masuk tagihan cloud dialihkan ke VPS yang sudah dimiliki.

Apa itu Gitea Actions?

Gitea Actions adalah fitur CI/CD bawaan Gitea yang kompatibel dengan syntax GitHub Actions. Artinya, jika sudah punya workflow file untuk GitHub (.github/workflows/*.yml), file tersebut bisa langsung dipakai di Gitea dengan perubahan minimal.

Yang membuat Gitea Actions menarik:

  • Gratis tanpa batas — tidak ada menit usage limit
  • Syntax kompatibel dengan GitHub Actions — migrasi mudah
  • Self-hosted runner — infrastruktur sepenuhnya dikontrol sendiri
  • Acts engine — engine yang sama yang digunakan oleh GitHub Actions
  • Built-in ke Gitea — tidak perlu install tools tambahan

Prasyarat

  • Gitea sudah terinstall dan running (minimal versi 1.21+)
  • Docker terinstall di mesin yang sama atau terpisah
  • Akses admin ke Gitea instance

Jika belum punya Gitea, berikut quick setup. VPS murah seperti RackNerd sudah cukup untuk menjalankan Gitea beserta runner di skala kecil.

# docker-compose.yml untuk Gitea
version: '3'
services:
  gitea:
    image: gitea/gitea:latest
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=sqlite3
    volumes:
      - ./gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "2222:22"
    restart: always

docker compose up -d

Step 1: Install Gitea Runner (Docker)

Gitea Runner adalah aplikasi yang menerima job dari Gitea dan menjalankannya. Ada dua mode: Docker runner (recommended) dan binary runner. Panduan ini memakai Docker runner karena lebih isolated.

# Buat direktori untuk runner
mkdir -p /opt/gitea-runner && cd /opt/gitea-runner

# Generate token registration dari Gitea
# Menu: Site Administration → Runners → Create New Runner
# Copy token yang diberikan

# Jalankan runner dengan Docker
docker run -d \
  --name gitea-runner \
  --restart always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /opt/gitea-runner/data:/data \
  -e GITEA_INSTANCE_URL=http://your-gitea-host:3000 \
  -e GITEA_RUNNER_REGISTRATION_TOKEN=YOUR_TOKEN_HERE \
  -e GITEA_RUNNER_NAME=main-runner \
  -e GITEA_RUNNER_LABELS=ubuntu-latest:docker://node:20-bookworm,ubuntu-22.04:docker://ubuntu:22.04 \
  gitea/act_runner:latest

Labels menentukan image Docker yang dipakai untuk setiap runs-on di workflow. Konfigurasi ini bisa di-customize sesuai kebutuhan.

Step 2: Buat Workflow File

Di repo Gitea, buat file .gitea/workflows/ci.yml (atau .github/workflows/ci.yml jika memakai kompatibilitas GitHub):

# .gitea/workflows/ci.yml
name: CI Pipeline

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'
      
      - name: Install dependencies
        run: npm ci
      
      - name: Run tests
        run: npm test
      
      - name: Run linting
        run: npm run lint

  build:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
      
      - name: Install & Build
        run: |
          npm ci
          npm run build
      
      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: build-output
          path: dist/

Step 3: Deploy Workflow dengan Docker Compose

Untuk project yang lebih kompleks, runner bisa di-setup dengan Docker Compose yang lebih proper:

# docker-compose.yml untuk Gitea Runner
version: '3.8'
services:
  gitea-runner:
    image: gitea/act_runner:latest
    container_name: gitea-runner
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data:/data
    environment:
      - GITEA_INSTANCE_URL=http://gitea:3000
      - GITEA_RUNNER_REGISTRATION_TOKEN=${RUNNER_TOKEN}
      - GITEA_RUNNER_NAME=prod-runner
      - GITEA_RUNNER_LABELS=ubuntu-latest:docker://node:20-bookworm
      - GITEA_RUNNER_WORKSPACE=/data/workspace
    networks:
      - gitea-net

networks:
  gitea-net:
    external: true

Step 4: Konfigurasi Advanced — Caching & Artifacts

Salah satu concern dengan self-hosted runner adalah caching. Di GitHub Actions, cache disimpan di cloud storage. Di self-hosted, caching ditangani sendiri:

# .gitea/workflows/ci-with-cache.yml
name: CI with Caching

on: push

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      # Cache npm dependencies
      - name: Cache npm
        uses: actions/cache@v4
        with:
          path: ~/.npm
          key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-npm-
      
      - name: Install dependencies
        run: npm ci --prefer-offline
      
      - name: Build
        run: npm run build
      
      # Simpan build artifacts ke volume bersama
      - name: Save build artifacts
        run: |
          mkdir -p /data/artifacts/${{ github.sha }}
          cp -r dist/* /data/artifacts/${{ github.sha }}/

Memigrasikan dari GitHub Actions

Jika sudah punya workflow di GitHub, migrasi ke Gitea Actions cukup mudah:

  1. Copy seluruh folder .github/workflows/ ke .gitea/workflows/
  2. Ganti runs-on: ubuntu-latest jika menggunakan custom runner labels
  3. Ganti action references jika ada yang menggunakan GitHub-specific features
  4. Test setiap workflow secara individual

Yang perlu diperhatikan:

  • GITHUB_TOKEN → diganti dengan GITEA_TOKEN atau gunakan secrets
  • GitHub Container Registry → diganti dengan container registry sendiri
  • Beberapa actions mungkin belum kompatibel — cek dokumentasi Gitea

Monitoring dan Troubleshooting

# Cek status runner
docker logs gitea-runner --tail 50

# Restart runner jika stuck
docker restart gitea-runner

# Cek jobs yang sedang running
# Menu: Repository → Actions → Jobs

Untuk monitoring yang lebih lengkap, pertimbangkan setup Netdata + Grafana untuk memantau resource usage runner.

Untuk expose Gitea ke internet dengan HTTPS, pasang reverse proxy Nginx:

server {
  server_name git.example.com;
  listen 80;
  location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

Setelah itu aktifkan HTTPS dengan Certbot: sudo certbot --nginx -d git.example.com. Panduan lengkapnya ada di artikel TLS certificate dengan Certbot untuk self-hosted.

Tips Optimasi untuk Self-Hosted Runner

Self-hosted runner punya beberapa optimasi yang bisa di-tweak untuk performance terbaik:

Cache Layer

GitHub Actions punya cache built-in, tapi Gitea perlu setup manual. Gunakan Gitea sendiri sebagai cache backend — simpan artifact ke Gitea release, atau pakai external cache seperti Redis:

- name: Cache node_modules
  uses: actions/cache@v3
  with:
    path: node_modules
    key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}

Multi-Runner Setup

Untuk tim yang lebih besar, deploy multiple runner di beberapa VPS atau VM. Gitea otomatis distribute jobs ke runner yang available. Ini parallelism gratis — tidak ada limit concurrent jobs seperti di GitHub Actions free tier.

Custom Labels untuk Hardware Specific

Bikin runner dengan label khusus untuk hardware tertentu (GPU, RAM besar, ARM):

runs-on: [self-hosted, linux, gpu]
# Hanya jalan di runner yang punya label "gpu"

Pattern ini berguna untuk build yang butuh GPU (misalnya CUDA compilation) atau ARM64 (misalnya Apple Silicon cross-compile).

Security Hardening untuk Gitea

Self-hosted berarti self-managed security. Beberapa hal yang wajib di-setup:

  1. HTTPS only — pakai Certbot, redirect HTTP ke HTTPS, set header HSTS.
  2. Disable registration publik — untuk tim internal, disable open registration di admin settings.
  3. Two-factor authentication — enforce 2FA untuk semua user via admin policy.
  4. SSH key authentication — disable password login untuk SSH Git access.
  5. Regular backup — backup data volume /var/lib/gitea secara berkala.
  6. Update regularly — Gitea rilis update keamanan berkala, jangan skip.

Dengan setup security yang proper, Gitea self-hosted lebih aman dari GitHub-hosted — karena attack surface-nya kecil dan semua komponen dikontrol sendiri.

Use Case Lanjutan: Matrix Builds, Multi-Arch, dan Deployment

Salah satu kekuatan Gitea Actions yang sering di-underestimate: matrix builds yang cost-effective. GitHub Actions free tier membatasi ukuran matrix (misalnya 10 kombinasi), Gitea tidak punya limit:

strategy:
  matrix:
    node: [16, 18, 20]
    os: [ubuntu-latest, windows-latest, macos-latest]
steps:
  - uses: actions/setup-node@v4
    with:
      node-version: ${{ matrix.node }}

Untuk deployment, Gitea Actions bisa langsung deploy ke VPS via SSH, atau push image Docker ke private registry. Pattern umum:

- name: Deploy to production
  uses: appleboy/[email protected]
  with:
    host: ${{ secrets.PROD_HOST }}
    username: ${{ secrets.PROD_USER }}
    key: ${{ secrets.PROD_SSH_KEY }}
    script: |
      cd /opt/myapp
      git pull
      docker compose restart

Setup ini membentuk full CI/CD pipeline yang powerful dengan biaya infrastruktur minimal — cukup VPS yang sudah ada, plus listrik. Untuk panduan deploy static site ke VPS dengan Nginx dan HTTP/3, lihat artikel deploy static site dengan Nginx + HTTP/3.

Biaya Operasional

ItemGitHub ActionsGitea Self-Hosted
CI/CD minutes2000/mo gratis, $0.008/menit setelahnyaUnlimited, $0
Storage artifacts500MB gratisUnlimited (local disk)
Container registry500MB gratisUnlimited (local)
VPS cost$0 tambahanVPS existing
Total (5000 min/bulan)~$24/bulan$0 tambahan

Untuk startup Indonesia yang menjalankan 10-20 builds per hari, Gitea Actions bisa menghemat Rp300.000-500.000 per bulan dibanding GitHub Actions.

Biaya VPS-nya sendiri juga bisa ditekan — sewa VPS murah seperti RackNerd yang harganya mulai puluhan ribu rupiah per bulan, sehingga total biaya operasional tetap mendekati $0.

Kesimpulan

Gitea Actions bukan cuma "GitHub Actions tapi gratis" — ini adalah ekosistem CI/CD self-hosted yang mature dan production-ready, dengan syntax yang familiar, ekosistem action yang kompatibel, dan fleksibilitas yang lebih besar dari platform-hosted. Untuk startup Indonesia dan tim kecil yang ingin kontrol penuh atas infrastruktur dengan budget terbatas, Gitea Actions adalah pilihan yang sangat solid.

Dengan setup yang relatif sederhana, pipeline CI/CD yang scalable bisa dibangun tanpa biaya tambahan. Investasi waktu untuk setup awal akan terbayar lunas dalam hitungan bulan — terutama untuk tim yang sering melakukan deployment dan developer Indonesia yang ingin menekan biaya infrastruktur cloud.

Sumber dan Validasi

Artikel ini disusun berdasarkan dokumentasi resmi Gitea Actions dan GitHub Actions. Angka kuota free tier mengikuti kebijakan resmi masing-masing platform.

Catatan: Artikel ini disusun berdasarkan dokumentasi resmi Gitea dan GitHub Actions. Angka biaya bersifat estimasi dan mengikuti kebijakan harga masing-masing platform.

💬 Komentar (0)

Belum ada komentar. Jadilah yang pertama! 💬

Komentar akan muncul setelah moderasi.