netgescon-day0/docker/README_VM_SETUP.md

5.6 KiB
Executable File

NetGescon Docker Pack - VM Ubuntu nuova

Questa cartella contiene tutto il necessario per preparare una nuova VM Ubuntu e avviare NetGescon con 3 domini:

  • www.netgescon.it (presentazione)
  • app.netgescon.it (produzione)
  • demo.netgescon.it (demo)

Contenuto pronto all'uso

  • docker-compose.multisite.yml
  • .env.multisite.example
  • nginx/prod.conf
  • nginx/demo.conf
  • www/index.html
  • provision-vm.sh
  • install-dev-tools.sh
  • deploy-multisite.sh
  • update-multisite.sh
  • daemon-update-runner.sh
  • backup-multisite.sh

0) Prerequisiti DNS/Router

Prima di tutto:

  1. Punta i record A dei domini verso IP pubblico della VM/linea:
    • www.netgescon.it
    • app.netgescon.it
    • demo.netgescon.it
  2. Apri/NAT verso la VM le porte:
    • 80/tcp
    • 443/tcp

1) Preparazione VM (una volta sola)

Da repo netgescon-laravel:

cd /percorso/netgescon-laravel/docker
chmod +x provision-vm.sh install-dev-tools.sh deploy-multisite.sh update-multisite.sh backup-multisite.sh
chmod +x daemon-update-runner.sh
./provision-vm.sh

Logout/Login (o reboot) dopo provision-vm.sh per applicare gruppo Docker.

2) Opzionale: strumenti desktop VM

Se vuoi usare la VM anche come postazione operativa:

cd /percorso/netgescon-laravel/docker
./install-dev-tools.sh

Installa:

  • VS Code
  • XRDP (desktop remoto)
  • ambiente desktop leggero (XFCE)

3) Configurazione ambiente

cd /percorso/netgescon-laravel
cp docker/.env.multisite.example docker/.env.multisite
nano docker/.env.multisite

Imposta almeno:

  • password DB prod/demo
  • email Let's Encrypt
  • domini reali

4) Primo deploy

cd /percorso/netgescon-laravel/docker
./deploy-multisite.sh

5) Aggiornamenti online (procedura standard)

cd /percorso/netgescon-laravel/docker
./update-multisite.sh

5b) Runner daemon per update da pannello

Quando NETGESCON_UPDATE_EXECUTOR=daemon, il pulsante del pannello non esegue direttamente il refresh dentro l app ma scrive una richiesta in coda. Il runner host la consuma ed esegue l update multisito:

./daemon-update-runner.sh

Uso previsto: agganciarlo a systemd, cron o a un supervisore host che lo lanci a intervalli brevi. In questo modo l applicazione non ha bisogno di controllo shell sul nodo remoto ma puo comunque orchestrare l update Docker.

Valori consigliati in docker/.env.multisite per mantenere controllo manuale degli update in questa fase:

PROD_UPDATE_EXECUTOR=local
DEMO_UPDATE_EXECUTOR=local
RUN_DB_BACKUP=false
PROD_PREUPDATE_BACKUP_ENABLED=false
DEMO_PREUPDATE_BACKUP_ENABLED=false

La procedura fa:

  1. backup DB prod + demo se RUN_DB_BACKUP=true
  2. attiva maintenance mode Laravel su APP e DEMO con pagina 503 prerenderizzata
  3. aggiorna codice in base alla modalità scelta
  4. rebuild immagine app condivisa prod/demo
  5. restart container applicativi
  6. clean cache Laravel
  7. riapre automaticamente i siti con php artisan up

Pagina 503 gestita dall'applicazione

La pagina di maintenance non dipende più dal webserver di sistema: viene prerenderizzata da Laravel con php artisan down --render=errors::503.

La vista è in resources/views/errors/503.blade.php e si personalizza per APP e DEMO dai valori del file docker/.env.multisite:

  • PROD_SITE_LABEL
  • DEMO_SITE_LABEL
  • PROD_MAINTENANCE_TITLE
  • PROD_MAINTENANCE_MESSAGE
  • PROD_MAINTENANCE_DETAIL
  • DEMO_MAINTENANCE_TITLE
  • DEMO_MAINTENANCE_MESSAGE
  • DEMO_MAINTENANCE_DETAIL
  • MAINTENANCE_SUPPORT_EMAIL
  • MAINTENANCE_SUPPORT_URL

In questo modo il blocco utenti durante l'aggiornamento resta sotto controllo del progetto distribuito, senza dipendere dalla pagina 503 del sistema remoto.

Modalità update (senza Git obbligatorio)

Nel file docker/.env.multisite imposta UPDATE_MODE:

  • local: usa il codice già presente sulla VM (default)
  • distro: scarica pacchetto privato autorizzato (DISTRO_UPDATE_URL + DISTRO_UPDATE_TOKEN)
  • github: scarica pacchetto release pubblico (GITHUB_RELEASE_URL)

6) Backup manuale rapido

cd /percorso/netgescon-laravel/docker
./backup-multisite.sh

Nota operativa: nella fase attuale l update multisito puo lasciare `RUN_DB_BACKUP=false` per privilegiare velocita e affidabilita del flusso di aggiornamento. La procedura backup resta disponibile ma non viene eseguita automaticamente finche non viene consolidata.

Dump in:

  • storage/backups/prod_*.sql
  • storage/backups/demo_*.sql

7) Comandi utili

Stato container:

docker compose --env-file docker/.env.multisite -f docker/docker-compose.multisite.yml ps

Log in tempo reale:

docker compose --env-file docker/.env.multisite -f docker/docker-compose.multisite.yml logs -f --tail=200

Riavvio stack:

docker compose --env-file docker/.env.multisite -f docker/docker-compose.multisite.yml up -d

8) Esecuzione locale (senza server online)

Per girare tutto in locale su porte dedicate:

cd /percorso/netgescon-laravel
cp docker/.env.multisite.example docker/.env.local
docker compose --env-file docker/.env.local -f docker/docker-compose.local.yml up -d --build

URL locali:

  • Produzione locale: http://localhost:8080
  • Demo locale: http://localhost:8081
  • Sito presentazione: http://localhost:8082

Troubleshooting rapido

Errore exit code 127

Significa quasi sempre "comando non trovato".

Controlla:

which bash
which docker || true
docker compose version || true
docker-compose --version || true

Se Docker manca:

cd /percorso/netgescon-laravel/docker
./provision-vm.sh

Se Docker c'è ma non hai permessi:

sudo usermod -aG docker $USER
newgrp docker
docker ps