Documenta deploy Mailjet e hardening Apache

This commit is contained in:
2026-09-04 16:36:58 +02:00
parent cc70144183
commit 16bfcb8b47
2 changed files with 293 additions and 47 deletions

250
README.md
View File

@@ -1,66 +1,222 @@
# 🏥 Clinica Veterinaria Formiginese - Deploy Package
# Clinica Veterinaria Formiginese
Questo pacchetto contiene il codice sorgente completo, le immagini e le istruzioni per deployare il sito della Clinica Veterinaria Formiginese su un server privato con Node.js.
Repository operativo del sito della Clinica Veterinaria Formiginese, con frontend React/Vite e backend FastAPI per la gestione delle richieste di prenotazione.
## 📋 Contenuti del Pacchetto
## Struttura
- **clinica-app/** - Progetto React completo con sorgenti
- **assets/** - Tutte le 7 immagini (animali + clinica)
- **SETUP_ISTRUZIONI.md** - Guida dettagliata di installazione
- **README.md** - Questo file
- `clinica-app/` - frontend React + Vite e build pubblica del sito
- `backend/` - backend FastAPI, schema prenotazione e servizio email
- `assets/` - materiali grafici di supporto
- `deploy_to_local_server.bat` - aggiorna la copia locale di deploy partendo da Gitea
- `SETUP_ISTRUZIONI.md` - note di installazione storiche
## 🚀 Quick Start
## Stack
```bash
# 1. Estrai il pacchetto
unzip clinica-veterinaria-deploy.zip
cd clinica-deploy
- Frontend: React 19, TypeScript, Tailwind CSS, Vite
- Backend: FastAPI, Uvicorn
- Web server online: Apache
- Certificati: Let's Encrypt / Certbot
# 2. Copia le immagini
cp -r assets/* clinica-app/client/public/images/
mkdir -p clinica-app/client/public/images
## Ambiente locale
# 3. Installa e avvia
cd clinica-app
npm install
npm run build
npm start
### Repository di lavoro
Percorso:
```txt
C:\devel\clinica_veterinaria_formiginese
```
Il sito sarà disponibile a `http://localhost:3000`
Per sviluppo rapido:
## 📖 Documentazione Completa
```bash
cd C:\devel\clinica_veterinaria_formiginese\clinica-app
pnpm install
pnpm dev
```
Leggi il file **SETUP_ISTRUZIONI.md** per:
- Requisiti di sistema
- Installazione passo-passo
- Configurazione avanzata (Nginx, PM2, ecc.)
- Personalizzazione (colori, testi, immagini)
- Troubleshooting
Nota: la porta di sviluppo Vite e stata spostata a `3001`, per evitare conflitti con Gitea in locale.
## 🎯 Caratteristiche
### Repository di deploy locale
✅ Homepage completa con carousel hero (7 immagini)
✅ Sezioni: Chi Siamo, Servizi, Team, Blog, Prenotazioni, Registrazione
✅ Design "Clinical Warmth" con blu petrolio e verde acqua
✅ Responsive design (mobile, tablet, desktop)
✅ Animazioni fluide e transizioni eleganti
✅ Performance ottimizzate
Percorso:
## 🛠️ Stack Tecnologico
```txt
C:\deploy\clinica_veterinaria_formiginese
```
- **Frontend**: React 19 + TypeScript + Tailwind CSS 4
- **Backend**: Node.js + Express
- **Build Tool**: Vite
- **UI Components**: shadcn/ui
- **Animazioni**: Framer Motion
Il sito locale servito da Caddy legge questa copia, non quella in `C:\devel\...`.
## 📞 Supporto
Per aggiornare il deploy locale:
Per problemi durante l'installazione, consulta la sezione "Troubleshooting" in SETUP_ISTRUZIONI.md
```bat
deploy_to_local_server.bat
```
---
Attenzione: lo script riallinea la copia locale di deploy a cio che e stato pushato su Gitea.
**Versione**: 1.0.0
**Data**: 31 Marzo 2026
**Licenza**: Privato
## Build frontend
Da eseguire dentro `clinica-app/`:
```bash
pnpm build
```
## Prenotazioni
La form di prenotazione usa anche il campo `doctor` (medico richiesto).
L'invio email passa da Mailjet API, con `Reply-To` valorizzato con l'indirizzo inserito da chi compila il modulo.
Il backend mantiene protezioni anti-abuso: flag di attivazione, CAPTCHA, honeypot, rate limit e audit log JSONL.
Quando si pubblicano modifiche che toccano la form, vanno aggiornati insieme:
- frontend React
- backend FastAPI
In particolare:
- `backend/app/schemas/booking.py`
- `backend/app/services/mailer.py`
## Deploy online
Server attuale:
```txt
ubuntu@129.152.31.221
```
Percorso progetto:
```txt
/var/www/clinicaveterinariaformiginese.it
```
### Aggiornamento codice
La cartella online non contiene una working copy Git. Le modifiche vanno quindi
pubblicate copiando i file via WinSCP/SFTP dopo commit e push su Gitea.
### Build frontend
```bash
cd /var/www/clinicaveterinariaformiginese.it/clinica-app
pnpm build
```
### Riavvio servizi
```bash
sudo systemctl restart clinicaveterinaria-backend.service
sudo systemctl reload apache2
```
### Verifiche utili
```bash
systemctl status clinicaveterinaria-backend.service --no-pager
journalctl -u clinicaveterinaria-backend.service -n 50 --no-pager
curl -I https://www.clinicaveterinariaformiginese.it/
```
## Nota importante su Vite
Nel build di produzione il runtime Manus deve restare disattivato. La configurazione e gia stata corretta in:
```txt
clinica-app/vite.config.ts
```
I plugin Manus sono attivi solo in sviluppo, non nel build di produzione.
## Redirect domini veterinarioformigine
Sono stati configurati 5 domini accessori per reindirizzare sempre verso:
```txt
https://www.centrofaunaselvatica.it/
```
Domini gestiti:
- `veterinarioformigine.it`
- `veterinarioformigine.com`
- `veterinarioformigine.eu`
- `veterinarioformigine.info`
- `veterinarioformigine.cloud`
Per ciascuno sono attivi anche i rispettivi host `www`.
### Comportamento atteso
Tutti questi URL devono restituire:
```txt
301 Moved Permanently
Location: https://www.centrofaunaselvatica.it/
```
### Configurazione Apache
I virtual host HTTP sono stati creati in:
```txt
/etc/apache2/sites-available/veterinarioformigine.*.conf
```
I virtual host HTTPS creati da Certbot sono in:
```txt
/etc/apache2/sites-available/veterinarioformigine.*-le-ssl.conf
```
### Certificato
Certificato emesso con:
```bash
sudo certbot --apache \
-d veterinarioformigine.it -d www.veterinarioformigine.it \
-d veterinarioformigine.com -d www.veterinarioformigine.com \
-d veterinarioformigine.eu -d www.veterinarioformigine.eu \
-d veterinarioformigine.info -d www.veterinarioformigine.info \
-d veterinarioformigine.cloud -d www.veterinarioformigine.cloud
```
Scadenza attuale del certificato:
```txt
2026-08-25
```
### Verifica redirect domini accessori
```bash
curl -I https://veterinarioformigine.it
curl -I https://www.veterinarioformigine.it
curl -I https://veterinarioformigine.com
curl -I https://www.veterinarioformigine.com
curl -I https://veterinarioformigine.eu
curl -I https://www.veterinarioformigine.eu
curl -I https://veterinarioformigine.info
curl -I https://www.veterinarioformigine.info
curl -I https://veterinarioformigine.cloud
curl -I https://www.veterinarioformigine.cloud
```
## Git
Branch operativo corrente:
```txt
backend_init
```
Flusso consigliato:
1. Modifiche in `C:\devel\clinica_veterinaria_formiginese`
2. Test con `pnpm dev`
3. Commit e push su Gitea
4. Deploy locale con `deploy_to_local_server.bat`
5. Deploy online su Linux quando approvato

View File

@@ -0,0 +1,90 @@
# Blocco directory listing su accesso via IP
Problema verificato:
```bash
curl -k https://129.152.31.221/
```
Risposta non desiderata:
```txt
200 OK
Index of /
```
L'accesso diretto all'IP non deve mostrare `/var/www` o l'elenco dei file.
## Correzione rapida
Sul server Linux:
```bash
sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bak.$(date +%Y%m%d-%H%M%S)
sudo sed -i 's/Options Indexes FollowSymLinks/Options -Indexes +FollowSymLinks/g' /etc/apache2/apache2.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
```
Verifica:
```bash
curl -k -I https://129.152.31.221/
```
Il risultato atteso non deve essere `200 OK` con directory listing. Un `403 Forbidden`
e accettabile per l'accesso diretto via IP.
## Correzione consigliata
Creare un virtual host di default che blocchi ogni richiesta non associata ai domini
configurati.
File:
```txt
/etc/apache2/sites-available/000-ip-block.conf
```
Contenuto HTTP:
```apache
<VirtualHost *:80>
ServerName 129.152.31.221
Redirect 301 / https://www.clinicaveterinariaformiginese.it/
</VirtualHost>
```
Per HTTPS, se sul server e gia attivo un certificato valido per il dominio principale,
si puo creare un virtual host catch-all usando gli stessi certificati e restituire 403:
```apache
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerName 129.152.31.221
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/www.clinicaveterinariaformiginese.it/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.clinicaveterinariaformiginese.it/privkey.pem
<Location />
Require all denied
</Location>
</VirtualHost>
</IfModule>
```
Attivazione:
```bash
sudo a2ensite 000-ip-block.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
```
Verifiche:
```bash
curl -k -I https://129.152.31.221/
curl -I https://www.clinicaveterinariaformiginese.it/
```