netgescon-day0/docker/README_VM_SETUP.md

182 lines
3.6 KiB
Markdown

# 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`
- `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`:
```bash
cd /percorso/netgescon-laravel/docker
chmod +x provision-vm.sh install-dev-tools.sh deploy-multisite.sh update-multisite.sh backup-multisite.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:
```bash
cd /percorso/netgescon-laravel/docker
./install-dev-tools.sh
```
Installa:
- VS Code
- XRDP (desktop remoto)
- ambiente desktop leggero (XFCE)
## 3) Configurazione ambiente
```bash
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
```bash
cd /percorso/netgescon-laravel/docker
./deploy-multisite.sh
```
## 5) Aggiornamenti online (procedura standard)
```bash
cd /percorso/netgescon-laravel/docker
./update-multisite.sh
```
La procedura fa:
1. backup DB prod + demo
2. aggiorna codice in base alla modalità scelta
3. rebuild immagine app condivisa prod/demo
4. restart container applicativi
5. clean cache Laravel
### 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
```bash
cd /percorso/netgescon-laravel/docker
./backup-multisite.sh
```
Dump in:
- `storage/backups/prod_*.sql`
- `storage/backups/demo_*.sql`
## 7) Comandi utili
Stato container:
```bash
docker compose --env-file docker/.env.multisite -f docker/docker-compose.multisite.yml ps
```
Log in tempo reale:
```bash
docker compose --env-file docker/.env.multisite -f docker/docker-compose.multisite.yml logs -f --tail=200
```
Riavvio stack:
```bash
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:
```bash
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:
```bash
which bash
which docker || true
docker compose version || true
docker-compose --version || true
```
Se Docker manca:
```bash
cd /percorso/netgescon-laravel/docker
./provision-vm.sh
```
Se Docker c'è ma non hai permessi:
```bash
sudo usermod -aG docker $USER
newgrp docker
docker ps
```