Git szerver üzemeltetése saját Debian alapú gépen

Üdvözöllek a digitális világban, ahol a kódot, a dokumentumokat és szinte bármilyen fájlt precízen, nyomon követhetően kezelhetünk! Ha valaha is elgondolkodtál azon, hogyan tarthatnád teljesen a verziókezelés irányítását a saját kezedben, függetlenül a külső szolgáltatóktól, akkor jó helyen jársz. Ez a cikk arról szól, hogyan építhetjük fel és üzemeltethetjük a saját Git szerverünket egy Debian alapú gépen. Merüljünk el a részletekben!

Bevezetés: Miért érdemes saját Git szervert futtatni?

A Git mára a szoftverfejlesztés egyik alapvető eszközévé vált, de nem csak fejlesztők használják; bárki profitálhat belőle, aki fájlok, projektek változásait szeretné nyomon követni. Bár léteznek népszerű, felhőalapú szolgáltatások, mint a GitHub, GitLab vagy Bitbucket, sokak számára vonzó lehetőség egy saját Git szerver üzemeltetése. De miért is? Íme néhány érv:

  • Teljes kontroll és adatvédelem: Az adatok a saját gépeden vannak, így teljes mértékben Te rendelkezel felettük. Nincs harmadik fél, akinek hozzáférése lehetne a bizalmas projektekhez.
  • Függetlenség: Nem függsz külső szolgáltatók leállásaitól, szolgáltatásmódosításaitól vagy árazásától. A szervered mindig elérhető lesz, amíg a géped fut.
  • Testreszabhatóság: Személyre szabhatod a konfigurációt, a biztonsági beállításokat, és integrálhatod a saját munkafolyamataidba.
  • Tanulás és tapasztalat: A szerver beállítása és karbantartása mélyebb betekintést enged a Linux rendszergazdai feladatokba, a hálózatba és persze magába a Git működésébe.
  • Költséghatékonyság: Ha már rendelkezel egy otthoni szerverrel vagy egy régi géppel, gyakorlatilag ingyen futtathatod a Git szervert, eltekintve az áramfogyasztástól.

Célunk egy olyan átfogó útmutató nyújtása, amely lépésről lépésre végigvezet a folyamaton, a kezdeti beállításoktól a biztonsági szempontokig. Készen állsz?

Alapvető feltételek és előkészületek

Mielőtt belevágnánk a sűrűjébe, győződjünk meg róla, hogy minden szükséges feltétel adott:

Hardver és operációs rendszer

  • Egy Debian alapú gép: Ez lehet egy virtuális gép (VM), egy dedikált fizikai szerver, egy Raspberry Pi, vagy akár egy régi, újrahasznosított PC. Fontos, hogy stabilan és megbízhatóan működjön. Ez az útmutató Debian 10 (Buster) vagy 11 (Bullseye) verziókhoz készült, de hasonlóan működik más Debian-alapú disztribúciókon is (pl. Ubuntu, Linux Mint).
  • Megfelelő erőforrások: A Git szerver maga nem erőforrásigényes, de a tárolt repository-k méretétől és a felhasználók számától függően érdemes elegendő lemezterületet biztosítani. Memória és CPU szempontjából egy modern processzor és 1-2 GB RAM általában bőségesen elegendő.

Hálózati hozzáférés és biztonság

  • SSH hozzáférés: Győződj meg róla, hogy tudsz távolról csatlakozni a szerveredhez SSH-n keresztül. Ez lesz a fő kommunikációs csatorna.
  • Sudo jogosultságok: Szükséged lesz root vagy sudo jogosultságokkal rendelkező felhasználóra a telepítésekhez és a rendszerkonfigurációhoz.
  • Statikus IP cím (opcionális, de ajánlott): Ha a szerver a helyi hálózatról is elérhetővé teszed, érdemes statikus IP címet beállítani, vagy legalább egy DHCP-foglalást. Ha interneten keresztül is szeretnéd elérni, akkor szükséged lesz port forwardra a routereden (alapértelmezetten 22-es portra).

Alapvető Git ismeretek

Bár a cikk a szerver beállítására fókuszál, alapvető Git parancsok ismerete (git clone, git push, git pull, git init) elengedhetetlen a kliens oldali használathoz.

Kezdjük az előkészítéssel! Frissítsük a rendszerünket a legújabb csomagokkal:

sudo apt update
sudo apt upgrade -y

Ezután telepítsük a Git-et, ha még nincs telepítve:

sudo apt install git -y

Git szerver üzemeltetésének alapjai: SSH alapú megközelítés

