Tartalomjegyzék
Távoli gépek
- Szerző: Sallai András
- Copyright © Sallai András, 2019, 2020
- 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.
- deploy.php
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:
<?php namespace Deployer; require 'recipe/common.php'; host('192.168.10.11') ->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.
... 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');