Halo Sobat Online! Pernah tidak merasa agak gelisah karena semua kode, issue, dan riwayat commit proyek kita numpang di akun orang lain? Kalau iya, saatnya kita belajar pasang Gitea di VPS sendiri. Gitea adalah platform Git lengkap yang ringan, open-source, dan bisa berjalan nyaman di VPS kecil — jadi repo privat kita tidak lagi dibatasi kuota, dan datanya benar-benar milik kita sendiri.
Kabar baiknya, Gitea baru saja merilis versi 28.0.0 pada 29 September 2026. Versi ini menarik karena penomoran versinya berubah: yang dulu 1.28 kini ditulis 28.0.0, prefix 1. dihapus. Ada juga fitur baru seperti audit logging, akun bot untuk otomasi, dan deploy token HTTPS. Mari kita pasang dari nol, langkah demi langkah.
Kenapa Pasang Gitea di VPS Sendiri Itu Melegakan?
Analoginya seperti brankas. Menitipkan kode ke layanan pihak ketiga itu seperti menyewa safe deposit box di bank: aman, tapi kuncinya ada dua — punya kita dan punya bank. Gitea di VPS sendiri itu brankas di rumah sendiri: kita yang pegang kuncinya, kita yang tahu isinya, dan tidak ada batas jumlah repo privat.
Beberapa alasan Gitea cocok untuk pemilik VPS:
- Ringan dan hemat. Gitea ditulis dengan Go dan dikemas sebagai satu binary. Ia berjalan enak di VPS 1 vCPU dengan RAM 2 GB, tanpa perlu database terpisah karena SQLite sudah cukup untuk pemakaian pribadi atau tim kecil.
- Open-source penuh. Lisensinya MIT, jadi tidak ada fitur yang dikunci di balik paket berbayar. Repo privat, organisasi, dan kolaborator bisa sebanyak yang kita mau.
- Fitur lengkap, bukan versi lite. Ada Issues, Pull Request, Wiki, Gitea Actions untuk CI/CD, registry paket (npm, container, Helm), webhook, sampai halaman Packages.
- Data bisa dibawa pergi. Backup-nya berupa file ZIP berisi repo, lampiran, dan dump database — bukan ekspor terbatas yang hanya bisa dibaca satu layanan.
Yang Perlu Disiapkan Sebelum Pasang Gitea di VPS
Supaya prosesnya lancar, siapkan dulu bahan-bahannya:
- VPS dengan RAM minimal 2 GB (Ubuntu 24.04 atau Debian 12 sudah pas). Kalau hanya untuk repo pribadi, spesifikasi 1 vCPU / 2 GB / 40 GB SSD sudah lebih dari cukup.
- Docker Engine dan Compose v2. Cek dengan
docker compose version— harus munculv2.x. Kalau belum ada, ikuti panduan resmi Docker untuk distribusi kita. - Git 2.25 atau lebih baru. Ini wajib sejak Gitea 28: instance akan menolak start kalau versinya lebih tua. Kalau memakai image Docker resmi, Git di dalam container sudah memenuhi syarat, jadi cukup mantau kalau nanti kita pindah ke instalasi binary.
- Subdomain dan DNS. Misalnya
git.namadomain.comdiarahkan sebagai A record ke IP VPS. Domain memudahkan HTTPS dan membuat URL clone tetap stabil.
Satu hal yang perlu diingat: image rootful dan rootless tidak bisa saling tukar. Kalau sudah memilih salah satu, jangan pernah mengubah nilai image untuk pindah ke yang lain — datanya tidak akan terbaca.
Langkah 1 — Siapkan Folder dan File docker-compose.yml
Mulai dari membuat folder kerja dan file compose-nya:
mkdir -p ~/gitea && cd ~/gitea
nano docker-compose.yml
Isi file docker-compose.yml seperti ini:
services:
server:
image: docker.gitea.com/gitea:28.0.0
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__server__ROOT_URL=https://git.namadomain.com/
- GITEA__server__SSH_PORT=222
- GITEA__service__DISABLE_REGISTRATION=true
restart: always
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222:22"
Beberapa catatan penting pada konfigurasi di atas:
- Image resmi sekarang berada di registry
docker.gitea.com/gitea. Semua contoh di dokumentasi Gitea memakai alamat itu, jadi biasakan menulisnya lengkap di compose file. - Pin tag versinya (
28.0.0), janganlatest. Dengan begitu, container tidak tiba-tiba berubah versi saat kita restart dan setiap upgrade jadi keputusan sadar. ROOT_URLwajib diperhatikan sejak versi 28. Setting[server] DOMAINsudah tidak dibaca lagi; domain instance — termasuk domain default untuk clone SSH — kini diambil dariROOT_URL. Kalau nilai ini salah, URL clone di dashboard akan menunjuk ke alamat yang keliru.- Port 222 untuk SSH. Container tetap mendengarkan port 22 di dalam, tetapi dari luar kita buka 222 agar tidak berebut dengan SSH server VPS.
SSH_PORT=222memberi tahu Gitea port mana yang harus ditampilkan di URL clone.
Langkah 2 — Nyalakan Container dan Periksa Log
Jalankan Gitea di latar belakang, lalu pastikan ia benar-benar hidup:
docker compose up -d
docker compose ps
docker compose logs --tail=50 gitea
Di log biasanya muncul baris Listen: http://0.0.0.0:3000. Kalau container berulang kali restart, hampir selalu penyebabnya izin folder: folder ./gitea harus bisa ditulis oleh UID/GID yang kita tentukan di environment. Perbaiki dengan sudo chown -R 1000:1000 ~/gitea lalu jalankan docker compose up -d sekali lagi.
Langkah 3 — Buat Akun Admin dari Terminal
Halaman instalasi web memang tersedia di http://IP_VPS:3000, tetapi cara paling cepat dan paling bisa diulang adalah lewat CLI:
docker exec -u git -it gitea gitea admin user create \
--username donny --email [email protected] \
--password 'KataSandiKuat123!' --admin --must-change-password=false
Perhatikan perintah dijalankan sebagai user git (-u git) karena itulah user yang menjalankan Gitea di dalam container. Kalau tidak ingin kata sandi tercatat di riwayat shell, ganti --password dengan --random-password — Gitea akan membuat sandi acak dan menampilkannya sekali di terminal, lalu wajibkan penggantian saat login pertama.
Langkah 4 — Pasang Domain dan HTTPS
Setelah instance hidup, arahkan subdomain ke port 3000 lewat reverse proxy Nginx, lalu amankan dengan Certbot:
server {
listen 443 ssl;
server_name git.namadomain.com;
client_max_body_size 512M;
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-Proto $scheme;
}
}
Dua hal yang sering bikin bingung pemula:
client_max_body_sizejangan dibiarkan default. Nilai bawaan Nginx hanya 1 MB, sehingga push repo berukuran besar akan gagal dengan error 413. Naikkan ke 512 MB atau sesuai kebutuhan.- Selaraskan
ROOT_URLdengan URL final. Kalau instance diakses lewathttps://git.namadomain.com/, nilaiROOT_URLjuga harus persis seperti itu, termasuk skemahttps. Perbedaan skema membuat tautan clone dan redirect OAuth meleset.
Langkah 5 — Push Repo Pertama
Sekarang uji apakah server benar-benar bisa dipakai. Tambahkan kunci SSH publik kita di menu Settings → SSH/GPG Keys (kalau belum punya, bikin dulu dengan ssh-keygen -t ed25519), lalu dari komputer lokal:
git init
git add .
git commit -m "commit pertama"
git remote add origin ssh://[email protected]:222/donny/coba-repo.git
git push -u origin main
Perhatikan format URL-nya: ssh:// dengan port 222. Ini konsekuensi dari port SSH kustom tadi, dan format inilah yang ditampilkan Gitea di tombol clone.
Catatan Breaking Changes Gitea 28 yang Wajib Diketahui
Meski ini instalasi baru, catatan berikut berguna agar kita tidak kaget saat nanti memperbarui instance:
- Git 2.25+ wajib. Gitea menolak start dengan Git yang lebih tua, jadi periksa
git --versionsebelum memindahkan data dari instance lama. - Pendaftaran mandiri mati secara bawaan. Sejak versi 28,
DISABLE_REGISTRATIONdianggaptruekecuali kita tulisfalsesecara eksplisit. Untuk instalasi pribadi, biarkan mati dan tambahkan user lewat CLI. - Alur keluar jaringan berubah. Migrasi, mirror, webhook, dan OAuth2 kini melewati proxy internal dengan aturan egress baru. Preset
externaldihapus, wildcard IP tidak lagi diterima, dan[security] ALLOWED_HOST_LISTtidak lagi membatasi host publik pada mode default. Kalau ingin allowlist eksklusif, setEGRESS_MODE = strictdi bagian[security]dan[migrations]. - Riwayat Actions kini kedaluwarsa. Run yang sudah selesai dihapus setelah 400 hari bersama job, log, dan artifact-nya. Kalau ingin disimpan selamanya, set
RUN_RETENTION_DAYS = 0di bagian[actions]sebelum upgrade. - Binary 32-bit ditinggalkan. Build 32-bit x86 dan
gogittidak lagi tersedia di rilis 28.
Cara Backup dan Update Gitea di VPS
Repo kita berharga, jadi biasakan backup terjadwal. Gitea punya perintah dump yang membungkus repo, data, dan database ke satu file ZIP. Untuk instalasi Docker, dokumentasi resmi menyarankan menjalankannya sebagai user Gitea dan di dalam folder sementara container:
docker compose stop
docker exec -u git -it -w /tmp gitea /usr/local/bin/gitea dump -c /data/gitea/conf/app.ini
docker cp gitea:/tmp/gitea-dump-*.zip ~/backup/
docker compose start
Untuk memperbarui versi, cukup ubah tag di compose file, tarik image baru, lalu naikkan ulang container:
docker compose pull
docker compose up -d
Selalu lakukan dump dulu sebelum mengubah tag, dan baca catatan rilis versi tujuan sebelum melompat. Setelah container naik, cek halaman Site Administration untuk memastikan versi dan status migrasi database berjalan bersih.
Kesimpulan
Dengan sekali docker compose up -d, kita sudah punya GitHub pribadi di VPS sendiri: repo privat tanpa batas, Issues, Pull Request, sampai Gitea Actions — semuanya berjalan di server yang kita pegang penuh. Kuncinya hanya empat: pin versi image, isi ROOT_URL dengan benar, buka SSH di port 222, dan jangan lupa backup rutin.
Sobat Online, silakan coba dulu di VPS percobaan atau di LXC lokal. Rasakan sensasi push pertama ke server sendiri — setelah itu, biasanya susah kembali ke cara lama. Selamat mencoba, dan jangan ragu bereksperimen dengan Gitea Actions berikutnya!

