[[oktatas:web:deploy:deployer|< Deployer]] ====== Távoli gépek ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2019, 2020 * [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: http://szit.hu ===== Feladatok távoli gépen ===== A deployer használata távoli gépek esetén a legelőnyösebb. A távoli host gépen -- a példa kedvéért -- vegyünk fel egy **karol** nevű felhasználót: adduser --home /srv/www/karol.net --shell /bin/bash karol Ha a feladatokat távoli gépen szeretnénk futtatni, akkor szükségünk van egy host bejegyzésre. namespace Deployer; require 'recipe/common.php'; task('teszt', function() { writeln('Helló Világ'); }); task('pwd', function() { $res = run('pwd'); writeln("Az aktuális könyvtár: $res"); }); host('192.168.5.103') ->user('karol') ->set('deploy_path', '/srv/www/karol.net/'); Futtatás: dep pwd ➤ Executing task pwd karol@192.168.5.103's password: Aktuális könyvtár: /srv/www/karol.net ✔ Ok ===== Automatikus kapcsolódás ===== Az automatikus kapcsolódáshoz a fejlesztői gépen létre kell hozni egy kulcspárt (titkos és nyilvános), majd a nyilvános kulcsot fel kell másolni a távoli gépre. A példánkban a távoli gép ''192.16810.11'', a felhasználó pedig janos. $ ssh-keygen $ ssh-copy-id janos@192.168.10.11 ===== Könyvtárak létrehozása ===== Minimális deploy: user('janos') ->set('deploy_path', '/var/www/html/htdocs'); task('deploy', [ 'deploy:prepare', 'success' ]); * deploy:prepare * Ha a deploy_path útvonal nem létezik, a prepare létrehozza. * Ellenőrzi a következőket is: * releases -- ebben a könyvtárban tárolódik a release * shared -- minden release számára közös fájlok * .dep -- Deployer metaadatok * success * A siker kiírása ===== Információk ===== ... task('deploy', [ 'deploy:info', 'deploy:prepare', 'success' ]); Futtatás: dep deploy Eredmény: ✈︎ Deploying HEAD on 192.168.10.11 ✔ Executing task deploy:prepare Successfully deployed! ===== Komplett deploy ===== Gépek: * Adott a fejlesztői gép, ahol futtatjuk a dep utasítást. * Webhosting gép, ahova a terméket telepítjük. * Git tároló, ahonnan telepítjük a terméket. {{:oktatas:web:deploy:deployer:deployer.png|}} ... task('deploy', [ 'deploy:info', 'deploy:prepare', 'deploy:lock', 'deploy:release', 'deploy:update_code', 'deploy:shared', 'deploy:writable', 'deploy:vendors', 'deploy:clear_paths', 'deploy:symlink', 'deploy:unlock', 'cleanup', 'success' ]); * deploy:prepare -- könyvtárszerkezet biztosítása * deploy:lock -- másik deploy folyamat nem futhat * deploy:release -- új release könyvtár készítése * deploy:update-code -- a git tárolóból letöltjük a kódot * deploy:shared -- a közös fájlok feltöltése * deploy:writable -- fájl jogok beállítása (chown, chgrop, chmod, acl) * deploy:vendors -- composer függőségek telepítése * deploy:clear-path * deploy:symlink -- a current telepítés cseréje az aktuális release-re * deploy:unlock -- a lock törlése * cleanup -- a régi nem kívánatos kiadások (release) törlése * success -- üzenet a sikerről Futtatás: dep deploy ===== Deploy részletei ===== === deploy:prepare === A telepítés előkészítése. Ellenőrzi a deploy_path útvonalat. Ha nem létezik létrehozza. A következő könyvtárakat is ellenőrzi. * releases -- a kiadás ebben a könyvtárban tárolódik * shared -- a kiadások közös állományai * .dep -- metaadatok Deployer számára === deploy:lock === A zárolás nem engedi egy másik telepítés futtatását. A zárolás a ** .dep/deploy.lock ** fájl létrehozásával történik. Ha a telepítést a Ctrl+C billentyűkombinációval szakítottuk meg, akkor töröljük a fájlt **dep deploy:unlock** futtatásával. Ha a telepítés sikertelenül áll le, akkor a **deploy:unlock** automatikusan megtörténik. === deploy:release === Új release könyvtár készítése, a **release_name** config paraméter alapján. Olvassa a ** .dep/releases**-t is, hogy megkapja az előző kiadások listáját. Ha a **deploy_path** útvonal van egy korábbi kiadási hivatkozás, akkor az törlődik. === deploy:update_code === Az új verzió letöltése a git használatával. Ha a git 2.0 változatát használod és be van állítva a git_cache változó, ez a feladat a korábbi kiadás állományait használja, csak a megváltozott fájlok kerülnek letöltésre. Saját átviteli stratégiához írja át a deploy.php feladatot: task('deploy:update_code', function () { upload('.', '{{release_path}}'); }); === deploy:shared === Osztott fájlok és könyvtárak elkészítése a shared könyvtárból, a **release_path**-ban megadott helyre. Magad is létrehozhatsz **shared_dirs** és **shared_files** config paramétereket. A folyamat lépései a következők: * a release_path-ból a shared könyvtár másolása ha az nem létezik * könyvtár törlése a release_path-ból * szimbolikus link létrehozása a shared könyvtárból a release_path-ba. Ugyanezek a lépések következnek az osztott fájlokkal. Ha a rendszer támogatja a relatív szimbolikus hivatkozásokat, akkor azokat használja, egyébként abszolút hivatkozást. === deploy:writable === Alapértelmezetten a writable_dirs-ben felsorolt könyvtárakat írhatóvá tesszük acl segítségével, a setfacl segítségével. Ez a művelet megpróbálja kitalálni a http_user nevét, vagy magunk is beállíthatjuk: set('http_user', 'www-data'); Beállítás csak adott gépre: host(...) ->set('http_user', 'www-data'); Ez a művelet a következő írhatósági módokat támogatja: * chown * chgrp * chmod * acl Egy mód beállítása: set('writable_mode', 'chmod'); Sudo használata esetén: set('writable_use_sudo', true); === deploy:vendors === A composer függőségek telepítése. A composer kapcsolóit konfigurálható **composer_options** paraméterrel. === deploy:clear_paths === A **clear_paths**-ban megadott könyvtárak törlése. Ez a művelet a sudo használatával futtatható, a clear_use_sudo paraméterrel. === deploy:symlink === A **current** szimbolikus link átirányítása a **release_path**-ra. Ha a távoli gép támogatja az atomi szimbolikus link váltást, akkor azt fogja használni. === deploy:unlock === Törli a .dep/deploy.lock állományt. Magad is futtathatod törölheted a fájlt a következő paranccsal: dep deploy:unlock staging === cleanup === A régi kiadások törlése a **keep_releases** kapcsolóval. A -1 korlátlan kiadásnak tekintendő. Hány kiadás legyen megőrizve: set('keep_releases', 10); === success === Üzenet a sikerről. ===== Git tároló beállítása ===== set('repository', 'git@192.168.5.104:username/repository.git'); A távoli git szerverre is töltsük fel nyilvános kulcsunkat. Például: $ ssh-copy-id -i ~/.ssh/id_rsa.pub janos@192.168.5.103 ===== Előző munkamenet visszaállítása ===== Ha hiba van a telepítési folyamatban, vagy probléma van a kiadással, csak futtassuk a következő parancsot: dep rollback ===== Újraindítás ===== A deploy után újraindítjuk a php7.0-fpm-t. task('reload:php-fpm', function () { run('sudo /bin/systemctl reload php7.0-fpm'); }); after('deploy', 'reload:php-fpm');