SSD Nodes Learn 🎉 VPS dari $5.50/bln
Panduan Matt ConnorOleh Matt Connor · Dikemas kini 2026-08-13

Pilihan Pelayan Git Kendiri: Forgejo, Gitea atau cgit?

Ketahui empat cara menjalankan pelayan Git kendiri berdasarkan penggunaan RAM. Bandingkan keperluan memori antara SSH, cgit, Forgejo, Gitea dan GitLab untuk VPS 1 GB anda.

Pelayan Git kendiri (self-hosted) yang manakah patut anda jalankan

Pelayan Git kendiri bukanlah satu produk tunggal, dan jumlah RAM (random access memory) pada VPS anda menentukan versi yang boleh anda miliki. Git tidak memerlukan daemon sendiri: repositori bare berserta akaun SSH (secure shell) sudah memadai sebagai pelayan yang berfungsi pada mesin paling kecil yang boleh anda sewa. Segala-galanya di atas tahap itu ialah aplikasi web yang anda pilih untuk dijalankan bersamanya, dan setiap peningkatan tahap memerlukan memori yang mungkin tidak dimiliki oleh VPS kecil.

Terdapat empat tahap. Repositori bare melalui SSH, tanpa sebarang proses mendengar (listening) yang tidak sedia berjalan. cgit, paparan web baca-sahaja yang pantas tanpa pangkalan data. Forgejo atau Gitea, sebuah forge lengkap dengan akaun, isu dan pull request dalam beberapa ratus megabait. GitLab, yang memerlukan pelayan dengan saiz berkali ganda lebih besar daripada yang lain.

Tentukan berdasarkan tugasan yang perlu anda lakukan, kemudian semak angka memori tersebut dengan pelan yang anda langgani.

Berapa banyak RAM yang sebenarnya diperlukan oleh setiap pilihan

Hanya dua daripada projek ini menerbitkan angka keperluan perkakasan. Anggap angka yang diterbitkan sebagai tahap minimum dan bukannya jaminan, dan ukur instans anda sendiri sebaik sahaja ia berjalan, menggunakan systemd-cgtop atau ps -o rss= -C forgejo.

ChartRAM the projects document, official docs, August 2026
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 teras CPU sebagai jumlah yang biasanya mencukupi untuk pasukan dan projek kecil, serta menamakan Raspberry Pi 3 sebagai peranti yang memadai untuk beban kerja kecil. GitLab mendokumentasikan 16 GB sebagai garis dasar untuk pemasangan nod tunggal, dan 8 GB sebagai tahap rendah untuk apa yang dipanggil oleh halaman mereka sendiri sebagai persekitaran yang terhad memori. Forgejo tidak menerbitkan sebarang keperluan perkakasan sama sekali. Ia merupakan fork daripada Gitea dan berkelakuan sepertinya, jadi angka Gitea adalah panduan terbitan paling hampir yang anda miliki.

Apa yang dimaksudkan dengan ini pada VPS 1 GB: repositori kosong dan cgit boleh dimuatkan dengan ruang yang masih berbaki, kerana kedua-duanya tidak menjalankan servis residen. Forgejo atau Gitea akan bermula dan akan melayani pasukan kecil menggunakan SQLite, tetapi anda berada pada tahap minimum yang didokumentasikan, jadi jangan jalankan PostgreSQL dan runner CI (continuous integration) pada pelayan tersebut. Jika antara muka web hilang tanpa ralat, jalankan sudo dmesg -T | grep -i oom dan cari baris seperti Out of memory: Killed process 1181 (forgejo), yang bermaksud kernel out of memory killer telah menamatkan proses tersebut. GitLab pada pelayan 1 GB bukanlah masalah penalaan. Ia tidak akan dapat berjalan.

Tahap 0: repositori kosong melalui SSH

