Pernah kepikiran, dari sekian repo yang kita push selama bertahun-tahun, berapa banyak yang benar-benar kita pegang sendiri? GitHub dan GitLab memang nyaman, tapi kenyamanan itu ada harganya: kode kita tinggal di infrastruktur orang lain, ikut aturan orang lain, dan kalau suatu hari layanannya berubah kebijakan atau akun kita kena limitasi — kita cuma bisa pasrah. Solusinya tidak harus dramatis: cukup pasang Forgejo di VPS yang sudah kita kelola, dan dalam satu sore kita punya git server sendiri yang lengkap dengan web UI, SSH, dan issue tracker.
Forgejo adalah fork komunitas dari Gitea yang kini berkembang mandiri — ringan, self-hosted, dan dirilis dalam irama terjadwal tiap kuartal. Versi stabil terbaru saat tulisan ini dibuat adalah v17.0.1 (rilis 26 Oktober 2026), sementara jalur LTS adalah 15.0.11 yang dukungannya berlanjut sampai Juli 2027. Oke, lanjuutt.. kita rakit sekarang juga.
Kenapa Forgejo, Bukan Sekadar Gitea atau Gitlab?
Tiga alasan praktis yang membuat Forgejo pas untuk VPS kecil:
- Ringan. Satu container Docker dengan SQLite saja sudah cukup jalan nyaman di VPS 1 GB — tidak seperti GitLab yang praktis menuntut 4 GB+.
- Perkembangan aktif dan terjadwal. Rilis mayor keluar tiap tiga bulan (v17.0 Oktober 2026, v18.0 dijadwalkan Januari 2027), jadi kita tidak memakai proyek yang setengah mati.
- 100% komunitas. Forgejo dikelola lewat Codeberg dengan model tata kelola terbuka — tidak ada perusahaan tunggal yang bisa sekali tombak mengubah arah proyeknya, seperti yang pernah mengguncang ekosistem Gitea.
Kalau kita cuma butuh repo pribadi, wiki, dan pull request untuk tim kecil, ini lebih dari cukup.
Persiapan Singkat
Yang kita butuhkan:
- VPS Ubuntu/Debian dengan Docker dan Docker Compose terpasang.
- Satu subdomain, misalnya
git.contoh.com, yang A record-nya menunjuk IP VPS. - Reverse proxy untuk HTTPS — Caddy atau Nginx, keduanya pernah kita bahas sebelumnya. Forgejo sendiri jalan di port 3000.
Langkah 1: Siapkan docker-compose.yml
Buat direktori kerja lalu file compose mengikuti pola resmi dari dokumentasi Forgejo:
networks:
forgejo:
external: false
services:
server:
image: codeberg.org/forgejo/forgejo:17
container_name: forgejo
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
networks:
- forgejo
volumes:
- ./forgejo:/data
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222:22"
Dua hal yang sering terlewat padahal penting: tag :17 otomatis mengikuti patch terbaru jalur 17.0.x (misalnya 17.0.4 kalau sudah rilis), dan port 222 dipetakan ke port 22 internal — sengaja supaya tidak bertabrakan dengan SSH utama VPS yang sudah duduk di port 22.
Langkah 2: Perbaiki Kepemilikan Folder Data
Ini jebakan nomor satu. Dokumentasi resmi menyatakan volume /data harus dimiliki oleh user/group dengan UID/GID yang sama dengan variabel di compose file — kalau tidak, container bisa saja menolak menyala. Sebelum up, jalankan:
sudo chown -R 1000:1000 ./forgejo
docker compose up -d
Lalu buka http://IP-VPS:3000 di browser untuk menyelesaikan wizard instalasi. Kalau penggunaan kita personal, database SQLite (default) sudah cukup dan tidak perlu container tambahan.
Langkah 3: Tutup Pintu Depan dengan Reverse Proxy
Arahkan subdomain git.contoh.com ke localhost:3000. Contoh blok Caddy cuma satu baris:
git.contoh.com {
reverse_proxy localhost:3000
}
HTTPS otomatis terurus, dan sejak sini kita login lewat domain, bukan IP. Jangan lupa menutup port 3000 di firewall kalau tidak ingin dashboardnya bisa diakses langsung tanpa TLS.
Langkah 4: Sambungkan SSH Clone lewat Port 222
Supaya git@ clone berfungsi, kunci publik kita daftarkan di menu pengaturan akun Forgejo (Settings → SSH/GPG Keys). Lalu di laptop, tambahkan entri di ~/.ssh/config:
Host git.contoh.com
Port 222
User git
Uji koneksinya persis seperti di dokumentasi resmi:
ssh -F /dev/null [email protected] -p 222
Balasan “Hi there, <user>!” berarti semuanya sudah terpasang benar.
Uji Coba: Pindahkan Repo dari GitHub
Cara paling cepat membuktikan server baru ini hidup adalah memindahkan satu repo lama. Di mesin lokal, ambil salinan lengkap beserta semua branch-nya, lalu dorong ke Forgejo:
git clone --mirror [email protected]:username/repo-lama.git
cd repo-lama.git
git push --mirror [email protected]:username/repo-lama.git
Flag --mirror menyalin branch, tag, dan ref lainnya utuh — hasilnya identik dengan aslinya, bukan cuma branch main. Setelah selesai, buka repo di web UI dan periksa halaman Commits: jumlah serta tanggalnya harus cocok dengan sumber. Kalau cocok, kita baru saja memindahkan rumah kode kita sendiri, tanpa bergantung pada siapa pun.
Upgrade antar Versi: Yang Wajib Diperhatikan
Forgejo menerbitkan patch kapan pun ada perbaikan penting, tapi lompatan versi mayor (misalnya 16 → 17) menuntut langkah manual dan verifikasi manusia — tag :17 tidak akan membawa kita pindah jalur secara diam-diam, yang justru aman. Kebiasaan yang patut dipegang sejak awal: backup dulu, baru naikkan tag, baru docker compose up -d.
Buat yang tidak mau repot tiap kuartal, pakai jalur LTS 15.0 yang didukung sampai 15 Juli 2027 — trade-off-nya fitur baru datang lebih lambat.
Kalau Ada yang Gagal: Tiga Gejala Paling Umum
- Container mati ulang terus. Hampir selalu soal kepemilikan folder
./forgejo— ulangichown -R 1000:1000. Di host dengan SELinux aktif (Alma/Rocky), tambahkan flag:Zdi volume:./forgejo:/data:Z. - Git clone SSH timeout. Cek apakah port 222 terbuka di firewall cloud provider, dan uji dengan perintah
ssh -F /dev/nulldi atas supaya~/.ssh/configlama tidak menyesatkan hasil tes. - Lupa password admin dan tidak bisa masuk. Gunakan tool CLI di dalam container:
docker exec -it forgejo forgejo admin user change-password -u nama-admin -p password-baru— jangan langsung utak-atik database.
Dan satu kebiasaan terakhir yang paling berharga: folder ./forgejo adalah seluruh hidup instance kita (repo, database SQLite, konfigurasi app.ini). Masukkan ke jadwal backup — restic atau rclone sama-sama cocok untuk ini. Git server tanpa backup itu ironi tingkat tinggi: kita lari dari risiko vendor lock-in cuma untuk membuat single point of failure sendiri. Wkwkwk.
Kesimpulan
Dalam empat langkah kita punya git server sendiri di VPS: Forgejo v17 di Docker, HTTPS lewat reverse proxy, SSH clone lewat port 222, dan data yang sepenuhnya ada di tangan kita. Yang menentukan nyaman-tidaknya jangka panjang bukan instalasinya, tapi dua kebiasaan kecil: backup rutin folder /data dan upgrade yang sadar-versi. Repo pertama yang layak di-push ke sana? Dotfiles kita sendiri — kecil, berguna, dan jadi bukti bahwa infrastruktur ini benar-benar milik kita. Selamat mencoba!

