d2d.emegrendeles.hu/config/deployment.php
E98Developer 2965f231ce ADD Deployment csomagoló queue worker és scheduler újraindítás a teendők közé
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>
2026-08-17 06:41:19 +02:00

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.',
],
],
];