Server Git Self-Hosted: Forgejo, Gitea, atau cgit?
Bandingkan 4 cara menjalankan server Git self-hosted berdasarkan RAM: bare repository via SSH, cgit, Forgejo atau Gitea, dan GitLab. Ketahui pilihan untuk VPS 1 GB.
Server Git self-hosted mana yang sebaiknya Anda jalankan
Server Git self-hosted bukan satu produk tunggal. RAM (random access memory) pada VPS Anda menentukan versi yang dapat dijalankan. Git tidak memerlukan daemon sendiri. Bare repository dan akun SSH (secure shell) sudah cukup untuk menyediakan server yang berfungsi pada VPS terkecil yang dapat Anda sewa. Semua opsi di atas itu adalah aplikasi web yang Anda pilih untuk dijalankan di sampingnya. Setiap tingkat berikutnya memerlukan memori tambahan yang mungkin tidak tersedia pada VPS kecil.
Ada empat tingkat. Bare repository melalui SSH, tanpa proses yang mendengarkan koneksi selain proses yang memang sudah mendengarkan. cgit, tampilan web read-only yang cepat tanpa database. Forgejo atau Gitea, forge lengkap dengan akun, issue, dan pull request dalam beberapa ratus megabita. GitLab, yang memerlukan server berukuran berkali-kali lipat dibandingkan opsi lainnya.
Tentukan pilihan berdasarkan pekerjaan yang perlu Anda lakukan. Kemudian, bandingkan kebutuhan memorinya dengan kapasitas paket yang Anda bayar.
Kebutuhan RAM sebenarnya untuk setiap opsi
Hanya dua dari proyek ini yang menerbitkan angka kebutuhan perangkat keras. Anggap angka yang diterbitkan sebagai batas minimum, bukan jaminan. Ukur instance Anda sendiri setelah berjalan dengan systemd-cgtop atau ps -o rss= -C forgejo.
The data behind this chart
[
{
"label": "Gitea, small team",
"ram_gb": 1
},
{
"label": "GitLab, memory constrained",
"ram_gb": 8
},
{
"label": "GitLab, single node baseline",
"ram_gb": 16
}
]Gitea mendokumentasikan 1 GB RAM dengan 2 core CPU sebagai kebutuhan yang biasanya cukup untuk tim dan proyek kecil. Gitea juga menyebut Raspberry Pi 3 cukup untuk beban kerja kecil. GitLab mendokumentasikan 16 GB sebagai baseline untuk instalasi satu node, dan 8 GB sebagai batas bawah untuk lingkungan yang pada halamannya sendiri disebut lingkungan dengan keterbatasan memori. Forgejo sama sekali tidak menerbitkan kebutuhan perangkat keras. Forgejo merupakan fork dari Gitea dan berperilaku serupa, sehingga angka dari Gitea adalah panduan terdekat yang tersedia.
Pada VPS dengan RAM 1 GB, bare repository dan cgit masih dapat berjalan dengan sisa kapasitas karena keduanya tidak menjalankan service yang menetap. Forgejo atau Gitea akan berjalan dan dapat melayani tim kecil menggunakan SQLite. Namun, Anda berada tepat pada batas minimum yang didokumentasikan, jadi jangan menjalankan PostgreSQL dan runner CI (continuous integration) pada server tersebut. Jika antarmuka web menghilang tanpa menampilkan error, jalankan sudo dmesg -T | grep -i oom dan cari baris seperti Out of memory: Killed process 1181 (forgejo). Baris tersebut berarti kernel mematikan proses karena kehabisan memori. GitLab pada server dengan RAM 1 GB bukan masalah tuning. GitLab tidak akan berjalan.
Tingkat 0: repositori bare melalui SSH
Git tidak memiliki daemon jaringan yang perlu Anda jalankan. git push melalui SSH menjalankan git-receive-pack di sisi tujuan sebagai proses Unix biasa, sehingga setiap akun yang dapat Anda akses dengan key sudah menjadi remote Git. Buat satu akun untuk repositori, lalu simpan repositori di luar direktori home akun tersebut karena pada Ubuntu 24.04, direktori home baru memiliki mode 0750 dan tampilan web yang ditambahkan kemudian tidak dapat membaca isinya.
sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' \
--group --disabled-password --home /home/git git
sudo install -d -m 0755 -o git -g git /srv/git
sudo -u git git init --bare /srv/git/project.git--bare membuat repositori tanpa working copy, yaitu jenis repositori yang disimpan di server. Push ke repositori yang memiliki working copy akan ditolak dengan refusing to update checked out branch: refs/heads/main. Ini adalah kesalahan yang paling umum pada tingkat ini.
Sekarang, berikan key kepada akun tersebut dan lakukan clone.
sudo -u git install -d -m 700 /home/git/.ssh
sudo -u git tee -a /home/git/.ssh/authorized_keys <<'EOF'
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIexamplekeyhere alice@laptop
EOF
sudo -u git chmod 600 /home/git/.ssh/authorized_keysgit remote add origin git@vps.example.com:/srv/git/project.git
git push -u origin mainPush pertama yang berhasil berakhir dengan * [new branch] main -> main. Push yang berakhir dengan git@vps.example.com: Permission denied (publickey) tidak pernah diautentikasi, jadi baca log server dengan sudo journalctl -u ssh -n 20. Baris yang berisi Authentication refused: bad ownership or modes for file /home/git/.ssh/authorized_keys berarti mode file salah karena sshd mengabaikan file key yang dapat ditulis oleh pengguna lain.
Selanjutnya, nonaktifkan shell untuk akun tersebut.
command -v git-shell | sudo tee -a /etc/shells
sudo chsh -s "$(command -v git-shell)" gitgit-shell hanya menerima beberapa perintah yang dikirim Git melalui SSH, sehingga login interaktif sekarang berhenti dengan pesan, bukan prompt:
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.Itulah keseluruhan servernya. Tidak ada database dan tidak ada proses web yang perlu diperbarui. Yang Anda korbankan adalah semua fitur yang disediakan forge: tidak ada penelusuran repositori, issue tracker, pull request, atau izin per pengguna. Setiap key dalam file tersebut dapat membaca dan menulis setiap repositori yang dimiliki pengguna git.
Tingkat 1: cgit menyediakan tampilan web tanpa database
cgit adalah program CGI (common gateway interface) yang ditulis dalam C. Server web menjalankannya satu kali untuk setiap permintaan, membaca repository langsung dari disk, dan tidak menyimpan state sendiri. Ubuntu 24.04 menyediakannya dalam komponen universe.
sudo apt update
sudo apt install -y cgit fcgiwrap nginx
sudo install -d -o www-data -g www-data /var/cache/cgitArahkan cgit ke direktori repository di /etc/cgitrc:
root-title=Git on example.com
css=/cgit.css
logo=/cgit.png
cache-size=1000
cache-root=/var/cache/cgit
snapshots=tar.gz zip
scan-path=/srv/gitscan-path menelusuri direktori tersebut dan mencantumkan setiap repository yang ditemukan. Dengan demikian, bare repo baru langsung muncul tanpa konfigurasi tambahan. cache-size adalah jumlah halaman yang disimpan dalam cache, dan caching tetap nonaktif jika nilainya nol. Baca isi /etc/cgitrc yang sudah ditambahkan oleh package sebelum menambahkan baris baru, karena package Debian dan Ubuntu juga menyediakan beberapa default.
Setiap entri menampilkan baris pertama dari file description milik repository. Karena itu, bare repo baru akan menampilkan dirinya sebagai Unnamed repository; edit this file 'description' to name the repository.. Perbaiki nilai tersebut satu kali untuk setiap repository:
echo 'Project X, internal tooling' | sudo -u git tee /srv/git/project.git/descriptionFile site nginx dan cara memeriksanya
server {
listen 80;
server_name git.example.com;
root /usr/share/cgit;
try_files $uri @cgit;
location @cgit {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/lib/cgit/cgit.cgi;
fastcgi_param PATH_INFO $uri;
fastcgi_param QUERY_STRING $args;
fastcgi_param HTTP_HOST $server_name;
fastcgi_pass unix:/run/fcgiwrap.socket;
}
}sudo systemctl enable --now fcgiwrap.socket
sudo nginx -t && sudo systemctl reload nginx
systemctl show fcgiwrap.socket -p Listenroot /usr/share/cgit menyajikan cgit.css dan cgit.png sebagai file biasa, sedangkan try_files meneruskan semua permintaan lain ke CGI pada /usr/lib/cgit/cgit.cgi. Halaman 502 dengan connect() to unix:/run/fcgiwrap.socket failed (2: No such file or directory) di dalam /var/log/nginx/error.log berarti socket unit tidak berjalan atau melakukan listen pada path lain. Baris systemctl show menampilkan path yang benar-benar digunakan.
Ada 2 batasan yang perlu diketahui sebelum menggunakannya lebih lanjut. cgit bersifat hanya-baca dan tidak memiliki login, sehingga semua yang berada di bawah scan-path bersifat publik. Jangan letakkan repository privat di direktori tersebut, atau pasang autentikasi dasar HTTP di depan seluruh site. Selain itu, CGI berjalan sebagai user server web. User tersebut harus dapat menelusuri /srv/git dan membaca setiap repository. Direktori yang tidak dapat dimasukinya akan muncul sebagai indeks kosong, bukan sebagai error.
Tingkat 2: Forgejo atau Gitea untuk issue dan pull request
Forgejo dan Gitea memiliki konsep yang sama: satu binary Go yang menyediakan forge web dengan pengguna, organisasi, issue, pull request, release, package registry, dan sistem CI bawaan. Binary dan SQLite sudah mencakup seluruh instalasi. Karena itu, keduanya dapat berjalan pada hardware yang tidak mampu menjalankan GitLab. File Compose di bawah ini berasal dari dokumentasi Forgejo, dengan tag image yang tercantum di dalamnya per Agustus 2026.
networks:
forgejo:
external: false
services:
server:
image: codeberg.org/forgejo/forgejo:16
container_name: forgejo
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
networks:
- forgejo
volumes:
- ./forgejo:/data
- /etc/localtime:/etc/localtime:ro
ports:
- '3000:3000'
- '222:22'docker compose up -d
docker compose ps
curl -sI http://127.0.0.1:3000 | head -1Baris curl harus menampilkan baris status HTTP. Sebelum penyiapan awal selesai, hasilnya mungkin berupa redirect ke /install. Ini tetap berarti service sudah berjalan. Jika container justru berhenti, penyebab yang paling umum adalah ownership: direktori ./forgejo harus dimiliki oleh UID (user id) pada USER_UID. Jika tidak, proses tidak dapat menulis ke direktori datanya sendiri. Docker Compose pada VPS membahas struktur file dan aturan ownership volume tersebut secara lengkap.
Dua jawaban pada halaman penyiapan menentukan apakah URL clone dapat digunakan. Port SSH harus 222 karena file Compose memetakan port host 222 ke port 22 pada container. Domain harus menggunakan nama yang benar-benar akan diketik oleh pengguna. Jika salah satu jawaban ini keliru, setiap halaman repository akan menawarkan perintah clone yang gagal bagi siapa pun yang menyalinnya. Keduanya kemudian berada di bagian [server] pada app.ini sebagai SSH_PORT, SSH_DOMAIN, dan ROOT_URL.
Untuk instance publik, publikasikan port web hanya pada alamat loopback ('127.0.0.1:3000:3000'), lalu tempatkan nginx di depannya untuk TLS (transport layer security). Gitea dapat diinstal dengan cara yang sama dari image gitea/gitea, atau sebagai satu binary dengan satu unit systemd dan satu app.ini. Per Agustus 2026, release stabil terkininya adalah 1.27.1.
Gunakan SQLite selama masih memungkinkan. SQLite membuat instance hanya memerlukan satu proses dan satu file. SQLite juga tetap berfungsi setelah reboot tanpa service tambahan yang harus dipantau. PostgreSQL sepadan dengan biaya tambahannya ketika beberapa orang menulis secara bersamaan karena SQLite membuat operasi tulis berjalan secara serial, sedangkan proses CI yang lama terus melakukan penulisan. Kedua project dapat memindahkan instance yang sudah ada ke PostgreSQL nanti. Jadi, keputusan ini tidak bersifat permanen.
Forgejo atau Gitea: perbedaan sebenarnya
Keduanya memiliki garis keturunan yang sama. Gitea melakukan fork dari Gogs pada 2016. Pada akhir 2022, kendali atas domain dan merek dagang Gitea beralih kepada sebuah perusahaan, Gitea Ltd, lalu beberapa maintainer bersama Codeberg memulai Forgejo. Forgejo diterbitkan oleh Codeberg e.V., sebuah asosiasi nirlaba yang terdaftar di Jerman, dan beralih dari lisensi MIT ke GPLv3 (GNU general public license version 3) pada 2024. Gitea tetap menggunakan lisensi MIT dan dikembangkan dengan dukungan komersial.
Dalam penggunaan sehari-hari, rangkaian fiturnya hampir sama. Namun, jalur perpindahan di antara keduanya berbeda. Forgejo v10.0, yang dirilis pada January 2025, adalah rilis terakhir yang dapat menggunakan database Gitea secara langsung, dan hanya dari Gitea v1.22 atau yang lebih lama. Per August 2026, Gitea berada pada versi 1.27.1, sehingga instance Gitea saat ini tidak memiliki opsi perpindahan in-place yang didukung ke Forgejo. Pilih salah satunya sebelum mengisinya dengan data, dan anggap setiap perpindahan berikutnya sebagai proses export dan import ulang.
Aturan singkat untuk memilih. Jika tata kelola penting bagi Anda atau Anda ingin proyek ini tetap berada di bawah organisasi nirlaba, gunakan Forgejo. Jika Anda menginginkan basis instalasi yang lebih besar dan opsi dukungan komersial, gunakan Gitea. Keduanya dikembangkan secara terbuka dan sering merilis pembaruan: Forgejo merilis stable release setiap tiga bulan dan rilis LTS (long term support) setiap tahun, dengan v16.0.2 sebagai versi terbaru dan v15.0.6 sebagai LTS per August 2026.
Tingkat 3: biaya GitLab sebelum melakukan apa pun
GitLab CE adalah kelas perangkat lunak yang berbeda. Satu instance terdiri atas sekumpulan service yang saling bekerja sama: Puma untuk aplikasi web, Sidekiq untuk pekerjaan latar belakang, PostgreSQL, Redis, Gitaly untuk akses repositori, dan nginx di bagian depan. Paket Omnibus memasang semuanya secara bersamaan. Hal ini menyederhanakan instalasi, tetapi meningkatkan kebutuhan memori minimum.
Halaman persyaratan GitLab mencantumkan 16 GB RAM dan 8 vCPU sebagai baseline untuk instalasi satu node, dengan 8 GB disebut sebagai batas bawah dalam lingkungan dengan keterbatasan memori. Halaman yang sama meminta Anda menonaktifkan swap karena penggunaan swap saat beban tinggi sangat menurunkan kinerja instance. Angka tersebut adalah angka yang dipublikasikan per August 2026. Kebutuhannya juga meningkat dari tahun ke tahun, jadi baca kembali halaman tersebut sebelum menentukan ukuran server.
Dengan anggaran tersebut, Anda mendapatkan fitur nyata: container registry, package registry, izin terperinci, fitur compliance dan audit, serta CI yang telah diuji pada skala besar. Jika tidak ada seorang pun di tim Anda yang dapat menyebutkan fitur dari daftar tersebut yang mereka perlukan pada kuartal ini, berarti Anda membayar VPS yang lebih besar tanpa mendapatkan manfaat.
Model akses SSH: satu pengguna git dan banyak kunci
Setiap tingkatan di sini menggunakan autentikasi dengan cara yang sama. Ada satu akun Unix bernama git, dan setiap kunci publik dimasukkan ke dalam ~/.ssh/authorized_keys milik akun tersebut. Kunci digunakan untuk autentikasi. Otorisasi ditentukan oleh opsi apa pun yang Anda tulis sebelum kunci pada baris yang sama.
Baris kunci biasa memberikan pemegang kunci semua kemampuan yang tersedia bagi akun tersebut. Perintah paksa membatasinya hanya untuk Git:
restrict,command="git-shell -c \"$SSH_ORIGINAL_COMMAND\"" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIexamplekeyhere alice@laptoprestrict, yang tersedia sejak OpenSSH 7.2, menonaktifkan penerusan port, penerusan agen, X11, dan alokasi PTY (pseudo terminal) dengan satu kata. command= mengganti permintaan klien dengan perintah yang Anda tentukan, dan Git tetap berfungsi karena Git mengirimkan permintaannya dalam $SSH_ORIGINAL_COMMAND.
Forge menulis file tersebut untuk Anda. Inilah perbedaan utama antara tingkatan 0 dan tingkatan 2. Forgejo dan Gitea menulis ulang authorized_keys dengan satu baris untuk setiap kunci yang didaftarkan. Setiap baris berisi perintah paksa yang mengidentifikasi kunci berdasarkan ID-nya di database:
command="/usr/local/bin/forgejo --config=/etc/forgejo/app.ini serv key-3",no-port-forwarding,no-x11-forwarding,no-agent-forwarding,no-pty ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIexamplekeyhere alicePerintah paksa tersebut mengubah satu akun Unix bersama menjadi izin per pengguna. key-3 memberi tahu forge pengguna yang sedang terhubung, lalu forge memeriksa pengguna tersebut terhadap repositori sebelum objek apa pun dipindahkan. Jangan mengedit file tersebut secara manual pada server yang dikelola forge, karena file itu ditulis ulang dari database dan baris Anda akan hilang. Deploy key menggunakan mekanisme yang sama. Deploy key adalah kunci SSH biasa yang didaftarkan untuk satu repositori, biasanya dengan akses hanya-baca. Pemeriksaan dilakukan oleh forge, bukan oleh sshd.
Dua kebiasaan lebih penting daripada semua konfigurasi di atas. Buat satu kunci untuk setiap orang atau setiap mesin, bukan kunci bersama. Pencabutan kunci bersama mengharuskan Anda menggantinya untuk semua orang sekaligus. Hapus kunci pada hari seseorang meninggalkan organisasi, karena kunci lama dalam file tersebut menjadi login permanen yang tidak dipantau. Manajemen kunci SSH yang baik pada server membahas jenis kunci dan passphrase, dan semua penjelasannya berlaku di sini tanpa perubahan. Jika server masih baru, sepuluh menit pertama pada VPS baru adalah langkah yang tepat sebelum Anda menempatkan repositori di dalamnya.
Dapatkah saya menjalankan GitHub Actions pada server Git milik sendiri?
Anda dapat menjalankan workflow yang ditulis menggunakan sintaks GitHub Actions. Namun, Anda tidak dapat menjalankan GitHub. Forgejo Actions diaktifkan secara default sejak Forgejo v1.21 dan membaca file workflow dari .forgejo/workflows di setiap repositori. Gitea Actions bekerja dengan cara yang sama dan membaca .gitea/workflows. Keduanya memerlukan program kedua, yaitu runner, yang harus diinstal dan didaftarkan ke instance Anda menggunakan token dari pengaturan administrator. Banyak action yang dipublikasikan dapat dijalankan tanpa perubahan. Namun, action yang memanggil GitHub API atau mengharapkan infrastruktur yang di-host GitHub tidak dapat dijalankan.
Siapkan dua konsekuensi berikut. Runner memulai sebuah container untuk setiap job. Karena itu, runner memerlukan container engine dan alokasi memori sendiri. Inilah alasan runner tidak sebaiknya ditempatkan pada server 1 GB yang sama dengan forge. Runner juga menjalankan apa pun yang dinyatakan dalam file workflow. Dokumentasi Forgejo menyatakannya secara langsung: runner melakukan eksekusi kode jarak jauh. Jika memungkinkan, tempatkan runner pada host tersendiri. Setidaknya, gunakan user tanpa hak istimewa tersendiri dan token pendaftaran yang dibatasi untuk satu repositori.
Jika repositori Anda tetap berada di GitHub dan Anda hanya ingin menjalankan komputasi pada perangkat keras yang Anda kendalikan, konfigurasinya berbeda dan langkahnya juga berbeda: runner GitHub Actions yang di-host sendiri terhubung ke repositori GitHub dan tidak memerlukan semua hal ini. Jika Anda masih mempertimbangkan biaya untuk meninggalkan GitHub, apa yang sebenarnya diberikan GitHub kepada Anda memisahkan layanan hosting Git dari jaringan di sekitarnya.
Cadangan: repositori hanya mencakup separuh state
Bare repository adalah sebuah direktori, sehingga menyalinnya akan menyalin semua isinya. Mirror clone dari mesin lain merupakan cadangan yang sebenarnya dan dapat diperbarui di tempat:
git clone --mirror git@vps.example.com:/srv/git/project.git
cd project.git && git remote updatePerintah tersebut mengambil setiap ref dan setiap object. Perintah tersebut tidak mengambil server-side hooks atau file description. Karena itu, jika Anda menggunakan hooks, simpan juga salinan direktori pada tingkat file.
Forge menyimpan issues, pull requests, users, keys, dan permissions dalam database. Salinan repositori saja akan menghilangkan semua data tersebut. Kedua project menyediakan perintah dump yang menulis database, repositori, konfigurasi, dan attachments ke dalam satu archive:
sudo -u git forgejo dump -c /etc/forgejo/app.ini -f /var/backups/forgejo-dump.zipPada Docker, perintah yang sama dijalankan di dalam container. Path konfigurasi bergantung pada image, jadi periksa terlebih dahulu sebelum mengetikkannya:
docker compose exec server ls /data/gitea/conf
docker compose exec -u git server forgejo dump -c /data/gitea/conf/app.iniJalankan perintah tersebut sebagai user yang memiliki data. Tulis archive ke direktori yang dapat ditulisi oleh user tersebut. Kemudian salin archive ke luar server. Cadangan yang hanya ada pada mesin yang dicadangkan bukanlah cadangan. Memulihkan cadangan adalah langkah yang sering dilewati. Sekarang unpack satu dump ke spare box agar Anda memahami prosedurnya pada waktu yang tenang, bukan saat terjadi outage.
Pilih berdasarkan skenario
Satu orang dengan laptop dan VPS, tanpa perlu menjelajah melalui browser: gunakan bare repository melalui SSH. Tidak ada service tambahan yang berjalan dan tidak ada yang perlu di-upgrade.
Kondisinya sama, tetapi Anda ingin membaca kode melalui browser dan membagikan tautan ke kode tersebut: tambahkan cgit. Tetap tidak ada database dan tidak ada proses yang berjalan menetap.
Tim yang saling meninjau kode dan melacak issue: gunakan Forgejo atau Gitea pada server dengan RAM 2 GB atau lebih. Pindahkan CI runner ke mesin kedua setelah job mulai membutuhkan sumber daya nyata.
Organisasi yang memerlukan container registry dan audit trail, dengan anggaran server 16 GB: gunakan GitLab. Jika anggaran Anda di bawah itu, jangan mulai menggunakannya.
Beralih dari tiga tingkat pertama ke tingkat berikutnya tidak mahal karena pada ketiganya repository merupakan direktori Git biasa di disk. Mulailah dari tingkat terendah yang memenuhi kebutuhan. Jika Anda sedang menentukan layanan lain yang layak diberi ruang pada server yang sama, daftar singkat layanan yang layak di-self-host menempatkan server Git di samping layanan lain yang bersaing untuk mendapatkan RAM tersebut.
FAQ
Dapatkah VPS 1 GB menjalankan Forgejo atau Gitea?
Ya, untuk tim kecil, dengan SQLite, dan tanpa beban berat lain pada server. Dokumentasi Gitea menyebutkan bahwa 1 GB RAM dan 2 core CPU biasanya cukup untuk tim dan proyek kecil. Forgejo adalah fork dari Gitea dengan kebutuhan yang serupa. Jangan menambahkan PostgreSQL atau runner CI ke mesin tersebut. Jika service menghilang tanpa error pada lognya sendiri, jalankan sudo dmesg -T | grep -i oom: baris yang mencantumkan nama proses yang dihentikan berarti kernel out of memory killer menghentikannya. Solusinya adalah menggunakan plan yang lebih besar, bukan menambahkan flag tuning.
Apa perbedaan antara Forgejo dan Gitea?
Keduanya memiliki sejarah codebase yang sama dan sebagian besar fitur yang sama. Gitea melakukan fork dari Gogs pada 2016, sedangkan Forgejo melakukan fork dari Gitea pada akhir 2022 setelah kendali atas merek dagang Gitea berpindah ke sebuah perusahaan. Forgejo diterbitkan oleh Codeberg e.V., organisasi nirlaba di Jerman, di bawah lisensi GPLv3. Gitea tetap menggunakan lisensi MIT dengan dukungan komersial. Perbedaan praktisnya terletak pada jalur migrasi. Forgejo v10.0, yang dirilis pada Januari 2025, adalah rilis terakhir yang dapat menggunakan database Gitea secara langsung, dan hanya dari Gitea v1.22 atau yang lebih lama. Jadi, instance Gitea saat ini tidak memiliki metode perpindahan in-place yang didukung.
Dapatkah saya menjalankan workflow GitHub Actions pada server Git self-hosted?
Forgejo Actions dan Gitea Actions dapat menjalankan workflow yang ditulis dengan sintaks YAML GitHub Actions, yang dibaca dari .forgejo/workflows dan .gitea/workflows. Anda harus menginstal program runner terpisah dan mendaftarkannya ke instance Anda. Banyak action yang dipublikasikan dapat berjalan tanpa perubahan, tetapi action yang memanggil GitHub API tidak dapat berjalan. Runner mengeksekusi kode arbitrer dari repository Anda dan memulai satu container untuk setiap job. Karena itu, gunakan host tersendiri, atau setidaknya user unprivileged tersendiri, dan jangan menjalankannya pada server 1 GB yang sudah menjalankan forge.
Bagaimana cara mencadangkan server Git self-hosted?
Untuk repository bare, git clone --mirror dari mesin lain menyalin setiap ref dan object, sedangkan git remote update di dalam mirror tersebut memperbaruinya. Untuk Forgejo atau Gitea, repository hanya merupakan sebagian dari state, karena issue, pull request, user, dan key disimpan dalam database. Gunakan dump bawaan, sudo -u git forgejo dump -c /etc/forgejo/app.ini, atau jalankan command yang sama di dalam container untuk instalasi Docker. Salin archive ke luar server, lalu pulihkan archive tersebut satu kali pada mesin cadangan agar Anda mengetahui bahwa prosedurnya berfungsi.