Server Git

Membangun server Git menggunakan Forgejo, sebuah platform git hosting open source yang ringan, alternatif dari GitHub atau GitLab Community Edition. Lingkungan yang digunakan adalah Ubuntu 26.04 LTS (2 CPU, memori 2 GiB) dengan Podman Engine 5.7.0.

Peringatan: Konfigurasi ini disederhanakan untuk keperluan belajar. Enkripsi HTTPS dan pencadangan sengaja diabaikan agar proses instalasi tetap mudah diikuti.

Podman Quadlet memungkinkan Anda mendefinisikan kontainer, volume, dan jaringan dalam berkas deklaratif di direktori /etc/containers/systemd. Systemd akan membaca berkas-berkas tersebut dan menghasilkan unit layanan yang sesuai, sehingga pengelolaan kontainer lebih terintegrasi.

sudo mkdir -p /etc/containers/systemd

Server Git memerlukan jaringan internal terisolasi agar lalu lintas kontainer terkendali, serta penyimpanan persisten agar data tidak hilang saat kontainer dihidupkan ulang.

Berkas berikut mendefinisikan jaringan virtual bernama forgejo yang akan digunakan oleh kontainer.

sudo nano /etc/containers/systemd/forgejo.network

[Network]
NetworkName=forgejo

Volume bernama forgejo-data akan menyimpan semua data Forgejo di luar kontainer, sehingga repositori tetap aman meski kontainer diganti.

sudo nano /etc/containers/systemd/forgejo-data.volume

[Volume]
VolumeName=forgejo-data

Kontainer akan membuka port 3000 untuk antarmuka web dan port 222 untuk Git melalui SSH. Port 222 dipilih agar tidak bertabrakan dengan SSH bawaan mesin virtual yang biasanya menggunakan port 22.

sudo nano /etc/containers/systemd/forgejo.container

Salin konfigurasi lengkap berikut:

[Container]
ContainerName=forgejo
Image=codeberg.org/forgejo/forgejo:14
Environment=USER_UID=1000
Environment=USER_GID=1000
Network=forgejo.network
PublishPort=3000:3000
PublishPort=222:22
Volume=forgejo-data:/data

[Service]
Restart=always

[Install]
WantedBy=multi-user.target
  • ContainerName – memberi nama unik pada kontainer.
  • Image – menggunakan image Forgejo versi 14 dari Codeberg.
  • Environment=USER_UID=1000 dan USER_GID=1000 – menyamakan ID pengguna di dalam kontainer dengan pengguna pertama di host, agar berkas di volume memiliki izin yang tepat.
  • Network= – menghubungkan kontainer ke jaringan internal yang sudah dibuat.
  • PublishPort – memetakan port 3000 host ke port 3000 kontainer (antarmuka web Forgejo).
  • PublishPort – memetakan port 222 host ke port 22 kontainer (layanan SSH internal Forgejo).
  • Volume – memasang volume persisten ke direktori /data di dalam kontainer, tempat Forgejo menyimpan semua berkas dan basis data.
  • Restart=always – memastikan kontainer selalu dijalankan ulang secara otomatis jika berhenti.
  • WantedBy – menyatakan bahwa layanan ini akan dimulai saat sistem mencapai tahap multi‑user (sewaktu booting normal).

Muat ulang konfigurasi systemd agar berkas Quadlet dikenali, kemudian nyalakan kontainer. Podman akan otomatis mengunduh image, menghubungkan jaringan dan volume, lalu menjalankan kontainer di latar belakang.

sudo systemctl daemon-reload
sudo systemctl start forgejo

Layanan kini berjalan. Anda dapat memeriksa statusnya dengan perintah systemctl status forgejo.

Buka peramban di komputer lokal dan akses http://10.64.142.206:3000. Halaman instalasi Forgejo akan muncul. Isi formulir sebagai berikut:

  • Database Type: SQLite3 – basis data berbasis berkas yang ringan, cocok untuk server kecil tanpa perlu instalasi tambahan.
  • Server Domain: 10.64.142.206 – alamat IP server yang akan digunakan untuk mengkloning repositori.
  • SSH Port: 222 – sesuai dengan port yang dipetakan ke SSH kontainer.
  • Administrator Account: tentukan username, kata sandi, dan alamat surel untuk akun administrator.

Klik Install Forgejo, tunggu beberapa detik, lalu masuk menggunakan akun administrator yang baru dibuat.

Agar dapat mengunggah kode tanpa terus-menerus memasukkan kata sandi, daftarkan kunci publik SSH komputer lokal ke Forgejo.

Di terminal lokal, buat pasangan kunci ED25519 (algoritma modern yang aman, lewati jika sudah ada) dan tampilkan kunci publiknya:

ssh-keygen -t ed25519
cat ~/.ssh/id_ed25519.pub

Salin seluruh isi yang muncul (dimulai dari ssh-ed25519). Di antarmuka web Forgejo, buka Settings > SSH / GPG Keys, tambahkan kunci baru dengan nama pengenal (misal “laptop”), tempelkan kunci publik, lalu simpan.

Uji koneksi dengan perintah berikut (ketik yes jika diminta konfirmasi sidik jari server):

ssh -T git@10.64.142.206 -p 222

Pesan balasan akan menampilkan nama pengguna Anda, menandakan koneksi berhasil.

Buat repositori kosong melalui antarmuka web Forgejo, misalnya bernama backend. Catat URL SSH yang ditampilkan, yaitu ssh://git@10.64.142.206:222/<username>/backend.git (ganti <username> dengan nama administrator Anda, contoh wildanfq).

Di terminal lokal, jalankan perintah berikut secara berurutan:

mkdir first
cd first
git init
touch README.md
git checkout -b main
git add README.md
git commit -m "first commit"
git remote add origin ssh://git@10.64.142.206:222/wildanfq/backend.git
git push -u origin main

Setiap langkah memiliki fungsi spesifik: - mkdir first membuat direktori proyek baru. - cd first berpindah ke direktori tersebut. - git init menginisialisasi repositori Git lokal. - touch README.md menciptakan berkas README kosong. - git checkout -b main membuat cabang bernama main dan menjadikannya aktif. - git add README.md menambahkan berkas ke area stage. - git commit -m "first commit" merekam perubahan dengan pesan. - git remote add origin ... mendaftarkan URL remote server sebagai origin. - git push -u origin main mengunggah cabang main ke server dan menetapkan pelacakan.

Setelah push berhasil, segarkan halaman repositori di Forgejo. Berkas README.md kini terlihat, menandakan kode sudah tersimpan di server.

Saat versi baru tersedia (misal dari 14 ke 15), pembaruan cukup dilakukan dengan mengubah image dan memulai ulang kontainer. Data repositori yang berada di volume tidak akan tersentuh.

Edit berkas kontainer:

sudo nano /etc/containers/systemd/forgejo.container

Ubah baris:

Image=codeberg.org/forgejo/forgejo:14

menjadi:

Image=codeberg.org/forgejo/forgejo:15

Simpan, lalu jalankan:

sudo systemctl daemon-reload
sudo podman pull codeberg.org/forgejo/forgejo:15
sudo systemctl restart forgejo

Forgejo akan berhenti sejenak, mengunduh versi baru, menjalankan migrasi basis data otomatis, lalu kembali menyala dengan versi terbaru.