Self-Hosted Git Server: Alternatif GitHub Terbaik

by Marcus Chen

GitHub bukan satu-satunya pilihan. Ini bukan opini radikal — ini fakta yang sering dilupakan developer karena GitHub sudah terlalu nyaman jadi default.

Masalahnya mulai terasa ketika kamu solo engineer atau tim kecil yang harus bayar $4/user/bulan untuk GitHub Teams, atau ketika klien minta semua kode disimpan di infrastruktur sendiri karena alasan compliance. Atau yang paling klasik: kamu capek bergantung pada platform yang bisa ubah harga kapan saja, seperti yang terjadi Maret 2023 ketika GitHub menghapus free unlimited private repos untuk org.

Artikel ini bukan tentang "GitHub jelek". GitHub bagus. Tapi kalau kamu engineer yang sudah mulai mikirin kontrol penuh atas infrastruktur dev kamu sendiri, ada beberapa self-hosted git server alternative github yang layak dipertimbangkan — dan saya akan kasih tahu mana yang saya pakai sendiri, kenapa, dan bagaimana setup minimalnya.

Kenapa Self-Hosted Git Server Masuk Akal

Sebelum masuk ke pilihan, saya mau jujur: self-hosting bukan gratis. Ada biaya VPS, waktu maintenance, dan mental overhead kalau server down jam 2 pagi. Tapi ada beberapa skenario di mana biaya itu worth it:

  • Kontrol data penuh. Kode kamu, di server kamu, di negara yang kamu pilih.
  • Biaya lebih prediktif. VPS $6/bulan bisa handle puluhan repo tanpa per-seat pricing.
  • Fitur yang di-lock di tier berbayar GitHub — seperti advanced code search atau audit log — kadang sudah tersedia gratis di self-hosted alternatif.
  • Integrasi internal. Kalau kamu punya stack self-hosted lain (Drone CI, Nextcloud, Authentik), git server lokal jauh lebih mudah diintegrasikan.

Saya sendiri pindah ke self-hosted setelah tagihan GitHub org saya naik dari $0 ke $16/bulan karena perubahan kebijakan. Kecil memang, tapi prinsipnya yang ganggu.

Tiga Pilihan Utama yang Saya Pertimbangkan

Gitea

Gitea adalah fork dari Gogs, ditulis dalam Go, dan ini yang paling sering saya rekomendasikan ke orang yang baru mau self-host git. Binary tunggal, RAM usage di bawah 100MB saat idle, dan bisa jalan di VPS $6/bulan dari Hetzner atau Vultr.

Fitur yang relevan:

  • Pull request, issue tracker, wiki, project board
  • Actions (kompatibel dengan GitHub Actions syntax sejak Gitea 1.19)
  • Package registry (npm, Docker, PyPI, dll.) sejak versi 1.17
  • OAuth2 provider bawaan

Setup paling cepat pakai Docker:

# docker-compose.yml
version: "3"
services:
  gitea:
    image: gitea/gitea:1.21.4
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=postgres
      - GITEA__database__HOST=db:5432
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=ganti_ini
    volumes:
      - ./gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "222:22"
    depends_on:
      - db

  db:
    image: postgres:16
    environment:
      - POSTGRES_USER=gitea
      - POSTGRES_PASSWORD=ganti_ini
      - POSTGRES_DB=gitea
    volumes:
      - ./postgres:/var/lib/postgresql/data

Jalankan docker compose up -d, buka http://localhost:3000, selesai setup wizard, dan kamu punya git server yang fully functional dalam 5 menit. Saya pakai ini untuk proyek personal dan client work yang butuh private repo.

Kekurangan Gitea: UI-nya fungsional tapi tidak secantik GitLab. Gitea Actions masih ada beberapa edge case yang belum kompatibel 100% dengan GitHub Actions. Kalau kamu banyak pakai reusable workflows, siap-siap ada penyesuaian.

Forgejo

Forgejo adalah fork dari Gitea yang lahir akhir 2022 setelah komunitas khawatir dengan arah komersialisasi Gitea (Gitea Inc. dibentuk tanpa banyak komunikasi ke kontributor). Forgejo dikelola oleh komunitas dengan governance yang lebih transparan.

Secara teknis, Forgejo dan Gitea hampir identik di permukaan. Perbedaan mulai terasa di:

  • Forgejo Actions — lebih aktif dikembangkan untuk kompatibilitas CI
  • Federation — Forgejo sedang mengerjakan ActivityPub federation, artinya repo di instance berbeda bisa saling berinteraksi (masih experimental di v7.x)
  • Filosofi. Kalau kamu peduli dengan software governance dan tidak mau bergantung pada vendor, Forgejo lebih aligned.

Deploy Forgejo sama persis dengan Gitea, tinggal ganti image:

image: codeberg.org/forgejo/forgejo:7.0

Saya mulai migrasi beberapa repo ke Forgejo karena fitur federation-nya menarik untuk masa depan. Tapi untuk production sekarang, keduanya setara.

GitLab CE

GitLab Community Edition adalah pilihan paling "enterprise-grade" di antara ketiganya. Fiturnya lengkap: CI/CD bawaan yang mature, container registry, dependency scanning, merge request approval rules, dan masih banyak lagi.

