A 2026-08-17-i eset általánosítása: a d2d/e2e Docker Swarmban ugyanazt a kódot több service futtatja közös volume-ról, és a queue:work hosszan futó folyamat a betöltött osztályokat a memóriájában tartja. A fájlmásolás után a worker RÉGI kóddal dolgozta fel a jobot - a felület jónak látszott, a háttérfeladat némán a régi viselkedést hozta. - config: 'runtime' minta (app/, config/, database/, routes/, bootstrap/, composer.lock), mert a restart nem csak a jobok változásakor kell; targetenként a service nevek és a Swarm manager elérése - a felületen figyelmeztetés, a teendőkben a konkrét ssh + docker service update parancs - a restart szándékosan a cache ürítés UTÁN: a frissen induló worker különben a régi, cache-elt konfigot töltené be - a d2d schedulernél jelezzük, hogy 0 replikán fut (a restart üresjárat lehet), a t2t-nél pedig azt, hogy queue service még nincs, de a névkonvenció alapján t2t_queue lesz Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
180 lines
6.3 KiB
PHP
180 lines
6.3 KiB
PHP
<?php
|
|
|
|
return [
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Fő kapcsoló (1. védelmi réteg)
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| A deployment csomagoló KIZÁRÓLAG fejlesztői gépen futhat. Mivel az
|
|
| alkalmazás kódja manuális fájlmásolással kerül a szerverekre, ez az
|
|
| oldal fizikailag ott lesz minden környezeten - ezért a bekapcsolás
|
|
| .env-ből történik, ami viszont nincs verziókövetve és nem másoljuk.
|
|
|
|
|
*/
|
|
|
|
'enabled' => env('DEPLOYMENT_PACKAGE_ENABLED', false),
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Stage whitelist (2. védelmi réteg)
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Szándékosan hardkódolt lista, nem env-ből jön: ez fogja meg azt az esetet,
|
|
| ha valaki a fenti kapcsolót tévedésből bemásolja egy szerver .env-jébe.
|
|
|
|
|
*/
|
|
|
|
'stages' => ['local'],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Jogosultság (3. réteg) és láthatóság (4. réteg)
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| A feature flag NEM biztonsági réteg - a védelmet a fenti kettő és a
|
|
| szerepkör adja. A flag a menü-láthatóságot vezérli, illetve deploy nélküli
|
|
| kikapcsolást és név szerinti átadást tesz lehetővé (feature_flag_overrides).
|
|
|
|
|
*/
|
|
|
|
'role' => 'developer',
|
|
|
|
'feature_flag' => 'DeploymentPackage',
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Git
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
'repo_path' => base_path(),
|
|
|
|
'git_binary' => env('DEPLOYMENT_GIT_BINARY', 'git'),
|
|
|
|
'timeout' => 60,
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Csomagolás
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
'output_path' => env('DEPLOYMENT_OUTPUT_PATH', storage_path('app/private/deployments')),
|
|
|
|
'max_files' => 500,
|
|
|
|
'commit_limits' => [50, 100, 200],
|
|
|
|
/*
|
|
| Ezek soha nem kerülnek csomagba, akkor sem, ha a diffben szerepelnének.
|
|
| A minták Str::is() szintaxisúak, a repo gyökeréhez képest relatív úton.
|
|
*/
|
|
'exclude' => [
|
|
'.env',
|
|
'.env.*',
|
|
'auth.json',
|
|
'.git*',
|
|
'storage/*',
|
|
'vendor/*',
|
|
'node_modules/*',
|
|
],
|
|
|
|
/*
|
|
| Fájlok, amik csomagolhatók, de külön figyelmeztetést érdemelnek, mert
|
|
| önmagukban nem elegendők (kell melléjük egy parancs a célgépen).
|
|
*/
|
|
'attention' => [
|
|
'migration' => ['database/migrations/*'],
|
|
'seeder' => ['database/seeders/*'],
|
|
'composer' => ['composer.json', 'composer.lock'],
|
|
'asset' => [
|
|
'resources/js/*',
|
|
'resources/css/*',
|
|
'resources/modern/*',
|
|
'vite.config.js',
|
|
'webpack.mix.js',
|
|
'package.json',
|
|
'package-lock.json',
|
|
],
|
|
|
|
/*
|
|
| A queue worker és a scheduler hosszan futó PHP folyamat: a már betöltött
|
|
| osztályokat a memóriájában tartja, ezért a fájlok felmásolása után is a RÉGI
|
|
| kóddal dolgozik, amíg újra nem indul. Ez némán rossz viselkedést okoz (2026-08-17,
|
|
| árlista végrehajtás: a job "elkészült" státuszt adott anélkül, hogy bármit írt volna),
|
|
| ezért minden háttérben is futó kód változása restartot igényel - nem csak a jobok.
|
|
*/
|
|
'runtime' => [
|
|
'app/*',
|
|
'config/*',
|
|
'database/*',
|
|
'routes/*',
|
|
'bootstrap/*',
|
|
'composer.lock',
|
|
],
|
|
|
|
/* Csak a figyelmeztetés szövegének pontosításához, a restart ettől függetlenül kell. */
|
|
'job' => ['app/Jobs/*'],
|
|
'console' => ['app/Console/*'],
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Docker Swarm
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| A restart parancsokat a Swarm leader node-on keresztül kell kiadni
|
|
| (ld. docs/cicd-context.md).
|
|
|
|
|
*/
|
|
|
|
'swarm' => [
|
|
'host' => env('DEPLOYMENT_SWARM_HOST', '46.29.140.234'),
|
|
'user' => env('DEPLOYMENT_SWARM_USER', 'root'),
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Célkörnyezetek
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Az expected_branch csak figyelmeztetést vezérel, nem tiltást.
|
|
| A remote_path a shared storage útvonala (ld. docs/cicd-context.md).
|
|
|
|
|
*/
|
|
|
|
/*
|
|
| A sorrend számít: az első az alapértelmezett célkörnyezet a felületen
|
|
| (DeploymentTargets::defaultKey()). A d2d azért van elöl, mert azt frissítjük
|
|
| sűrűbben, tehát a gyakoribb eset legyen az alapértelmezés.
|
|
*/
|
|
'targets' => [
|
|
'd2d' => [
|
|
'label' => 'd2d — fejlesztői',
|
|
'domain' => 'd2d.emegrendeles.hu',
|
|
'remote_path' => '/delirest/d2d.emegrendeles.hu/app/',
|
|
'expected_branch' => 'test',
|
|
// Ugyanabból az imageből, közös volume-ról több service is futtatja a kódot.
|
|
// A web konténer (d2d-environment_app) kérésenként újratölti, ezért az nem kell ide.
|
|
'services' => [
|
|
'queue' => 'd2d-environment_queue',
|
|
'scheduler' => 'd2d-environment_scheduler',
|
|
],
|
|
'services_note' => 'A d2d scheduler jelenleg 0 replikán fut — ha leskálázva marad, a restartja üresjárat.',
|
|
],
|
|
'e2e' => [
|
|
'label' => 'e2e — t2t éles',
|
|
'domain' => 'e2e.emegrendeles.hu',
|
|
'remote_path' => '/delirest/test.t2t.emegrendeles.hu/app/',
|
|
'expected_branch' => 'main',
|
|
'services' => [
|
|
'scheduler' => 't2t_scheduler',
|
|
],
|
|
'services_note' => 'A t2t-n még nincs queue worker service; ha létrejön, a névkonvenció alapján t2t_queue lesz, és azt is újra kell majd indítani.',
|
|
],
|
|
],
|
|
|
|
];
|