netgescon-day0/docs/DEPLOY_DOCKER_MULTISITE.md

126 lines
2.6 KiB
Markdown

# 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 volumi Docker distinti per `prod` e `demo`.
## 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.
2. 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
```
## Persistenza dati
Volumi separati:
- Produzione:
- `prod_db`
- `prod_storage`
- `prod_cache`
- `prod_public`
- `prod_redis`
- Demo:
- `demo_db`
- `demo_storage`
- `demo_cache`
- `demo_public`
- `demo_redis`
- Certificati TLS:
- `netgescon_letsencrypt`
## Backup consigliato
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
```
## 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.