Gitea: Git Server Pribadi Ringan di VPS untuk Semua Proyek Anda
Masalahnya: Repo Anda Numpang di Tempat Orang
Sebagian besar proyek pribadi saya dulu tinggal di layanan Git gratis. Selama proyeknya publik, tidak ada masalah. Begitu proyeknya privat — kode klien, skrip internal, eksperimen yang belum siap dilihat orang — saya mulai bergantung pada kuota, aturan, dan kebijakan pihak lain. Ada batas kolaborator, ada fitur yang terkunci di paket berbayar, dan ada rasa tidak nyaman karena kode penting tersimpan di server yang bukan milik saya.
Solusinya bukan berhenti memakai Git, tapi memindahkan servernya ke VPS sendiri. Di sinilah Gitea masuk. Gitea adalah Git server open source yang tampilannya mirip layanan Git populer: ada daftar repo, issue, pull request, wiki, dan package registry. Bedanya, ia berjalan di server Anda, dan ia terkenal ringan — nyaman di VPS kecil 1–2 GB RAM, jauh di bawah kebutuhan GitLab yang meminta RAM berkali-kali lipat.
Di bawah ini saya tunjukkan pemasangannya dengan Docker Compose, lengkap dengan database PostgreSQL, lalu cara membuat repo pertama, memindahkan repo lama, dan mengaktifkan CI-nya sendiri.
Gitea vs GitLab vs GitHub: Pilih yang Mana
| Gitea | GitLab Self-Hosted | GitHub | |
|---|---|---|---|
| Kebutuhan RAM | Ringan, nyaman di 1–2 GB | Berat, butuh beberapa GB | Tidak berlaku (layanan) |
| Instalasi | Satu file Compose, selesai dalam hitungan menit | Instalasi lebih besar dan kompleks | Tidak perlu instalasi |
| Fitur inti | Repo, issue, pull request, wiki, Actions | Semua itu plus DevOps lengkap | Semua itu plus ekosistem terbesar |
| Kendali data | Penuh, di server Anda | Penuh, di server Anda | Di server GitHub |
| Cocok untuk | Pribadi dan tim kecil | Tim besar yang butuh DevOps penuh | Kolaborasi publik dan open source |
Patokan saya sederhana: kalau yang Anda butuhkan hanya tempat menyimpan dan mengelola kode sendiri — bukan platform DevOps sekelas perusahaan — Gitea sudah lebih dari cukup, dan VPS Anda tidak ikut terbebani.
Langkah 1: Siapkan VPS dan Docker
Anda butuh VPS Ubuntu dengan Docker dan plugin Compose yang sudah terpasang. Kalau belum, ikuti panduan pemasangan Docker di artikel Docker Compose kami, lalu kembali ke sini. Pastikan juga port 3000 (web) dan 222 (SSH Git) belum dipakai layanan lain di VPS Anda.
Langkah 2: Tulis File Compose Gitea + PostgreSQL
Buat folder proyek dan file compose di dalamnya:
sudo mkdir -p /opt/gitea && sudo chown $USER:$USER /opt/gitea cd /opt/gitea nano docker-compose.yml
Isi file dengan konfigurasi berikut. Service db adalah PostgreSQL, service server adalah Gitea itu sendiri:
services:
db:
image: postgres:16-alpine
container_name: gitea-db
restart: unless-stopped
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=ganti-dengan-password-kuat
- POSTGRES_DB=gitea
volumes:
- ./postgres-data:/var/lib/postgresql/data
server:
image: gitea/gitea:1.24
container_name: gitea
restart: unless-stopped
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-dengan-password-kuat
volumes:
- ./gitea-data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222:22"
depends_on:
- dbEmpat hal yang gampang terlewat di sini:
- Password di dua tempat itu harus sama persis, dan jangan memakai contoh di atas — buat password acak yang kuat.
USER_UIDdanUSER_GID1000 adalah UID/GID user Gitea di dalam container; angka ini cocok dengan user pertama di Ubuntu pada umumnya. Kalau folder data Anda dimiliki user lain, sesuaikan angkanya agar container bisa menulis ke folder tersebut.- Port
"222:22"berarti SSH Git diakses lewat port 222 di host, karena port 22 biasanya sudah dipakai SSH server itu sendiri. Nanti, URL clone SSH Anda akan memakai port 222. - Semua data — repo, database, konfigurasi — tersimpan di
./gitea-datadan./postgres-data. Selama kedua folder itu aman, Gitea bisa dibangun ulang kapan saja.
Jalankan stack-nya:
docker compose up -d docker compose ps
Kalau kedua service berstatus running, buka http://IP-VPS-Anda:3000 di browser. Anda akan disambut wizard instalasi Gitea.
Langkah 3: Selesaikan Wizard Instalasi
Di halaman instalasi, isi bagian-bagian berikut:
- Tipe database: PostgreSQL, dengan host
db, port5432, nama databasegitea, usergitea, dan password yang sama dengan di file compose. Nama hostdbdi sini penting: itulah nama service database di dalam jaringan Docker Compose. - URL dasar Gitea: isi dengan alamat yang akan Anda pakai, misalnya
http://IP-VPS-Anda:3000untuk tahap awal. Kalau nanti Anda memasang domain dan HTTPS, ubah nilai ini agar URL clone dan tautan email yang dihasilkan Gitea benar. - Akun administrator: buat akun admin pertama Anda di sini. Akun inilah yang nanti mengelola user dan pengaturan situs.
Klik instalasi, tunggu prosesnya selesai, lalu login dengan akun admin tersebut. Gitea Anda sudah hidup.
Langkah 4: Buat Repo Pertama dan Push Kode
Dari dashboard, klik tombol repo baru, beri nama, dan pilih apakah repo itu publik atau privat. Setelah repo dibuat, Gitea menampilkan URL clone-nya. Dari laptop Anda:
git clone ssh://git@IP-VPS-Anda:222/username/nama-repo.git cd nama-repo echo "# Proyek pertama di Gitea sendiri" > README.md git add README.md git commit -m "Commit pertama" git push origin main
Perhatikan ssh://git@IP-VPS-Anda:222/...: user-nya git, dan port-nya 222 sesuai mapping di file compose. Sebelum push pertama, pastikan kunci SSH publik Anda sudah ditambahkan di pengaturan akun Gitea (menu profil → SSH Keys). Tanpa itu, server akan menolak koneksi SSH Anda.
Langkah 5: Pindahkan Repo Lama dengan Mirror
Memindahkan repo dari layanan lama tidak perlu mengunduh ulang satu per satu commit secara manual. Cara paling bersih adalah mirror clone:
git clone --mirror https://github.com/username/repo-lama.git cd repo-lama.git git push --mirror ssh://git@IP-VPS-Anda:222/username/repo-lama.git
Flag --mirror menyalin semua branch, tag, dan riwayat commit. Setelah push selesai, verifikasi di web Gitea bahwa semua branch dan tag sudah lengkap, barulah Anda memutuskan apakah repo lama di layanan lama dipertahankan sebagai arsip atau dihapus.
Langkah 6: Aktifkan CI dengan Gitea Actions
Gitea punya CI bawaan bernama Gitea Actions, yang konsepnya mirip GitHub Actions: Anda menulis workflow YAML di folder .gitea/workflows di dalam repo, dan sebuah runner mengeksekusinya. Untuk menjalankannya, Anda perlu satu runner — proses yang berjalan di server (atau mesin lain) dan mendaftar ke Gitea Anda dengan token dari menu Site Administration → Actions → Runners.
Untuk pemakaian pribadi, satu runner di VPS yang sama sudah cukup untuk workflow ringan seperti menjalankan tes atau build. Satu peringatan: runner mengeksekusi kode dari repo, jadi jangan sembarangan mengaktifkan runner untuk repo yang bisa ditulis orang yang tidak Anda percaya. Untuk repo pribadi, risikonya kecil dan manfaatnya besar.
Merawat Gitea: Backup dan Update
Backup Gitea berarti membackup dua folder: ./gitea-data dan ./postgres-data, plus file docker-compose.yml. Jadwalkan backup itu seperti layanan lain di VPS Anda — folder inilah yang berisi semua repo dan riwayatnya.
Untuk update, prosesnya sama seperti layanan Docker Compose lain:
cd /opt/gitea docker compose pull docker compose up -d
Sebelum update besar (misalnya pindah versi mayor), baca dulu catatan rilis Gitea dan pastikan backup terbaru sudah ada. Kebiasaan ini sepele, tapi menyelamatkan Anda dari skenario terburuk: update gagal dan tidak ada cadangan.
Terakhir soal keamanan: jangan biarkan Gitea HTTP mentah di port 3000 terbuka ke internet tanpa pengaman untuk pemakaian jangka panjang. Pasang reverse proxy dengan HTTPS di depannya, atau batasi aksesnya lewat VPN — pola yang sama seperti layanan self-host lain di VPS Anda.
Cek Sebelum Selesai
docker compose psmenunjukkangiteadangitea-dbberstatusrunning- Wizard instalasi selesai dan Anda bisa login sebagai admin
- Kunci SSH sudah ditambahkan ke akun, dan clone + push lewat port 222 berhasil
- Satu repo lama berhasil dipindahkan dengan
--mirrorbeserta semua branch dan tag-nya - Backup folder
./gitea-datadan./postgres-datasudah dijadwalkan - Akses web sudah diamankan (HTTPS lewat reverse proxy, atau dibatasi lewat VPN)
Penutup
Dengan Gitea, kode Anda pulang ke server sendiri tanpa mengorbankan kenyamanan: masih ada web UI yang enak dilihat, masih ada pull request dan issue, bahkan masih ada CI. Dan karena ia ringan, VPS kecil yang sudah Anda punya kemungkinan besar sudah cukup — tidak perlu upgrade server hanya untuk meng-host Git.
Baca juga: Deploy Otomatis ke VPS dengan GitHub Actions, Docker Compose untuk Self-Hosting dari Nol, dan VPS Pertama: Setup Ubuntu dan Hardening SSH.
Berapa repo yang saat ini masih numpang di layanan gratis? Ceritakan di komentar — dan repo mana yang pertama ingin Anda pindahkan ke Gitea sendiri?


Komentar
Posting Komentar