A megfelelő angol kulcsszavak: deploy, git hook. A példánkban egy weboldal állományait szeretnénk eljuttatni a célszerverre, ahol a webszerver kiszolgálhatja azokat.
A webhelyet git verziókövetővel fejlesztjük. A célszerver egyben git tároló is. Célunk, hogy a git szerverre feltöltés után a git tárolóból automatikusan települjön a webszerver könyvtárába minden változtatás.
A módszer hátránya, ha nem sikerült a feltöltés után a hook művelet, akkor addig nem is lehet újra próbálkozni, amíg valamit nem kommitoltunk újra.
Ebben az írásban, a parancsok előtt egy $
vagy egy #
karakter áll.
A $
, azt jelenti felhasználóként kell kiadni. A #
, azt jelenti root
felhasználóként kell kiadni.
# apt install git apache2
A szerveren hozunk létre egy jelszó nélküli git felhasználót:
# adduser --disabled-password git
Rendszergazdaként váljunk git felhasználóvá:
# su - git
git felhasználóként, hozzuk létre projektet:
$ mkdir projekt01.git $ cd projekt01.git $ git init --bare
Másoljuk a szerverre a nyilvános kulcsot:
$ ssh-keygen -f ~/.ssh/web_rsa -b 4096 -t rsa $ scp ~/.ssh/web_rsa.pub janos@sarga.lan:
Szerveren:
# mkdir /home/git/.ssh # cat /home/janos/web_rsa.pub >> /home/git/.ssh/authorized_keys # chown git: /home/git/.ssh/authorized_keys # chmod 600 /home/git/.ssh/authorized_keys
Kliensen:
$ GIT_SSH_COMMAND='ssh -i ~/.ssh/web_rsa' git push web
Vagy:
Egyéni konfiguráció összeállítása:
$ nano ~/.ssh/config
Tartalma a következő legyen:
Host web Hostname sarga.lan User git IdentityFile ~/.ssh/web_rsa IdentitiesOnly yes
$ chmod 600 ~/.ssh/config
Próbáljuk ki az ssh elérést:
$ ssh web
Webes tárhely a projekt számára a szerveren:
# mkdir /var/www/html/projekt01 # chown git:www-data /var/www/html/projekt01 # chmod ug+rwx /var/www/html/projekt01 # chmod g+s /var/www/html/projekt01
Az utolsó beállítás: a könyvtárban létrehozott összes fájl és könyvtár a csoport jogait örökölje és ne a létrehozó csoportazonosítóját.
A szerveren hozzuk létre a post-receive fájlt:
# su - git $ nano ~/projekt01.git/hooks/post-receive
A post-receive tartalma:
#!/bin/bash git --work-tree=/var/www/html/projekt01/ \ --git-dir=/home/git/projekt01.git/ \ checkout -f
$ chmod +x ~/projekt01/hooks/post-receive
A kliens gépen hozzuk létre a projektet, kezdjük el, majd készítsük el git tárolót, végül végezzük el a leírást:
$ mkdir projekt01 $ cd projekt01 $ echo Lomos > index.html $ git config --global --edit $ git init $ git add . $ git commit -m 'initial commit'
Töltsük fel a szerverre:
$ git remote add web web:projekt01.git $ git push web master
A projektet feltöltöttük, ellenőrizzük böngészőben az eredményt.
Ha már van távoli (remote) beállítás, kérdezzük le őket:
git remote -v
A git felhasználó számára a szerveren szeretnénk letiltani a linuxos bejelentkezést; ehhez git-shell nevű parancsértelmezőt fogjuk használni.
A git-shell alapértelmezetten nem használható, fel kell venni a /etc/shells állományba. Ellenőrizzük, hogy szerepel-e az állományban:
$ cat /etc/shells
Ha nem szerepel, kérdezzük le, honnan fut:
$ which git-shell
Debian10 rendszeren ez a következő:
/usr/bin/git-shell
Ezek után vegyük fel az útvonalat a /etc/shells állományban:
# echo /usr/bin/git-shell >> /etc/shells
Most lecserélhetjük a git felhasználó parancsértelmezőjét:
# chsh -s $(which git-shell) git
Ellenőrizzük:
$ getent passwd git