180 lines
4.9 KiB
Markdown
Executable File
180 lines
4.9 KiB
Markdown
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:
|
|
|
|
```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.
|