A legegyszerűbb és legbiztonságosabb módja a Git szerver üzemeltetésének a tiszta Git protokoll használata SSH-n keresztül. Ez nem igényel semmilyen webes felületet vagy komplex konfigurációt, csak a Git-et és az OpenSSH szervert, ami általában alapértelmezetten telepítve van Debianon.

A ‘git’ felhasználó létrehozása

A biztonságos működés érdekében hozzunk létre egy dedikált felhasználót, amely kizárólag a Git repository-k kezelésére szolgál. Ez a felhasználó nem fog tudni bejelentkezni a shellbe, így minimalizálva a potenciális biztonsági kockázatokat.

sudo adduser --system --group --shell /usr/bin/git-shell --home /srv/git git

Magyarázat a parancshoz:

  • --system: Rendszer felhasználót hoz létre, akiknek nincsenek normál login jogosultságaik.
  • --group: Létrehoz egy azonos nevű csoportot a felhasználónak.
  • --shell /usr/bin/git-shell: Nagyon fontos! Ez beállítja, hogy a ‘git’ felhasználó bejelentkezési shellje a git-shell legyen. Ez a shell csak a Git műveleteket engedélyezi (git push, git pull), és semmilyen más parancsot nem.
  • --home /srv/git: A felhasználó home könyvtárát a /srv/git-re állítja, ide fognak kerülni a repository-k.

SSH kulcsok generálása és kezelése

A Git kommunikáció SSH-n keresztül SSH kulcsokkal történik, nem jelszóval. Ez sokkal biztonságosabb és kényelmesebb. Minden felhasználó, aki hozzá akar férni a Git szerverhez, rendelkeznie kell egy SSH kulcspárral (nyilvános és privát kulcs).

Kliens oldalon (a Te számítógépeden):

Ha még nincs SSH kulcsod, generálj egyet a következő paranccsal (hagyd az alapértelmezett fájlnevet, és opcionálisan adj meg egy jelszót a privát kulcshoz):

ssh-keygen -t rsa -b 4096 -C "[email protected]"

Ez létrehozza a ~/.ssh/id_rsa (privát kulcs) és ~/.ssh/id_rsa.pub (nyilvános kulcs) fájlokat.

Most másold át a nyilvános kulcsodat (id_rsa.pub) a szerverre. A legegyszerűbb módszer az ssh-copy-id használata:

ssh-copy-id git@a_szervered_ip_címe_vagy_domain_neve

Ha ez valamilyen okból nem működik, manuálisan is megteheted:

cat ~/.ssh/id_rsa.pub

Másold ki a kimenetet, majd lépj be SSH-n a szerverre (mint a sudo jogosultsággal rendelkező felhasználód), és szerkeszd a /srv/git/.ssh/authorized_keys fájlt.

Szerver oldalon:

Lépj be a szerverre a sudo felhasználóddal:

ssh felhasznalo@a_szervered_ip_címe

Hozz létre egy .ssh könyvtárat a git felhasználó home könyvtárában, és állítsd be a megfelelő engedélyeket:

sudo mkdir -p /srv/git/.ssh
sudo chmod 700 /srv/git/.ssh
sudo touch /srv/git/.ssh/authorized_keys
sudo chmod 600 /srv/git/.ssh/authorized_keys
sudo chown -R git:git /srv/git/.ssh

Most nyisd meg az authorized_keys fájlt szerkesztésre:

sudo nano /srv/git/.ssh/authorized_keys

Illessze be a kimásolt nyilvános kulcsot (ami ssh-rsa AAAA...-val kezdődik) ebbe a fájlba, majd mentsd és zárd be. Minden egyes felhasználó nyilvános kulcsa külön sorba kerüljön.

Fontos: A git-shell használatakor a command="git-shell" opciót az authorized_keys fájlban ne távolítsd el, ha az ssh-copy-id hozzáadta. Ez biztosítja, hogy a felhasználó csak a Git műveleteket végezhesse.

Git tárolók (repository-k) inicializálása

Most, hogy a hozzáférés be van állítva, létrehozhatjuk az első repository-t. A Git szervereken úgynevezett „bare” (csupasz) repository-kat használunk, amelyek nem tartalmaznak munkafolyamat könyvtárat, csak a Git metaadatait.

Lépj be a szerverre, és hozz létre egy új repository-t (pl. projekt1.git):

sudo mkdir -p /srv/git/projekt1.git
sudo chown git:git /srv/git/projekt1.git
sudo -u git git init --bare /srv/git/projekt1.git