Git tidak mempunyai daemon rangkaian yang perlu anda mulakan. git push melalui SSH menjalankan git-receive-pack pada hujung jauh sebagai proses Unix biasa, jadi mana-mana akaun yang boleh anda capai dengan kunci sudah pun menjadi Git remote. Cipta satu akaun untuk repositori tersebut, dan simpan repositori di luar direktori home akaun itu, kerana pada Ubuntu 24.04 direktori home baharu mempunyai mod 0750 dan paparan web yang ditambah kemudian tidak boleh membacanya.

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 mencipta repositori tanpa salinan kerja (working copy), iaitu format yang disimpan oleh pelayan. Menolak (push) ke dalam repositori yang mempunyai salinan kerja akan ditolak dengan refusing to update checked out branch: refs/heads/main, dan ini merupakan kesilapan paling biasa pada tahap ini.

Sekarang, berikan kunci kepada akaun 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_keys
git remote add origin git@vps.example.com:/srv/git/project.git
git push -u origin main

Push pertama yang berjaya akan berakhir dengan * [new branch] main -> main. Push yang berakhir dengan git@vps.example.com: Permission denied (publickey) tidak pernah disahkan, jadi baca log pelayan dengan sudo journalctl -u ssh -n 20. Baris yang memaparkan Authentication refused: bad ownership or modes for file /home/git/.ssh/authorized_keys bermaksud mod fail adalah salah, kerana sshd mengabaikan fail kunci yang boleh ditulis oleh pengguna lain.

Kemudian, tarik balik akses shell daripada akaun tersebut.

command -v git-shell | sudo tee -a /etc/shells
sudo chsh -s "$(command -v git-shell)" git

git-shell hanya menerima beberapa arahan yang dihantar oleh Git melalui SSH, jadi log masuk interaktif kini akan terhenti dengan mesej dan bukannya prompt:

fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.

Itulah keseluruhan pelayan tersebut. Tiada pangkalan data, dan tiada proses web untuk dikemas kini. Apa yang anda korbankan ialah segala fungsi yang disediakan oleh forge: tiada pelayaran, tiada penjejak isu, tiada pull request, dan tiada kebenaran bagi setiap pengguna. Setiap kunci dalam fail tersebut boleh membaca dan menulis setiap repositori yang dimiliki oleh pengguna git.

Tahap 1: cgit memberikan paparan web tanpa pangkalan data

cgit ialah program CGI (common gateway interface) yang ditulis dalam C. Pelayan web menjalankannya sekali bagi setiap permintaan, ia membaca repositori terus daripada cakera, dan ia tidak menyimpan sebarang status 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/cgit

Halakan ia ke direktori repositori dalam /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/git

scan-path melayari direktori tersebut dan menyenaraikan setiap repositori yang ditemui, jadi repositori bare yang baharu akan muncul tanpa konfigurasi tambahan. cache-size ialah bilangan halaman yang dicache, dan caching kekal dimatikan selagi nilainya sifar. Baca kandungan yang telah diletakkan oleh pakej anda dalam /etc/cgitrc sebelum anda menambah baris baharu, memandangkan pakej Debian dan Ubuntu sudah menyertakan beberapa tetapan lalai.

Setiap entri memaparkan baris pertama fail description repositori tersebut, jadi repositori bare yang baharu akan menyenaraikan dirinya sebagai Unnamed repository; edit this file 'description' to name the repository.. Betulkan perkara ini sekali bagi setiap repositori:

echo 'Project X, internal tooling' | sudo -u git tee /srv/git/project.git/description
Fail tapak nginx, dan cara untuk menyemaknya
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 Listen

root /usr/share/cgit menghidangkan cgit.css dan cgit.png sebagai fail biasa, dan try_files menyerahkan segala yang lain kepada CGI di /usr/lib/cgit/cgit.cgi. Halaman 502, dengan connect() to unix:/run/fcgiwrap.socket failed (2: No such file or directory) dalam /var/log/nginx/error.log, bermakna unit soket tidak berjalan atau mendengar pada laluan lain. Baris systemctl show mencetak laluan yang sebenarnya digunakan.

