Documenta deploy Mailjet e hardening Apache
This commit is contained in:
250
README.md
250
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
|
- `clinica-app/` - frontend React + Vite e build pubblica del sito
|
||||||
- **assets/** - Tutte le 7 immagini (animali + clinica)
|
- `backend/` - backend FastAPI, schema prenotazione e servizio email
|
||||||
- **SETUP_ISTRUZIONI.md** - Guida dettagliata di installazione
|
- `assets/` - materiali grafici di supporto
|
||||||
- **README.md** - Questo file
|
- `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
|
- Frontend: React 19, TypeScript, Tailwind CSS, Vite
|
||||||
# 1. Estrai il pacchetto
|
- Backend: FastAPI, Uvicorn
|
||||||
unzip clinica-veterinaria-deploy.zip
|
- Web server online: Apache
|
||||||
cd clinica-deploy
|
- Certificati: Let's Encrypt / Certbot
|
||||||
|
|
||||||
# 2. Copia le immagini
|
## Ambiente locale
|
||||||
cp -r assets/* clinica-app/client/public/images/
|
|
||||||
mkdir -p clinica-app/client/public/images
|
|
||||||
|
|
||||||
# 3. Installa e avvia
|
### Repository di lavoro
|
||||||
cd clinica-app
|
|
||||||
npm install
|
Percorso:
|
||||||
npm run build
|
|
||||||
npm start
|
```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:
|
Nota: la porta di sviluppo Vite e stata spostata a `3001`, per evitare conflitti con Gitea in locale.
|
||||||
- Requisiti di sistema
|
|
||||||
- Installazione passo-passo
|
|
||||||
- Configurazione avanzata (Nginx, PM2, ecc.)
|
|
||||||
- Personalizzazione (colori, testi, immagini)
|
|
||||||
- Troubleshooting
|
|
||||||
|
|
||||||
## 🎯 Caratteristiche
|
### Repository di deploy locale
|
||||||
|
|
||||||
✅ Homepage completa con carousel hero (7 immagini)
|
Percorso:
|
||||||
✅ 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
|
|
||||||
|
|
||||||
## 🛠️ Stack Tecnologico
|
```txt
|
||||||
|
C:\deploy\clinica_veterinaria_formiginese
|
||||||
|
```
|
||||||
|
|
||||||
- **Frontend**: React 19 + TypeScript + Tailwind CSS 4
|
Il sito locale servito da Caddy legge questa copia, non quella in `C:\devel\...`.
|
||||||
- **Backend**: Node.js + Express
|
|
||||||
- **Build Tool**: Vite
|
|
||||||
- **UI Components**: shadcn/ui
|
|
||||||
- **Animazioni**: Framer Motion
|
|
||||||
|
|
||||||
## 📞 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
|
## Build frontend
|
||||||
**Data**: 31 Marzo 2026
|
|
||||||
**Licenza**: Privato
|
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
|
||||||
|
|||||||
90
docs/apache-ip-lockdown.md
Normal file
90
docs/apache-ip-lockdown.md
Normal 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/
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user