< Deploy

Telepítés git kampóval

Szerző: Sallai András

Copyright © Sallai András, 2019, 2020

Licenc: 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.

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.

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