Ez létrehozza a projekt1.git könyvtárat, beállítja a tulajdonost a git felhasználóra, és inicializálja azt egy csupasz Git repository-ként.

A kliens oldal beállítása és az első klónozás

Most, hogy a szerver oldalon minden készen áll, próbáljuk meg klónozni az újonnan létrehozott repository-t a kliens gépedről (ahol a privát kulcsod van).

Nyisd meg a terminálodat a kliens gépen, és add ki a következő parancsot:

git clone git@a_szervered_ip_címe_vagy_domain_neve:/srv/git/projekt1.git

Ha minden jól megy, látnod kell egy üzenetet, miszerint a projekt1.git klónozva lett egy üres könyvtárba. Ez azt jelenti, hogy a SSH kapcsolat és a Git szerver működik!

Munkamenet: Push és Pull

Most próbáljuk ki a push/pull műveleteket. Lépj be a klónozott projekt1 könyvtárba a kliensen:

cd projekt1

Hozzon létre egy fájlt és add hozzá a repository-hoz:

echo "Hello Git Server!" > README.md
git add README.md
git commit -m "Initial commit with README"
git push origin master

Ha a git push origin master sikeres volt, akkor a fájl a Git szerveren található repository-ban van. Ha valaki más klónozza vagy lehúzza (git pull) ugyanezt a repository-t, látni fogja a változásaidat.

További lehetőségek és fejlettebb konfigurációk

Az SSH alapú tiszta Git szerver kiváló alap, de vannak más lehetőségek is, ha komplexebb igényeid vannak:

Git Daemon: Nyilvános olvasási hozzáférés

Ha szeretnél nyilvános, autentikáció nélküli olvasási hozzáférést biztosítani bizonyos repository-khoz (például nyílt forráskódú projektekhez), használhatod a Git Daemont. Ez a Git saját protokollját használja (alapértelmezett port: 9418).

Telepítés és beállítás (Debianon):

sudo apt install git-daemon-run
sudo systemctl enable git-daemon
sudo systemctl start git-daemon

A repository-k elérhetővé tételéhez létre kell hozni egy git-daemon-export-ok fájlt az adott repository gyökérkönyvtárában:

sudo touch /srv/git/projekt1.git/git-daemon-export-ok

Ezután a kliensek így klónozhatják:

git clone git://a_szervered_ip_címe_vagy_domain_neve/projekt1.git

Fontos: Ez a módszer autentikáció nélküli, csak olvasási hozzáférést biztosít!

HTTP/HTTPS alapú Git: Rugalmasság és tűzfal barátság

A Git over HTTP/HTTPS lehetővé teszi a Git használatát a standard webes protokollokon keresztül. Ez kényelmes lehet tűzfalak mögött, vagy ha már van egy web szervered (pl. Apache, Nginx), és szeretnéd azt használni az autentikációhoz. Ez a beállítás bonyolultabb, mivel web szerver konfigurációra van szükség (pl. git-http-backend, Basic Auth vagy más autentikációs mechanizmusok). Általában akkor érdemes ezzel foglalkozni, ha nem csak tiszta Git funkciókra, hanem felhasználókezelésre és webes felületre is szükség van, ekkor viszont érdemes inkább a következő pontban említett dedikált megoldások felé fordulni.

Harmadik féltől származó megoldások: Gitolite, Gitea, GitLab

Ha a fenti alapvető megoldások már nem elegendőek, és olyan funkciókra van szükséged, mint a felhasználók és csoportok részletes kezelése, webes felület a repository-k böngészéséhez, issue tracking, CI/CD, akkor érdemes dedikált Git platformokat megfontolni:

  • Gitolite: Egy erőteljes, SSH-alapú jogosultságkezelő réteg a Git fölött. Lehetővé teszi, hogy kifinomult engedélyeket állíts be a repository-khoz és felhasználókhoz (pl. „ez a felhasználó csak ebbe a branchbe pusholhat”). Nagyon rugalmas, de nincs webes felülete.
  • Gitea/Gogs: Könnyűsúlyú, Go nyelven írt, GitHub-szerű webes felületek. Egyszerűen telepíthetők, kevés erőforrást igényelnek, és számos funkciót kínálnak (webes felület, felhasználókezelés, issue tracker). Kiváló választás kisebb csapatoknak vagy személyes használatra, ha webes felületre van szükség.
  • GitLab Community Edition (CE): Egy teljes értékű, nyílt forráskódú DevSecOps platform. Rengeteg funkciót kínál (Git repository-k, CI/CD, konténer registry, statikus oldal generátor, stb.). Erőforrásigényesebb, mint a Gitea, de rendkívül sokoldalú és professzionális felhasználásra is alkalmas.

