Ristruttura il deploy: immagine autosufficiente per Dokploy
Il Dockerfile compilava l'applicazione in /app-src mentre il runtime girava da /var/www/html, popolato solo dal bind mount del sorgente: l'immagine costruita non veniva mai usata. L'entrypoint rieseguiva composer install e npm run build a ogni avvio, dentro il container. Su Dokploy, senza sorgente sull'host, questo significava build a runtime a ogni deploy. Ora vendor/ e public/build sono compilati in stage separati e copiati nell'immagine finale. I container di produzione non montano il sorgente e non eseguono build all'avvio: un redeploy e' build, migrazioni, online. - Dockerfile multi-stage (composer, node, runtime) - nginx e php-fpm nello stesso container via supervisor: con container separati nginx avrebbe bisogno di una copia di public/ e del volume storage solo per servire file statici - clear_env = no in www.conf, senza cui php-fpm nasconde a Laravel tutte le variabili d'ambiente - configurazione da ambiente di processo invece di .env riscritto con sed; il compose fissa solo i valori dettati dalla topologia - fail-fast su APP_URL, DB_PASSWORD, DB_ROOT_PASSWORD, REDIS_PASSWORD - servizio scheduler dedicato: schedule:work non veniva mai eseguito, quindi la pulizia dell'audit log non e' mai partita - solo il container app esegue le migrazioni, per evitare che due container in gara lascino uno schema applicato a meta' - healthcheck separati per worker e scheduler, che non espongono HTTP - docker-compose.dev.yml per lo sviluppo locale - documentazione unificata in README.md e HANDOFF.md Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,22 +1,46 @@
|
||||
# Keep the build context small and, more importantly, keep host state out of
|
||||
# the image. vendor/ and public/build are produced by dedicated build stages —
|
||||
# copying a host-built copy in would shadow them with whatever happened to be
|
||||
# on the developer's machine.
|
||||
|
||||
.git
|
||||
.gitignore
|
||||
.github
|
||||
|
||||
# Never bake secrets into an image layer.
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
|
||||
vendor
|
||||
node_modules
|
||||
|
||||
storage/logs/*
|
||||
storage/framework/cache/*
|
||||
storage/framework/sessions/*
|
||||
storage/framework/views/*
|
||||
storage/app/public/territori-pdf/*
|
||||
storage/app/public/territori-thumbnails/*
|
||||
storage/app/livewire-tmp/*
|
||||
storage/app/.app_key
|
||||
storage/app/.db_seeded
|
||||
bootstrap/cache/*
|
||||
|
||||
public/build
|
||||
public/storage
|
||||
public/hot
|
||||
|
||||
db_data
|
||||
redis_data
|
||||
|
||||
docker-compose.yml
|
||||
docker-compose.dev.yml
|
||||
docker-compose.override.yml
|
||||
README.md
|
||||
TerManager2_v2.md
|
||||
.idea
|
||||
.vscode
|
||||
|
||||
*.md
|
||||
*.sql
|
||||
*.swp
|
||||
*.swo
|
||||
.idea
|
||||
.vscode
|
||||
.phpunit.result.cache
|
||||
|
||||
Reference in New Issue
Block a user