[[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