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

GiteaGitLab Self-HostedGitHub
Kebutuhan RAMRingan, nyaman di 1–2 GBBerat, butuh beberapa GBTidak berlaku (layanan)
InstalasiSatu file Compose, selesai dalam hitungan menitInstalasi lebih besar dan kompleksTidak perlu instalasi
Fitur intiRepo, issue, pull request, wiki, ActionsSemua itu plus DevOps lengkapSemua itu plus ekosistem terbesar
Kendali dataPenuh, di server AndaPenuh, di server AndaDi server GitHub
Cocok untukPribadi dan tim kecilTim besar yang butuh DevOps penuhKolaborasi 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:
      - db

Empat 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_UID dan USER_GID 1000 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-data dan ./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, port 5432, nama database gitea, user gitea, dan password yang sama dengan di file compose. Nama host db di 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:3000 untuk 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 ps menunjukkan gitea dan gitea-db berstatus running
  • 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 --mirror beserta semua branch dan tag-nya
  • Backup folder ./gitea-data dan ./postgres-data sudah 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