Dua had perlu diketahui sebelum anda membina di atasnya. cgit adalah baca-sahaja dan tidak mempunyai log masuk, jadi segala-galanya di bawah scan-path adalah awam: jauhkan repositori peribadi daripada direktori tersebut, atau letakkan pengesahan HTTP basic di hadapan keseluruhan tapak. Selain itu, CGI berjalan sebagai pengguna pelayan web, jadi pengguna tersebut perlu mempunyai kebenaran untuk melayari /srv/git dan membaca setiap repositori. Direktori yang tidak boleh dimasuki akan dipaparkan sebagai indeks kosong dan bukannya ralat.

Tahap 2: Forgejo atau Gitea untuk isu dan pull request

Forgejo dan Gitea mempunyai konsep yang sama: satu binari Go yang menyediakan forge web dengan pengguna, organisasi, isu, pull request, release, pendaftaran pakej dan sistem CI terbina dalam. Binari berserta SQLite merupakan keseluruhan pemasangan, itulah sebabnya ia sesuai pada perkakasan yang tidak mampu dikendalikan oleh GitLab. Fail Compose di bawah adalah fail yang terdapat dalam dokumentasi Forgejo, dengan tag imej yang dinamakan setakat Ogos 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 -1

Baris curl sepatutnya mencetak baris status HTTP. Sebelum anda menyelesaikan persediaan kali pertama, ia mungkin merupakan redirect ke /install, yang masih bermaksud servis tersebut sedang berjalan. Jika container sebaliknya keluar, punca biasa ialah pemilikan: direktori ./forgejo mestilah dimiliki oleh UID (user id) dalam USER_UID, atau proses tersebut tidak dapat menulis ke direktori datanya sendiri. Docker Compose pada VPS merangkumi susun atur fail tersebut dan peraturan pemilikan volum sepenuhnya.

Dua jawapan pada halaman persediaan menentukan sama ada URL clone berfungsi. Port SSH mestilah 222, kerana fail Compose memetakan port hos 222 ke port 22 container, dan domain mestilah nama yang akan ditaip oleh pengguna. Jika salah satu daripadanya silap, setiap halaman repositori akan menawarkan arahan clone yang gagal bagi sesiapa yang menyalinnya. Kedua-duanya berada dalam bahagian [server] bagi app.ini selepas itu, sebagai SSH_PORT, SSH_DOMAIN dan ROOT_URL.

Untuk instans awam, terbitkan port web pada alamat loopback sahaja ('127.0.0.1:3000:3000') dan letakkan nginx di hadapannya untuk TLS (transport layer security). Gitea dipasang dengan cara yang sama daripada imej gitea/gitea, atau sebagai satu binari tunggal dengan satu unit systemd dan satu app.ini, dan release stabil semasanya ialah 1.27.1 setakat Ogos 2026.

Kekal menggunakan SQLite selagi boleh. Ia mengekalkan instans kepada satu proses dan satu fail, serta ia bertahan selepas but semula tanpa servis tambahan untuk diselia. PostgreSQL berbaloi dengan kosnya apabila beberapa orang menulis secara serentak, kerana SQLite mensirikan penulisan dan proses CI yang panjang menulis secara berterusan. Kedua-dua projek boleh memindahkan instans sedia ada ke PostgreSQL kemudian, jadi ini bukanlah keputusan yang muktamad.

Forgejo atau Gitea: apakah perbezaan sebenarnya

Salasilah kedua-duanya adalah sama. Gitea dipecahkan (forked) daripada Gogs pada tahun 2016. Pada lewat tahun 2022, kawalan domain dan tanda dagangan Gitea telah berpindah kepada sebuah syarikat, Gitea Ltd, dan beberapa penyelenggara bersama Codeberg memulakan Forgejo. Forgejo diterbitkan oleh Codeberg e.V., sebuah persatuan bukan untung yang berdaftar di Jerman, dan ia beralih daripada lesen MIT kepada GPLv3 (GNU general public license version 3) pada tahun 2024. Gitea kekal dengan lesen MIT dan dibangunkan dengan sokongan komersial di belakangnya.

