[[oktatas:web:deploy|< Deploy]]
====== Telepítés git kampóval ======
* **Szerző:** Sallai András
* Copyright (c) Sallai András, 2019, 2020
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]]
* Web: https://szit.hu
===== Bevezetés =====
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.
{{:oktatas:web:deploy:deploy_git_hook.png?400|}}
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.
===== Terv =====
==== Szükséges ====
* célszerver
* a célszerveren telepített:
* git
* apache2
==== Környezet ====
* szerver elérése név alapján: sarga.lan
* példa webes projekt neve: projekt01
===== Szerveren =====
==== Telepítés ====
# apt install git apache2
==== Felhasználó ====
A szerveren hozunk létre egy jelszó nélküli git felhasználót:
# adduser --disabled-password git
==== Projekt létrehozása ====
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
===== SSH kulcsok =====
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 projekt =====
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.
===== Git hook beállítása =====
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
===== Projekt fejlesztése =====
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.
{{:oktatas:web:deploy:remote_add.png?400|}}
Ha már van távoli (remote) beállítás, kérdezzük le őket:
git remote -v
===== A git felhasználó linuxos bejelentkezésének tiltása =====
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