Propojte si Git s webhostingem

Martin Taraba   15. 7. 2019


Věděli jste, že jde celý proces nahrávání stránek na webhosting vměstnat do jednoho příkazu? Ukážu vám, jak na to.

Spousta správců webových stránek stále nepoužívá žádný verzovací systém, a změny na webu nahrává přes FTP. Pokud si chcete výrazně ušetřit čas a práci, doporučuju začít využívat Git, který celý proces automatizuje. Ukážu vám, jak v něm jednoduše nahrajete kompletní web na server pomocí jediného odesílání do vzdáleného repozitáře commitu. Usnadníte tím spuštění nových verzí, a také případné opravy, pokud se něco pokazí.

Co budeme potřebovat:

  • Základní znalosti práce s Gitem,
  • Webhosting s Gitem,
  • Funkční připojení přes SSH k serveru webhostingu.

Nastavení na serveru webhostingu

Nejdřív si na hostingovém serveru vytvoříme repozitář projektu našich stránek. Jakmile do něj pošleme novou verzi webu, data se přenesou do veřejného adresáře.

Vytvoření repozitáře na serveru

  1. Připojíme se k serveru webhostingu pomocí SSH.
    $ ssh uzivatel@adresa-serveru
  2. Vytvoříme adresář pro Git repozitář. Musí být neveřejný a mimo adresář pro data webu (Document Root). Dobrá cesta může být třeba váš domovský adresář (v shellu se v cestě odkazuje jako ~).
    $ mkdir ~/repo/mujprojekt.git
    $ cd ~/repo/mujprojekt.git
    
  3. Nakonec v adresáři „zapneme Git“.
    $ git init --bare

Přepínač --bare způsobí, že se do adresáře rovnou uloží interní data Gitu. Asi jste zvyklí vytvářet spíše klasické repozitáře, kdy jsou v adresáři naše zdrojové kódy a ve skrytém podadresáři .git data Gitu.

Proč používáme neveřejnou cestu?

Spousta lidí vytváří Git repozitář přímo v adresáři s daty webu (Document Root). Za nás to má vícero nevýhod, dvě hlavní jsou:

Zabránění přístupu k interním datům Gitu přes web

Pokud bychom nahráli soubory na špatně zabezpečený hosting, kdokoliv by se mohl dostat ke všem našim zdrojovým kódům a historii, což určitě nechceme. Teď můžete mít vše v pořádku, ale co když budete v budoucnu migrovat, a tohle zapomenete otestovat?

Práce s větvemi, lokální změny a další

Pokud máte Git přímo v datech webu, nemůžete například přepnout větev, aniž by se změna okamžitě ukázala všem návštěvníkům. Často také dochází k tomu, že někdo udělá lokální změnu a zapomene ji potvrdit (commit). Při nahazování nové verze z repozitáře pak dojde ke konfliktům.

Vytvoření hooku

Hooky v Gitu slouží ke spuštění skriptu při určité události. My si vytvoříme skript, který po nahrání nového commitu přenese data aplikace do veřejného adresáře. Třeba takhle:

$ echo "GIT_WORK_TREE=/domains/produkcni.domena/web/www git checkout -f master" > hooks/post-receive

Nesmíme mu zapomenout nastavit práva na spouštění, jinak se neprovede:

$ chmod u+x hooks/post-receive

Lokální nastavení Gitu

Repozitář Gitu vytvoříme také na počítači, kde stránky vyvíjíme. Aby se data měla kam ukládat, musíme k němu napojit vzdálený hostingový server. Pokud už Git používáte pro jiné projekty, tvorbu repozitáře můžete přeskočit.

Vytvoření repozitáře

  1. Vytvoříme si adresář a inicializujeme v něm Gitový repozitář:
    $ mkdir ~/git/mujprojekt
    $ cd ~/git/mujprojekt
    $ git init
    
  2. Pro ukázku si vytvoříme jednoduchý index soubor:
    $ echo "Toto jsem nahrál přes Git" > index.html
  3. Přidáme ho do Gitu a potvrdíme změnu:
    $ git add index.html
    $ git commit -m "Ukázkový index soubor"
    

Přidání remote a nahrání na server

Blížíme se do finále. V Gitu přidáme náš vzdálený repozitář (remote), který jsme si na začátku na webhostingovém serveru vytvořili.

$ git remote add produkce ssh://uzivatel@adresa-serveru:repo/mujprojekt.git

Celý web na něj nahrajeme jedním příkazem:

$ git push produkce master

Použijeme ho pokaždé, když budeme chtít zveřejnit novou verzi webu. Stačí vytvořit další commit, a příkazem push ho odeslat na webhosting.

A jak to vylepšit?

Popsaný postup je vhodný jen pro jednoduché (nejlépe statické) weby, které spravuje jeden vývojář. U složitějších projektů může být vhodnější použít třeba GitLab a jeho deploy přes CI/CD. V týmu je pak mnohem příjemnější práce, a hlavně lepší viditelnost provedených změn, zveřejněných verzí i výsledků automatických testů. O tom ale až někdy příště.