Dalam penggunaan harian, set ciri kedua-duanya adalah hampir sama. Namun, laluan antara keduanya tidaklah mudah. Forgejo v10.0, dari Januari 2025, merupakan keluaran terakhir yang boleh menerima pangkalan data Gitea secara terus, dan hanya daripada Gitea v1.22 atau lebih lama. Gitea berada pada versi 1.27.1 setakat Ogos 2026, jadi instans Gitea semasa tidak mempunyai cara pertukaran terus (in-place switch) yang disokong ke Forgejo. Pilih satu sebelum anda mengisinya dengan data, dan anggap sebarang perpindahan kemudian sebagai eksport dan import semula.

Satu peraturan ringkas untuk memilih. Jika tadbir urus penting bagi anda, atau anda mahu projek itu kekal di bawah organisasi bukan untung, jalankan Forgejo. Jika anda mahukan pangkalan pemasangan yang lebih besar dan pilihan sokongan komersial, jalankan Gitea. Kedua-duanya diselenggara secara terbuka dan kerap mengeluarkan kemas kini: Forgejo mengeluarkan keluaran stabil setiap tiga bulan dan keluaran LTS (long term support) setiap tahun, dengan v16.0.2 sebagai versi semasa dan v15.0.6 sebagai versi LTS setakat Ogos 2026.

Tahap 3: kos GitLab sebelum ia berfungsi

GitLab CE ialah kelas perisian yang berbeza. Satu instans terdiri daripada set servis yang bekerjasama: Puma untuk aplikasi web, Sidekiq untuk tugasan latar belakang, PostgreSQL, Redis, Gitaly untuk akses repositori, dan nginx di bahagian hadapan. Pakej Omnibus memasang kesemuanya secara bersama, yang menjadikan pemasangan mudah tetapi penggunaan memori asas menjadi tinggi.

Halaman keperluan GitLab mendokumenkan 16 GB RAM dan 8 vCPU sebagai garis dasar untuk pemasangan nod tunggal, dengan 8 GB dinyatakan sebagai tahap minimum dalam persekitaran yang terhad memori. Halaman yang sama mengarahkan anda untuk menyahdayakan swap, kerana aktiviti swap semasa beban tinggi akan merendahkan prestasi instans dengan teruk. Itu adalah angka yang diterbitkan setakat Ogos 2026, dan ia telah meningkat sepanjang tahun, jadi baca semula halaman tersebut sebelum anda menentukan saiz pelayan.

Anda mendapat perkara sebenar untuk bajet tersebut: container registry, package registry, kebenaran yang terperinci, ciri pematuhan dan audit, serta CI yang telah diuji pada skala besar. Jika tiada sesiapa dalam pasukan anda boleh menamakan sesuatu daripada senarai itu yang mereka perlukan pada suku tahun ini, anda sebenarnya membayar untuk VPS yang lebih besar tanpa mendapat sebarang faedah.

Model akses SSH: satu pengguna git dan banyak kunci

Setiap peringkat di sini mengesahkan identiti dengan cara yang sama. Terdapat satu akaun Unix bernama git, dan setiap kunci awam diletakkan ke dalam ~/.ssh/authorized_keys akaun tersebut. Pengesahan identiti bergantung pada kunci. Kebenaran akses pula ditentukan oleh sebarang pilihan yang anda tulis di hadapan kunci pada baris yang sama.

Baris kunci biasa memberikan pemegangnya akses kepada apa sahaja yang boleh dilakukan oleh akaun tersebut. Perintah paksa (forced command) mengehadkan akses tersebut khusus kepada Git:

