Membangun Server Git

Forgejo adalah platform Git yang ringan, terbuka, dan mandiri, dikembangkan sebagai turunan dari Gitea.


1. Persiapan Sistem, Pengguna, dan Struktur Direktori

Sebelum mengunduh biner Forgejo, kita perlu menyiapkan lingkungan sistem yang sesuai. Forgejo direkomendasikan untuk berjalan di bawah pengguna sistem khusus yang terisolasi, sehingga aktivitasnya tidak bercampur dengan proses lain. Pengguna ini akan diberi nama git, yang merupakan konvensi umum untuk server Git.

Pertama, perbarui daftar paket dan instal git serta curl jika belum tersedia:

sudo apt update
sudo apt install -y git curl

Selanjutnya, buat pengguna sistem git dengan direktori home di /home/git. Kita beri shell /bin/bash agar pengguna ini dapat menjalankan perintah jika diperlukan, tetapi tanpa kata sandi (dinonaktifkan) untuk alasan keamanan:

sudo adduser --system --group --disabled-password --shell /bin/bash --home /home/git git

Setelah pengguna terbentuk, kita bangun struktur direktori yang akan menampung konfigurasi, data repositori, dan log Forgejo. Saya menggunakan lokasi standar /var/lib/forgejo untuk data kerja, /etc/forgejo untuk berkas konfigurasi, dan /var/log/forgejo untuk catatan aktivitas. Ketiga direktori ini akan dimiliki sepenuhnya oleh pengguna git dengan hak akses yang ketat (hanya pengguna dan grup yang dapat membaca/menulis):

sudo mkdir -p /var/lib/forgejo /etc/forgejo /var/log/forgejo
sudo chown -R git:git /var/lib/forgejo /etc/forgejo /var/log/forgejo
sudo chmod -R 750 /var/lib/forgejo /var/log/forgejo
sudo chmod 750 /etc/forgejo

Dengan demikian, struktur dasar sudah siap dan aman.


2. Mengunduh Biner Forgejo dan Membuat Layanan Systemd

Forgejo didistribusikan sebagai satu berkas biner statis yang dapat langsung dijalankan. Kita akan mengunduh versi terbaru (di sini contoh v10.0.1) dari repositori resmi, lalu menempatkannya di /usr/local/bin agar dapat dipanggil dari mana saja.

# Unduh biner untuk arsitektur Linux AMD64
curl -fLo /tmp/forgejo-10.0.1-linux-amd64 \
  https://codeberg.org/forgejo/forgejo/releases/download/v10.0.1/forgejo-10.0.1-linux-amd64

# Pindahkan ke direktori sistem dan beri izin eksekusi
sudo mv /tmp/forgejo-10.0.1-linux-amd64 /usr/local/bin/forgejo
sudo chmod 755 /usr/local/bin/forgejo

Agar Forgejo dapat berjalan secara otomatis saat server dinyalakan, kita perlu mendaftarkannya sebagai layanan systemd. Buat berkas unit forgejo.service di /etc/systemd/system/:

sudo nano /etc/systemd/system/forgejo.service

Isi berkas tersebut dengan konfigurasi berikut:

[Unit]
Description=Forgejo (Beyond coding. We forge.)
After=network.target

[Service]
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/forgejo/
RuntimeDirectory=forgejo
Environment=USER=git HOME=/home/git FORGEJO_WORK_DIR=/var/lib/forgejo
ExecStart=/usr/local/bin/forgejo web --config /etc/forgejo/app.ini
Restart=always
RestartSec=2s

[Install]
WantedBy=multi-user.target

Perhatikan bahwa kita menjalankan proses sebagai pengguna git, dengan direktori kerja di /var/lib/forgejo, dan menggunakan berkas konfigurasi yang nanti akan dihasilkan oleh instalasi web. Setelah menyimpan, muat ulang systemd dan aktifkan layanan:

sudo systemctl daemon-reload
sudo systemctl enable --now forgejo
sudo systemctl status forgejo --no-pager

Jika layanan gagal dimulai, periksa log untuk mencari tahu penyebabnya:

sudo journalctl -u forgejo -n 50 --no-pager

3. Inisialisasi Web dan Konfigurasi Aplikasi

Sekarang saatnya mengakses antarmuka web untuk menyelesaikan instalasi. Buka peramban dan arahkan ke alamat IP server Anda pada port 3000:

http://10.64.142.206:3000

Halaman pertama adalah formulir pengaturan instalasi. Isi parameter-parameter berikut dengan cermat:

  • Database Type: Pilih SQLite3 – ini adalah opsi paling sederhana dan tidak memerlukan server basis data terpisah, sangat cocok untuk skala kecil hingga menengah.
  • Path: Isi dengan /var/lib/forgejo/data/forgejo.db – letakkan berkas database di dalam direktori data milik pengguna git.
  • Repository Root Path: Isi dengan /var/lib/forgejo/data/forgejo-repositories – tempat semua repositori Git akan disimpan.
  • Server Domain: Masukkan alamat IP server, misalnya 10.64.142.206 atau nama domain jika sudah ada.
  • SSH Port: Isi dengan 222 – karena Forgejo memiliki server SSH bawaan, kita gunakan port non-standar untuk menghindari konflik dengan SSH sistem yang biasanya menggunakan port 22.
  • HTTP Listen Port: Biarkan 3000 sebagai port default.
  • Base URL: Sesuaikan menjadi http://10.64.142.206:3000 agar semua tautan yang dihasilkan menggunakan alamat yang benar.