Tapi ada harga yang harus dibayar:

  • RAM minimum 4GB, rekomendasi 8GB. GitLab bukan untuk VPS $6/bulan.
  • Setup lebih kompleks. Meski ada omnibus package yang menyederhanakan instalasi, kamu tetap perlu maintenance lebih serius.
  • Startup time lambat. Pada VPS 4GB, GitLab butuh 3-5 menit untuk fully ready setelah reboot.

Instalasi GitLab CE di Ubuntu 22.04:

# Install dependencies
sudo apt-get install -y curl openssh-server ca-certificates

# Tambah GitLab repository
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

# Install (ganti dengan domain kamu)
sudo EXTERNAL_URL="https://git.domain-kamu.com" apt-get install gitlab-ce

# Ambil password root awal
sudo cat /etc/gitlab/initial_root_password

GitLab CE masuk akal kalau kamu tim 5+ orang yang butuh CI/CD mature dan tidak mau kelola runner terpisah. Untuk solo engineer? Overkill.

Perbandingan Langsung

Fitur Gitea 1.21 Forgejo 7.0 GitLab CE 16.x
RAM saat idle ~80MB ~80MB ~1.5GB
CI/CD bawaan Actions (beta-ish) Actions GitLab CI (mature)
Package registry
Federation Experimental
Container registry
Minimum VPS $6/bulan $6/bulan $20/bulan
Governance Gitea Inc. Community GitLab Inc.
Lisensi MIT MIT/GPL MIT (CE)

Setup SSH Key dan Remote yang Benar

Salah satu hal yang sering bikin bingung saat migrasi dari GitHub: port SSH non-standard. Gitea/Forgejo defaultnya pakai port 222 (bukan 22) kalau di-deploy via Docker karena port 22 biasanya sudah dipakai host.

Tambahkan ini ke ~/.ssh/config di mesin lokal kamu:

Host git.domain-kamu.com
  HostName git.domain-kamu.com
  User git
  Port 222
  IdentityFile ~/.ssh/id_ed25519

Lalu clone seperti biasa:

git clone git@git.domain-kamu.com:username/repo.git

Untuk migrasi repo dari GitHub, Gitea dan Forgejo punya fitur migration bawaan di UI yang bisa pull repo beserta issues dan PR-nya. Kerjanya cukup baik untuk repo publik. Untuk repo privat, kamu perlu kasih personal access token GitHub.

Backup yang Tidak Boleh Diabaikan

Ini yang sering dilewati orang waktu pertama setup self-hosted git: backup. GitHub yang kamu tinggalkan punya redundancy berlapis. Server kamu tidak.

Setup backup sederhana dengan restic ke Backblaze B2 (harga $0.006/GB/bulan):

# Install restic
sudo apt install restic

# Inisialisasi repository backup
export B2_ACCOUNT_ID="your_account_id"
export B2_ACCOUNT_KEY="your_application_key"
restic -r b2:bucket-name:gitea-backup init

# Backup direktori gitea
restic -r b2:bucket-name:gitea-backup backup /path/to/gitea/data

# Tambahkan ke crontab (backup tiap jam 2 pagi)
# 0 2 * * * restic -r b2:bucket-name:gitea-backup backup /path/to/gitea/data

Jangan lupa backup database PostgreSQL-nya juga:

docker exec gitea-db pg_dump -U gitea gitea > /backup/gitea-$(date +%Y%m%d).sql

Kalau kamu sudah setup self-hosted stack lain, baca juga cara saya mengintegrasikan Drone CI dengan Gitea untuk pipeline yang ringan — setup-nya jauh lebih simpel dari yang kamu bayangkan.

Mana yang Harus Kamu Pilih?

Saya tidak akan pura-pura ini keputusan yang sama untuk semua orang, tapi saya bisa kasih framework yang jelas:

Pilih Gitea kalau kamu mau setup paling cepat, komunitas terbesar, dan ekosistem plugin yang lebih mature sekarang. Ini pilihan default saya untuk proyek baru.

Pilih Forgejo kalau kamu peduli dengan software governance, mau ikut perkembangan federation, atau mau berkontribusi ke project yang lebih community-driven. Secara teknis setara dengan Gitea hari ini.

Pilih GitLab CE kalau kamu tim yang butuh CI/CD enterprise-grade, approval workflow yang kompleks, dan punya anggaran VPS yang lebih besar. Bukan untuk solo engineer di VPS murah.

Untuk konteks lebih luas soal memilih stack self-hosted yang tepat, saya pernah tulis tentang filosofi memilih tools self-hosted untuk dev environment yang mungkin relevan.

Kesimpulan

Self-hosted git server sebagai alternative github bukan lagi eksperimen niche. Gitea dan Forgejo sudah mature, ringan, dan bisa jalan di hardware minimal. GitLab CE cocok untuk kebutuhan yang lebih besar.

Apa yang harus kamu lakukan besok? Spin up VPS $6/bulan di Hetzner, deploy Gitea dengan docker-compose yang saya kasih di atas, dan migrasikan satu repo non-kritis dari GitHub. Lihat sendiri apakah workflow kamu terganggu atau tidak. Kalau tidak — dan kemungkinan besar tidak akan — kamu punya alasan konkret untuk mulai migrasi bertahap.

Data kamu, server kamu, aturan kamu.