netgescon-day0/docs/DEPLOY_DOCKER_MULTISITE.md

4.9 KiB
Executable File

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:

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:
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:
./scripts/deploy-multisite.sh
  1. Verifica servizi:
docker compose --env-file docker/.env.multisite -f docker/docker-compose.multisite.yml ps

Aggiornamento applicazione

Quando aggiorni il codice:

cd /home/michele/netgescon/netgescon-laravel
./scripts/update-multisite.sh

Per aggiornare da un branch specifico:

GIT_REF=main ./scripts/update-multisite.sh

Verifica operativa minima dopo update:

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:

./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:

./docker/backup-multisite.sh

Backup DB produzione:

docker exec netgescon_prod_db mysqldump -u root -p"$PROD_DB_ROOT_PASSWORD" "$PROD_DB_DATABASE" > backup-prod.sql

Backup DB demo:

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:

./scripts/ops/netgescon-data-backup-incremental-gdrive.sh --env-file docker/.env.multisite

Sincronizzazione del mirror documentale sulla .53 dopo push su Gitea:

./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.