# NetGescon - Docker multisito (www + app + demo) Questa procedura avvia: - `www.netgescon.it`: sito presentazione (statico) - `app.netgescon.it`: ambiente produzione NetGescon - `demo.netgescon.it`: ambiente demo NetGescon separato Con persistenza dati su directory host distinte per `prod` e `demo`. ## Macchina corretta da usare Per l'operativita reale attuale valgono queste regole: - produzione Docker multisito solo su `192.168.0.157` (`svr-netgescon`) - questa macchina locale `.200` resta ambiente di sviluppo su `:8000` e staging su `:80/:443` - non va ricreata qui la stack `www/app/demo` di produzione Verifica confermata il `2026-05-18` sul nodo `192.168.0.157`: - `http://195.110.133.78` con host `www/app/demo` risponde con redirect `307` verso HTTPS - `https://195.110.133.78` con SNI/host `www.netgescon.it`, `app.netgescon.it`, `demo.netgescon.it` risponde `200` - perche questo accada, il reverse proxy host-level non deve occupare `80/443`; le porte devono essere pubblicate da Traefik via Docker ## File principali - `docker/docker-compose.multisite.yml` - `docker/.env.multisite.example` - `docker/nginx/prod.conf` - `docker/nginx/demo.conf` - `docker/www/index.html` ## Prerequisiti server - DNS già puntati al server per: - `www.netgescon.it` - `app.netgescon.it` - `demo.netgescon.it` - Porte aperte: `80`, `443` - Docker + Docker Compose plugin installati ## Scelta architettura consigliata Per il tuo caso è consigliata una **VM ad hoc Ubuntu** dedicata a NetGescon. Motivi: - isolamento da altri container già presenti - minor rischio di conflitti porte/reti/volumi - rollback più semplice - passaggio da test a produzione più controllabile ## Provisioning VM Ubuntu (rapido) Sulla VM nuova: ```bash cd /path/del/repo/netgescon-laravel ./scripts/provision-vm-multisite.sh ``` Poi esci/rientra nella sessione shell (gruppo docker). ## Primo avvio 1. Copia il file ambiente: ```bash cd /home/michele/netgescon/netgescon-laravel cp docker/.env.multisite.example docker/.env.multisite ``` 1. Modifica `docker/.env.multisite` con password reali. Nota pratica: - se `APP_KEY` manca, `scripts/deploy-multisite.sh` la genera automaticamente e la salva in `docker/.env.multisite` - dopo `up -d` i login `app/demo` possono restituire `502` per pochi secondi durante il warm-up iniziale di PHP-FPM; la verifica va rifatta a stack assestata 1. Avvia stack: ```bash ./scripts/deploy-multisite.sh ``` 1. Verifica servizi: ```bash docker compose --env-file docker/.env.multisite -f docker/docker-compose.multisite.yml ps ``` ## Aggiornamento applicazione Quando aggiorni il codice: ```bash cd /home/michele/netgescon/netgescon-laravel ./scripts/update-multisite.sh ``` Per aggiornare da un branch specifico: ```bash GIT_REF=main ./scripts/update-multisite.sh ``` Verifica operativa minima dopo update: ```bash curl -kI --resolve app.netgescon.it:443:127.0.0.1 https://app.netgescon.it/admin-filament/login curl -kI --resolve demo.netgescon.it:443:127.0.0.1 https://demo.netgescon.it/admin-filament/login ``` Se il nodo `.157` non riesce a fare `git fetch` da Gitea, il checkout corretto lato host resta `~/netgescon/netgescon-day0-git`; i container `prod_app` e `demo_app` non sono repository Git e non possono aggiornarsi da soli con sync interno a `/var/www`. ## Persistenza dati Le directory host predefinite sono: - Produzione: - `/srv/netgescon/prod/mysql` - `/srv/netgescon/prod/storage` - `/srv/netgescon/prod/bootstrap-cache` - `/srv/netgescon/prod/public` - `/srv/netgescon/prod/redis` - Demo: - `/srv/netgescon/demo/mysql` - `/srv/netgescon/demo/storage` - `/srv/netgescon/demo/bootstrap-cache` - `/srv/netgescon/demo/public` - `/srv/netgescon/demo/redis` - Certificati TLS: - `/srv/netgescon/traefik/letsencrypt` La preparazione automatica delle directory viene eseguita da: ```bash ./scripts/ops/netgescon-prepare-multisite-host-paths.sh --report ``` I path possono essere cambiati in `docker/.env.multisite` senza modificare il compose. ## Backup consigliato Backup locale completo di DB e filesystem persistente: ```bash ./docker/backup-multisite.sh ``` Backup DB produzione: ```bash docker exec netgescon_prod_db mysqldump -u root -p"$PROD_DB_ROOT_PASSWORD" "$PROD_DB_DATABASE" > backup-prod.sql ``` Backup DB demo: ```bash docker exec netgescon_demo_db mysqldump -u root -p"$DEMO_DB_ROOT_PASSWORD" "$DEMO_DB_DATABASE" > backup-demo.sql ``` Backup incrementale documenti su Google Drive dal filesystem host: ```bash ./scripts/ops/netgescon-data-backup-incremental-gdrive.sh --env-file docker/.env.multisite ``` Sincronizzazione del mirror documentale sulla `.53` dopo push su Gitea: ```bash ./scripts/ai/sync_docs_to_53.sh --env-file docker/.env.multisite ``` ## Note operative - `demo` è separata da `prod` (DB, storage, redis diversi). - `www` è statico e non impatta le app Laravel. - Se vuoi usare una seconda VM per test/staging, riusa questi file cambiando solo domini e file env.