[[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');