Applicazione full-stack per questionari NIS2 con:
- backend Spring Boot (API + PDF)
- frontend React/Vite servito da Nginx
- PostgreSQL
- Backend: Java 21, Spring Boot 3.3.2, JPA/Hibernate, PostgreSQL
- Frontend: React 19, Vite 7, Tailwind
- Runtime: Docker Compose
backend/: API Spring Bootfrontend/: UI React/Vitebackend/migrations/: migrazioni SQL principalidocker-compose.yml: stack completo (postgres + backend + frontend)
- Docker + Docker Compose plugin
- (solo sviluppo locale senza Docker) Java 21 e Node/NPM
Esempio:
DB_HOST=postgres
DB_PORT=5432
DB_NAME=realnis
DB_USER=realnis
DB_PASSWORD=realnis
AUTH_ENABLED=falseNote:
- in Docker Compose le variabili DB sono già passate dal file compose al container backend
AUTH_ENABLED=falsedisabilita autenticazione (utile in sviluppo)
Esempio:
VITE_API_HOST=/api
VITE_API_PROXY_TARGET=http://localhost:8080Note:
- in produzione Docker, il frontend Nginx usa
/apicome proxy versobackend:8080 - in sviluppo Vite, il proxy
/apiusaVITE_API_PROXY_TARGET
- Build e avvio servizi:
docker compose up -d --build- Applica le migrazioni SQL (obbligatorio se DB non allineato):
for f in backend/migrations/*.sql; do
echo "Applying $f"
docker compose exec -T postgres psql -U realnis -d realnis < "$f"
done- Riavvia backend:
docker compose restart backend- Verifica stato:
docker compose ps
docker compose logs --tail=100 backendURL:
- Frontend:
http://localhost:5173 - Backend API:
http://localhost:8080 - Swagger:
http://localhost:8080/swagger-ui/index.html
Il backend usa:
spring.jpa.hibernate.ddl-auto=validate
quindi non crea/aggiorna lo schema automaticamente.
Se lo schema non è aggiornato, il backend va in crash e il frontend restituisce 502 Bad Gateway sulle chiamate /api/*.
Avvia solo Postgres:
docker compose up -d postgrescd backend
./mvnw spring-boot:runcd frontend
npm install
npm run devFrontend dev: http://localhost:5173
GET /api/pingPOST /api/registerPOST /api/loginPOST /api/password_reset/requestPOST /api/password_reset/confirmGET /api/get_questionsPOST /api/get_answersGET /api/get_valutazionePOST /api/valutazionePOST /api/valutazione/pdfGET /api/pre_questionario
Endpoint admin:
POST /api/admin/reload_questionsPOST /api/admin/reload_infosPOST /api/admin/reload_valutazione_config
- Aggiorna codice:
git pull- Ricrea immagini:
docker compose up -d --build- Applica migrazioni pendenti:
for f in backend/migrations/*.sql; do
docker compose exec -T postgres psql -U realnis -d realnis < "$f"
done- Riavvia backend:
docker compose restart backend- Verifica:
docker compose ps
docker compose logs --tail=200 backendCausa: compose punta a Dockerfile sbagliato.
Fix già applicata: docker-compose.yml usa backend/Dockerfile.
Causa tipica: backend non raggiungibile (crash).
Controlli:
docker compose ps -a
docker compose logs --tail=200 backend
docker compose logs --tail=200 frontendSe nei log backend vedi errori schema (es. colonna mancante), applica le migrazioni e riavvia backend.
Esegui:
for f in backend/migrations/*.sql; do
docker compose exec -T postgres psql -U realnis -d realnis < "$f"
done
docker compose restart backend- Avvio:
docker compose up -d --build - Stop:
docker compose down - Stop + rimozione volumi DB:
docker compose down -v - Stato:
docker compose ps - Log backend:
docker compose logs -f backend - Log frontend:
docker compose logs -f frontend - Log postgres:
docker compose logs -f postgres
- Le credenziali DB nel compose (
realnis/realnis) sono adatte a sviluppo: in produzione cambiale. - Per un deploy più robusto conviene integrare Flyway/Liquibase per migrazioni automatiche.
- Documentazione di dettaglio per backend e frontend è disponibile anche in:
backend/README.mdfrontend/README.md