restrict,command="git-shell -c \"$SSH_ORIGINAL_COMMAND\"" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIexamplekeyhere alice@laptop

restrict, yang tersedia sejak OpenSSH 7.2, mematikan port forwarding, agent forwarding, X11, dan peruntukan PTY (pseudo terminal) dalam satu perkataan. command= menggantikan apa sahaja yang diminta oleh klien dengan perintah yang anda namakan, dan Git masih berfungsi kerana Git menghantar permintaannya dalam $SSH_ORIGINAL_COMMAND.

Sebuah forge menulis fail tersebut untuk anda, dan itulah perbezaan sebenar antara peringkat 0 dan peringkat 2. Forgejo dan Gitea menulis semula authorized_keys dengan satu baris bagi setiap kunci yang didaftarkan, setiap satunya membawa perintah paksa yang menamakan kunci tersebut mengikut ID pangkalan datanya:

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 alice

Perintah paksa itulah cara satu akaun Unix yang dikongsi menjadi kebenaran akses bagi setiap pengguna: key-3 memberitahu forge pengguna mana yang sedang menyambung, dan ia menyemak pengguna tersebut terhadap repositori sebelum sebarang objek dipindahkan. Jangan sunting fail tersebut secara manual pada pelayan yang diuruskan oleh forge, kerana ia akan ditulis semula daripada pangkalan data dan baris anda akan hilang. Deploy keys datang daripada mekanisme yang sama: deploy key ialah kunci SSH biasa yang didaftarkan terhadap satu repositori, biasanya dalam mod baca sahaja, dengan semakan dilakukan di dalam forge dan bukannya di dalam sshd.

Dua tabiat adalah lebih penting daripada mana-mana konfigurasi di atas. Keluarkan satu kunci bagi setiap orang atau setiap mesin, jangan sekali-kali berkongsi kunci, kerana membatalkan kunci yang dikongsi bermakna anda perlu menukar kunci untuk semua orang serentak. Dan buang kunci pada hari seseorang berhenti bekerja, kerana kunci lama dalam fail tersebut adalah akses masuk kekal yang tidak dipantau oleh sesiapa. Pengurusan kunci SSH yang baik pada pelayan merangkumi jenis kunci dan frasa laluan, dan semuanya terpakai di sini tanpa perubahan. Jika pelayan tersebut baharu, sepuluh minit pertama pada VPS baharu adalah perkara yang perlu dilakukan sebelum anda meletakkan repositori di atasnya.

Bolehkah saya menjalankan GitHub Actions pada pelayan Git saya sendiri?

Anda boleh menjalankan aliran kerja (workflow) yang ditulis menggunakan sintaks GitHub Actions. Anda tidak boleh menjalankan GitHub. Forgejo Actions telah didayakan secara lalai sejak Forgejo v1.21 dan membaca fail aliran kerja daripada .forgejo/workflows dalam setiap repositori. Gitea Actions berfungsi dengan cara yang sama dan membaca .gitea/workflows. Kedua-duanya memerlukan program kedua, iaitu runner, yang dipasang dan didaftarkan pada instans anda menggunakan token daripada tetapan pentadbir. Banyak tindakan (action) yang diterbitkan boleh dijalankan tanpa perubahan; namun, apa-apa yang memanggil API GitHub atau menjangkakan infrastruktur yang dihoskan oleh GitHub tidak akan berfungsi.

Rancang untuk dua kesan berikut. Runner memulakan kontena bagi setiap tugasan, jadi ia memerlukan enjin kontena dan peruntukan memori sendiri. Itulah sebabnya ia tidak sepatutnya diletakkan pada pelayan 1 GB yang sama dengan forge. Selain itu, runner melaksanakan apa sahaja yang diarahkan oleh fail aliran kerja, seperti yang dinyatakan dengan jelas dalam dokumentasi Forgejo: runner melakukan pelaksanaan kod jauh (remote code execution). Berikan ia hos sendiri jika boleh, atau sekurang-kurangnya pengguna tanpa keistimewaan (unprivileged user) dan token pendaftaran yang dihadkan kepada satu repositori sahaja.

