From 16bfcb8b474ca5a914dcc46044d6e1a0efab6933 Mon Sep 17 00:00:00 2001 From: allebonvi Date: Fri, 4 Sep 2026 16:36:58 +0200 Subject: [PATCH] Documenta deploy Mailjet e hardening Apache --- README.md | 250 ++++++++++++++++++++++++++++++------- docs/apache-ip-lockdown.md | 90 +++++++++++++ 2 files changed, 293 insertions(+), 47 deletions(-) create mode 100644 docs/apache-ip-lockdown.md diff --git a/README.md b/README.md index c5678bc..46022ab 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/docs/apache-ip-lockdown.md b/docs/apache-ip-lockdown.md new file mode 100644 index 0000000..bc0b648 --- /dev/null +++ b/docs/apache-ip-lockdown.md @@ -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 + + ServerName 129.152.31.221 + Redirect 301 / https://www.clinicaveterinariaformiginese.it/ + +``` + +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 + + + 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 + + + Require all denied + + + +``` + +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/ +```