< Deployer

Távoli gépek

Szerző: Sallai András

Copyright © Sallai András, 2019, 2020

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:

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