Jika repositori anda kekal di GitHub dan anda hanya mahukan kuasa pengkomputeran pada perkakasan yang anda kawal, itu adalah persediaan berbeza dengan langkah yang berbeza: runner GitHub Actions yang dihoskan sendiri disambungkan kepada repositori GitHub dan tidak memerlukan semua ini. Jika anda masih menimbang kos untuk berpindah, apa yang sebenarnya diberikan oleh GitHub kepada anda memisahkan pengehosan Git daripada rangkaian di sekelilingnya.

Sandaran: repositori hanyalah separuh daripada keadaan sistem

Repositori bare ialah direktori, jadi menyalinnya bermakna menyalin segala-galanya di dalamnya. Mirror clone daripada mesin lain merupakan sandaran sebenar, dan ia dikemas kini di tempatnya:

git clone --mirror git@vps.example.com:/srv/git/project.git
cd project.git && git remote update

Perintah itu menarik setiap ref dan setiap objek. Ia tidak menarik server-side hooks atau fail description, jadi simpan juga salinan direktori pada peringkat fail jika anda menggunakan hooks.

Sistem forge menyimpan isu, pull requests, pengguna, kunci dan kebenaran dalam pangkalan datanya, dan salinan repositori sahaja akan menghilangkan semua data tersebut. Kedua-dua projek menyediakan perintah dump yang menulis pangkalan data, repositori, konfigurasi dan lampiran ke dalam satu arkib:

sudo -u git forgejo dump -c /etc/forgejo/app.ini -f /var/backups/forgejo-dump.zip

Di bawah Docker, perintah yang sama dijalankan di dalam container, dan laluan konfigurasi bergantung pada imej, jadi periksa dahulu sebelum anda menaip:

docker compose exec server ls /data/gitea/conf
docker compose exec -u git server forgejo dump -c /data/gitea/conf/app.ini

Jalankan perintah tersebut sebagai pengguna yang memiliki data, dan tulis arkib ke direktori yang boleh ditulis oleh pengguna tersebut. Kemudian, salin arkib keluar dari pelayan, kerana sandaran yang hanya wujud pada mesin yang disandarkan bukanlah sandaran yang sebenar. Pemulihan adalah langkah yang sering dilupakan oleh orang ramai: nyahzip satu dump ke mesin simpanan sekarang, supaya anda mempelajari prosedurnya pada waktu yang tenang dan bukannya semasa gangguan perkhidmatan berlaku.

Pemilihan mengikut senario

Seorang pengguna dengan komputer riba dan satu VPS, tanpa keperluan pelayaran web: gunakan bare repositories melalui SSH. Tiada servis tambahan yang perlu dijalankan dan tiada apa-apa yang perlu dinaik taraf.

Situasi yang sama, tetapi anda ingin membaca kod melalui pelayar web dan menghantar pautan kepadanya: tambahkan cgit. Masih tiada pangkalan data, dan tiada servis yang perlu sentiasa berjalan.

Satu pasukan yang menyemak kod antara satu sama lain dan menjejaki isu: gunakan Forgejo atau Gitea, dengan RAM 2 GB atau lebih. Pindahkan CI runner ke pelayan kedua apabila beban kerja menjadi berat.

Sebuah organisasi yang memerlukan container registry dan jejak audit, dengan peruntukan 16 GB RAM pada pelayan: gunakan GitLab. Jangan mulakan GitLab jika bajet RAM anda kurang daripada jumlah tersebut.