Ezeknek a telepítése és konfigurációja jóval komplexebb, mint egy egyszerű SSH alapú Git szerveré, és külön cikket érdemelnek. A céljuk, hogy a saját gépünkre hozzunk egy „mini GitHub”-ot.

Biztonsági megfontolások: Ne tegyük ki magunkat veszélynek!

A Git szerver üzemeltetése nem csak a funkciókról, hanem a biztonságról is szól. Néhány alapvető lépés, amit mindenképpen tegyél meg:

  • SSH biztonság: Jelszavaktól a kulcsokig: Már használtuk az SSH kulcsokat a Git-hez, de a szerveredre való SSH bejelentkezést is érdemes jelszavas autentikációról kulcsalapúra állítani és a jelszavas belépést tiltani. Ezenkívül tiltsd le a root felhasználó közvetlen SSH bejelentkezését. Ezek a /etc/ssh/sshd_config fájlban konfigurálhatók (PasswordAuthentication no, PermitRootLogin no). Ne feledd, a változtatások után újra kell indítani az SSH szolgáltatást (sudo systemctl restart sshd).
  • Tűzfal beállítása (UFW): Aktiválj egy tűzfalat a szervereden. Debianon az UFW (Uncomplicated Firewall) egyszerűen használható. Engedélyezd az SSH (22-es port) és ha használod, a Git Daemon (9418-as port) bejövő forgalmát.
    sudo apt install ufw
    sudo ufw allow ssh
    sudo ufw enable
    sudo ufw status

    Ha más portokat is használsz (pl. 80/443 HTTP/HTTPS-hez), azokat is engedélyezned kell.

  • Rendszeres frissítések: Tartsd naprakészen a rendszeredet! A biztonsági rések gyakran a régebbi szoftververziókban találhatók. Automatizálhatod is a frissítéseket az unattended-upgrades csomaggal.
  • Behatolásvédelem (Fail2ban): Telepítsd a Fail2ban-t, amely figyeli a naplófájlokat, és automatikusan blokkolja (tűzfal szabályokkal) azokat az IP címeket, amelyek ismételt sikertelen bejelentkezési kísérleteket hajtanak végre.
    sudo apt install fail2ban

    Alapértelmezett konfigurációja már védi az SSH-t.

Mentés és karbantartás: Az adatok védelme

A legfontosabb repository-k biztonsági mentése létfontosságú! Egy hardverhiba vagy véletlen törlés súlyos adatvesztéshez vezethet.

  • Rendszeres biztonsági mentések: A legegyszerűbb módja a repository-k mentésének az rsync parancs használata egy másik gépre vagy egy külső meghajtóra.
    rsync -avz /srv/git/ /uticel_eleresi_utja/git_mentesek/

    Automatizáld ezt egy cron feladattal. Érdemes több mentést is tárolni (például heti, havi mentések), és biztosítani, hogy a mentés helye fizikailag elkülönüljön a szervertől.

  • Diszkterület monitorozása: Rendszeresen ellenőrizd a szabad diszkterületet a df -h paranccsal, hogy elkerüld a helyhiány miatti leállásokat. A Git repository-k idővel növekedhetnek, különösen, ha sok bináris fájlt tárolsz.

Összefoglalás és a következő lépések

Gratulálok! Most már tudod, hogyan kell felállítani és üzemeltetni egy alapvető, de megbízható Git szervert a saját Debian alapú gépeden. Ez a konfiguráció elegendő a legtöbb egyéni és kis csapat számára, és teljes kontrollt biztosít a verziókezelésed felett.

Emlékezz, a biztonság és a rendszeres mentés kulcsfontosságú. Ahogy a projektjeid növekednek, vagy ha több funkcióra lesz szükséged (webes felület, fejlett felhasználókezelés, CI/CD), fontold meg a Gitolite, Gitea vagy GitLab telepítését. Ezek robusztusabb megoldásokat kínálnak, de egyben nagyobb erőforrásigényűek és komplexebben konfigurálhatók.

A saját Git szerver üzemeltetése nagyszerű módja annak, hogy elmélyítsd a Linux és a hálózatkezelési ismereteidet, miközben egy rendkívül hasznos eszközt hozol létre magadnak vagy a csapatodnak. Kísérletezz, tanulj, és élvezd a függetlenséget, amit a saját gépünkön futó szolgáltatások nyújtanak!

Leave a Reply

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük