Git
Chapters ▾ 2nd Edition

4.2 Git na serveru - Zprovoznění Gitu na serveru

Zprovoznění Gitu na serveru

Teď se budeme věnovat nastavení gitové služby, která dříve zmíněné protokoly provozuje na vašem vlastním serveru.

Note

Ukážeme si příkazy a kroky pro základní, zjednodušenou instalaci na linuxovém serveru, ale tyto služby lze provozovat i na Mac nebo na windowsovských serverech. Při zprovozňování produkčního serveru uvnitř vaší infrastruktury ve skutečnosti určitě narazíte na rozdíly při nastavování zabezpečení nebo v použití nástrojů operačního systému, ale snad zde získáte obecný přehled, čeho všeho se to týká.

Pro úvodní nastavení jakéhokoliv gitového serveru musíte vyexportovat existující repozitář do nového, holého repozitáře (bare repository), tj. do repozitáře, který neobsahuje pracovní adresář. S tím obvykle nebývá problém. Chcete-li naklonovat stávající repozitář a vytvořit tím nový, holý repozitář, přidejte do příkazu pro klonování volbu --bare:

$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.

V adresáři my_project.git byste teď měli mít kopii dat z původního gitového adresáře.

Je to přibližně stejné, jako byste provedli něco takového:

$ cp -Rf my_project/.git my_project.git

Bude tu sice pár menších rozdílů v konfiguračním souboru, ale pro náš účel můžeme příkazy považovat za téměř shodné. Vezme se samotný gitový repozitář (bez pracovního adresáře) a vytvoří pro něj samostatný adresář.

Umístění holého repozitáře na server

Nyní, když máte vytvořenu holou kopii repozitáře, zbývá ji už jen umístit na server a nastavit protokoly. Řekněme, že jste zřídili server nazvaný git.example.com, k němuž máte přístup přes SSH, a že chcete všechny své gitové repozitáře umístit pod adresář /srv/git. Za předpokladu, že /srv/git na serveru už existuje, můžete nový repozitář vytvořit tím, že dovnitř nakopírujete váš holý repozitář:

$ scp -r my_project.git user@git.example.com:/srv/git

Od tohoto okamžiku mohou ostatní uživatelé, kteří mají SSH přístup k stejnému serveru s oprávněním pro čtení k adresáři /srv/git, naklonovat váš repozitář spuštěním

$ git clone user@git.example.com:/srv/git/my_project.git

Pokud se uživatel dostane přes SSH na server a má oprávnění k zápisu do adresáře /srv/git/my_project.git, má automaticky také oprávnění k odesílání dat.

Zadáte-li příkaz git init s volbou --shared, Git automaticky nastaví příslušná oprávnění skupiny k zápisu.

$ ssh user@git.example.com
$ cd /srv/git/my_project.git
$ git init --bare --shared

Vidíte, jak jednoduché je vzít gitový repozitář, vytvořit jeho holou verzi a umístit ji na server, k němuž máte vy i vaši spolupracovníci SSH přístup. Teď už vám nic nebrání v zahájení spolupráce na stejném projektu.

Důležité je, že je to opravdu vše, co musíte udělat pro spuštění gitového serveru, ke kterému má přístup víc lidí. Prostě na server přidáte účty s SSH přístupem a umístíte holý repozitář někam, kam budou mít všichni zúčastnění nastaveno oprávnění pro čtení i zápis. Můžete začít — nic dalšího nepotřebujete.

V několika dalších podkapitolách si ukážeme pokročilejší možnosti nastavení. Probereme si, jak se vyhnout nutnosti vytváření uživatelských účtů pro každého uživatele, jak k repozitářům přiřadit veřejné oprávnění pro čtení, jak nastavit webová uživatelská rozhraní a další. Ale zapamatujte si, že pro spolupráci skupiny lidí na soukromém projektu je vše, co opravdu potřebujete, jen libovolný server podporující SSH a holý repozitář.

Nastavení pro malou skupinu

Pokud je váš tým malý nebo pokud chcete Git jen vyzkoušet ve své organizaci a máte jen pár vývojářů, může se vám to zjednodušit. Jednou z nejsložitějších stránek nastavení gitového serveru je správa uživatelů. Pokud chcete, aby byly určité repozitáře pro některé uživatele přístupné pouze ke čtení a pro jiné i k zápisu, může být nastavení přístupu a oprávnění trochu obtížnější.

SSH přístup

Jestliže už máte k dispozici nějaký server, k němuž mají všichni vaši vývojáři SSH přístup, bude většinou nejjednodušší nachystat repozitář na něm, protože celé nastavení už tím máte v podstatě hotové (jak jsme ukázali v předchozí podkapitole). Pokud pro své repozitáře požadujete komplexnější správu oprávnění, můžete to zvládnout běžnými oprávněními k systému souborů, které vám nabízí operační systém daného serveru.

Pokud chcete své repozitáře umístit na server, na kterém nejsou zřízeny účty pro všechny členy vašeho týmu, kteří by měli mít oprávnění k zápisu, musíte pro ně nastavit SSH přístup. Předpokládáme, že pokud máte server, na němž to lze provést, máte už nainstalován server SSH a jeho prostřednictvím k serveru přistupujete.

Existuje několik způsobů, jak umožnit přístup všem členům vašeho týmu. Prvním způsobem je nastavit účty pro každého zvlášť, což je sice přímočaré, ale může to být těžkopádné. Asi nebudete mít chuť spouštět příkaz adduser (přidat uživatele) a nastavovat pro každého uživatele dočasná hesla.

Druhá metoda spočívá v tom, že na daném počítači vytvoříte jediného uživatele git, požádáte všechny uživatele, kteří mají mít oprávnění k zápisu, aby vám poslali svůj veřejný SSH klíč, a přidáte tento klíč do souboru ~/.ssh/authorized_keys vašeho nového uživatele git. Od toho okamžiku budou mít všichni přístup k tomuto počítači prostřednictvím uživatele git. Tento postup nemá žádný vliv na data vašich revizí — SSH uživatel, jehož účtem se přihlašujete, neovlivní revize, které jste nahráli.

Dalším možným způsobem je nechat ověřovat SSH přístupy LDAP serveru nebo jinému centralizovanému zdroji ověření, který už možná máte nastavený. Dokud má každý uživatel shellový přístup k danému počítači, měly by fungovat všechny autentizační mechanismy SSH, které vás jen napadnou.