Peralihan antara tiga peringkat pertama adalah murah, kerana dalam semua kes tersebut, repositori hanyalah direktori Git biasa pada cakera. Mulakan pada peringkat terendah yang mampu melaksanakan tugas anda. Jika anda sedang menentukan perkhidmatan lain yang wajar diletakkan pada pelayan yang sama, senarai pendek perkhidmatan yang berbaloi untuk di-self-host meletakkan pelayan Git seiring dengan perkhidmatan lain yang bersaing untuk mendapatkan ruang RAM tersebut.

FAQ

Bolehkah VPS 1 GB menjalankan Forgejo atau Gitea?

Ya, bagi pasukan kecil yang menggunakan SQLite dan tanpa bebanan berat lain pada pelayan tersebut. Dokumentasi Gitea menyatakan 1 GB RAM dan 2 teras CPU biasanya mencukupi untuk pasukan dan projek kecil, manakala Forgejo merupakan fork daripada Gitea dengan spesifikasi yang sama. Jangan tambah PostgreSQL atau CI runner pada mesin tersebut. Jika servis hilang tanpa ralat dalam lognya sendiri, jalankan sudo dmesg -T | grep -i oom: baris yang menamakan proses yang ditamatkan bermakna kernel out of memory killer telah menghentikannya, dan penyelesaiannya adalah pelan pelayan yang lebih besar, bukannya flag penalaan.

Apakah perbezaan antara Forgejo dan Gitea?

Kedua-duanya berkongsi sejarah kod sumber dan kebanyakan ciri. Gitea di-fork daripada Gogs pada tahun 2016, dan Forgejo di-fork daripada Gitea pada lewat tahun 2022 selepas kawalan tanda dagangan Gitea berpindah kepada sebuah syarikat. Forgejo diterbitkan oleh Codeberg e.V., sebuah pertubuhan bukan untung di Jerman, di bawah lesen GPLv3; Gitea kekal dengan lesen MIT dan sokongan komersial. Perbezaan praktikalnya terletak pada laluan migrasi. Forgejo v10.0, dari Januari 2025, merupakan keluaran terakhir yang boleh menerima pangkalan data Gitea secara terus, dan hanya daripada Gitea v1.22 atau lebih lama, jadi instans Gitea semasa tidak mempunyai kaedah pertukaran terus yang disokong.

Bolehkah saya menjalankan workflow GitHub Actions pada pelayan Git yang dihoskan sendiri?

Forgejo Actions dan Gitea Actions kedua-duanya menjalankan workflow yang ditulis dalam sintaks YAML GitHub Actions, yang dibaca daripada .forgejo/workflows dan .gitea/workflows. Anda perlu memasang program runner yang berasingan dan mendaftarkannya pada instans anda. Banyak action yang diterbitkan berfungsi tanpa perubahan, manakala mana-mana action yang memanggil API GitHub tidak akan berfungsi. Runner tersebut melaksanakan kod arbitrari daripada repositori anda dan memulakan satu container bagi setiap tugasan, jadi sediakan hos berasingan untuknya, atau sekurang-kurangnya pengguna tanpa keistimewaan (unprivileged user), dan jangan jalankan ia pada pelayan 1 GB yang sudah pun mengendalikan forge tersebut.

Bagaimanakah cara membuat sandaran (backup) pelayan Git yang dihoskan sendiri?

Untuk repositori bare, git clone --mirror daripada mesin lain akan menyalin setiap ref dan objek, dan git remote update di dalam mirror tersebut akan menyegarkannya. Bagi Forgejo atau Gitea, repositori hanyalah sebahagian daripada keadaan sistem, kerana isu, pull request, pengguna dan kunci disimpan di dalam pangkalan data. Gunakan fungsi dump terbina dalam, sudo -u git forgejo dump -c /etc/forgejo/app.ini, atau arahan yang sama di dalam container untuk pemasangan Docker. Salin arkib tersebut keluar dari pelayan, dan cuba pulihkan satu arkib ke mesin simpanan (spare machine) sekali untuk memastikan prosedur tersebut berfungsi.

#git#self-hosting#forgejo#gitea#ssh