Pada bagian bawah formulir, buat akun administrator dengan mengisi nama pengguna, kata sandi, dan alamat email. Setelah semua terisi, klik tombol Install Forgejo. Proses ini akan membuat berkas konfigurasi utama /etc/forgejo/app.ini dan menyiapkan database awal.

Setelah instalasi selesai, restart layanan untuk memastikan konfigurasi baru terbaca, lalu amankan berkas konfigurasi dengan membatasi akses baca/tulis hanya untuk pengguna git:

sudo systemctl restart forgejo
sudo chmod 600 /etc/forgejo/app.ini
sudo systemctl status forgejo --no-pager

Dengan ini, Forgejo siap digunakan.


4. Autentikasi SSH dan Unggahan Perdana

Untuk berinteraksi dengan repositori menggunakan Git melalui protokol SSH, kita perlu menambahkan kunci publik dari komputer lokal Anda ke akun Forgejo. Karena port SSH Forgejo adalah 222, kita harus menyebutkan port tersebut secara eksplisit saat melakukan koneksi.

Di komputer lokal Anda, buat pasangan kunci SSH (jika belum ada) menggunakan algoritma Ed25519:

ssh-keygen -t ed25519

Tampilkan kunci publik:

cat ~/.ssh/id_ed25519.pub

Salin seluruh isi kunci tersebut (mulai dari ssh-ed25519 hingga akhir). Selanjutnya, masuk ke antarmuka web Forgejo, buka menu Settings (di pojok kanan atas), lalu pilih SSH / GPG Keys. Klik Add Key, tempelkan kunci publik Anda, beri nama yang mudah diingat, lalu simpan.

Untuk menguji koneksi, jalankan perintah berikut dari terminal lokal:

ssh -T -p 222 git@10.64.142.206

Jika pertama kali terhubung, Anda akan diminta untuk menerima host key – ketik yes dan Enter. Jika berhasil, akan muncul pesan sapaan seperti:

Hi there, <username>! You've successfully authenticated...

Sekarang, buat repositori kosong di Forgejo melalui antarmuka web (misalnya beri nama backend). Kemudian, di komputer lokal, lakukan inisialisasi dan unggah proyek perdana:

mkdir first && cd first
git init
touch README.md
git checkout -b main
git add README.md
git commit -m "first commit"

# Tambahkan remote dengan port 222
git remote add origin ssh://git@10.64.142.206:222/<nama-pengguna>/backend.git
git push -u origin main

Ganti <nama-pengguna> dengan nama akun Forgejo Anda. Setelah berhasil, repositori akan terlihat di antarmuka web.


5. Prosedur Pembaruan Versi (Upgrade)

Salah satu keunggulan instalasi native adalah kemudahan dalam memperbarui Forgejo ke versi terbaru. Prosesnya hanya melibatkan penggantian biner lama dengan yang baru, sementara konfigurasi dan database tetap utuh. Meskipun sederhana, saya tetap menyarankan untuk melakukan pencadangan terlebih dahulu sebagai langkah antisipasi.

Berikut langkah-langkah pembaruan yang aman:

# 1. Hentikan layanan
sudo systemctl stop forgejo

# 2. Backup konfigurasi dan data
sudo mkdir -p /var/backups
sudo cp /etc/forgejo/app.ini /etc/forgejo/app.ini.bak
sudo tar -czf /var/backups/forgejo-data-$(date +%F).tar.gz -C /var/lib/forgejo data

# 3. Unduh biner versi baru (misal v10.0.2)
curl -fLo /tmp/forgejo-10.0.2-linux-amd64 \
  https://codeberg.org/forgejo/forgejo/releases/download/v10.0.2/forgejo-10.0.2-linux-amd64

# 4. Ganti biner lama
sudo mv /usr/local/bin/forgejo /usr/local/bin/forgejo.old
sudo mv /tmp/forgejo-10.0.2-linux-amd64 /usr/local/bin/forgejo
sudo chmod 755 /usr/local/bin/forgejo

# 5. Jalankan kembali layanan
sudo systemctl start forgejo
sudo systemctl status forgejo --no-pager

Untuk memverifikasi bahwa versi baru telah terpasang, jalankan:

sudo -u git /usr/local/bin/forgejo --version

Jika setelah pembaruan terjadi masalah, Anda dapat mengembalikan biner sebelumnya dengan cepat:

sudo mv /usr/local/bin/forgejo.old /usr/local/bin/forgejo
sudo systemctl restart forgejo