Vai al contenuto

Configurazione dell'ambiente di sviluppo locale

Avvia il tuo ambiente di sviluppo locale con Docker Compose in pochi minuti.

Panoramica

Il backend di Jinbocho viene distribuito tramite un repository di orchestrazione separato, jinbocho-infrastructure-community-v1. Non contiene codice applicativo — solo i file Docker Compose, i template delle variabili d'ambiente e gli strumenti di deploy per VPS/Render per i servizi auth, catalog e api-gateway.

Sono disponibili tre file Compose, da scegliere in base alle immagini che vuoi eseguire:

File Immagini Caso d'uso
docker/docker-compose.community.yml GHCR (pre-build) Self-hosting, senza checkout del codice sorgente
docker/docker-compose.community.local.yml Build da ../jinbocho-*-v1 Sviluppo locale dal codice sorgente — usato da ./scripts/dev.sh
docker/docker-compose.all.yml Backend da GHCR + frontend buildato localmente Deploy su VPS singolo, include Caddy + TLS

Questo capitolo descrive lo sviluppo locale dal codice sorgente (*.local.yml). Per il self-hosting con immagini pre-build o un'installazione VPS in un unico passaggio, vedi Deploy in Produzione.

1. Preparare la workspace

Se non hai ancora clonato i repository, segui le istruzioni di Checkout dei repository.

jinbocho-infrastructure-community-v1 si aspetta che i repository dei servizi siano clonati nella stessa directory padre, allo stesso livello:

~/workspace/jinbocho/
├── jinbocho-infrastructure-community-v1/
├── jinbocho-auth-v1/
├── jinbocho-catalog-v1/
├── jinbocho-api-gateway-v1/
└── jinbocho-fe/

2. Configurare le variabili d'ambiente

Da jinbocho-infrastructure-community-v1/, copia il file .env di root e i template per ciascun servizio da envs/:

cd jinbocho-infrastructure-community-v1

cp .env.example .env
cp envs/auth-service.env.example    envs/auth-service.env
cp envs/catalog-service.env.example envs/catalog-service.env
cp envs/api-gateway.env.example     envs/api-gateway.env

Le variabili non elencate qui sotto hanno già un valore di default funzionante nel relativo file *.example — non serve modificarle per lo sviluppo locale.

.env (root del repository — letto da Docker Compose stesso):

Variabile Default Obbligatoria Descrizione
POSTGRES_PASSWORD change_me_local_dev Sempre Password per i container Postgres locali
JINBOCHO_VERSION latest No Tag dell'immagine GHCR (usato solo dai file compose non .local)

envs/auth-service.env — variabili principali:

Variabile Default Obbligatoria Descrizione
DATABASE_URL punta a jinbocho-postgres-auth:5432/auth_db Deve corrispondere a POSTGRES_PASSWORD del .env di root
JWT_SECRET_KEY Deve essere identica tra auth-service, catalog-service e api-gateway. Generala con openssl rand -hex 32
FRONTEND_BASE_URL http://localhost:5173 No Usata per costruire i link nelle email di invito/reset password
SMTP_HOST / SMTP_PORT / SMTP_USER / SMTP_PASSWORD / EMAIL_FROM No Lascia SMTP_USER vuoto per stampare i link di reset/invito nei log invece di inviare email reali

envs/catalog-service.env — variabili principali:

Variabile Default Obbligatoria Descrizione
DATABASE_URL punta a jinbocho-postgres-catalog:5432/catalog_db Deve corrispondere a POSTGRES_PASSWORD del .env di root
JWT_SECRET_KEY Deve corrispondere al valore di auth-service
GOOGLE_BOOKS_API_KEY Consigliata Chiave gratuita dell'API Google Books; senza di essa la quota condivisa (1000 richieste/giorno) si esaurisce rapidamente

envs/api-gateway.env — variabili principali:

Variabile Default Obbligatoria Descrizione
JWT_SECRET_KEY Deve corrispondere al valore di auth-service
AUTH_SERVICE_URL / CATALOG_SERVICE_URL hostname Docker interni No Lasciali invariati per lo sviluppo locale
CORS_ORIGINS ["*"] No Imposta l'URL del tuo frontend in produzione
JINBOCHO_FEATURES catalog,auth No Moduli abilitati, separati da virgola

Non committare mai i file .env

Tutti i file .env sotto jinbocho-infrastructure-community-v1/ sono (e devono rimanere) nel .gitignore.

3. Avviare lo stack

Da jinbocho-infrastructure-community-v1/:

docker compose -f docker/docker-compose.community.local.yml up --build -d

Controlla lo stato:

docker compose -f docker/docker-compose.community.local.yml ps

Visualizza i log:

docker compose -f docker/docker-compose.community.local.yml logs -f              # tutti i servizi
docker compose -f docker/docker-compose.community.local.yml logs -f auth-service # un solo servizio

La Swagger UI è disponibile su:

  • Gateway: http://localhost:8000/docs
  • Auth: http://localhost:8001/docs
  • Catalog: http://localhost:8002/docs

4. Avviare backend e frontend insieme

./scripts/dev.sh avvia lo stack Compose locale e poi lancia il server di sviluppo del frontend nello stesso terminale:

cd jinbocho-infrastructure-community-v1
./scripts/dev.sh

È equivalente a eseguire docker compose -f docker/docker-compose.community.local.yml up --build -d seguito da npm run dev in jinbocho-fe/.

Per avviare il frontend separatamente, in un nuovo terminale:

cd jinbocho-fe
npm ci          # Installa le dipendenze (solo la prima volta)
npm run dev

Il frontend si avvierà su http://localhost:5173 con hot reload.

Ispezione del database

# Database auth
psql -U postgres -h 127.0.0.1 -p 5432 -d auth_db

# Database catalog
psql -U postgres -h 127.0.0.1 -p 5433 -d catalog_db

Password: il valore di POSTGRES_PASSWORD da jinbocho-infrastructure-community-v1/.env (change_me_local_dev di default).

Verifica

Health check

curl http://localhost:8000/health   # {"status":"ok"}
curl http://localhost:8001/health   # {"status":"ok"}
curl http://localhost:8002/health   # {"status":"ok"}

Smoke-test dell'intero stack

jinbocho-infrastructure-community-v1 include uno script che registra una famiglia di test ed esercita i principali endpoint tramite il gateway:

cd jinbocho-infrastructure-community-v1
./scripts/validate-api.sh

Test di un flusso completo manuale

# 1. Registra una famiglia
curl -X POST http://localhost:8000/v1/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "family_name": "Famiglia Test",
    "user_name": "Alice",
    "email": "alice@example.com",
    "password": "SecurePassword123!"
  }'

# 2. Login
curl -X POST http://localhost:8000/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"alice@example.com","password":"SecurePassword123!"}'
# Copia l'access_token dalla risposta

# 3. Crea una stanza
TOKEN="il-tuo-access-token"
curl -X POST http://localhost:8000/v1/location/rooms \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"name":"Soggiorno"}'

Arresto dell'ambiente

docker compose -f docker/docker-compose.community.local.yml stop        # ferma i container, conserva i dati
docker compose -f docker/docker-compose.community.local.yml down        # rimuove i container, conserva i volumi
docker compose -f docker/docker-compose.community.local.yml down -v     # rimuove tutto, database inclusi ⚠️

Danger

docker compose down -v elimina tutti i dati locali in modo permanente.

Risoluzione dei problemi

Porta già in uso

lsof -i :8000        # trova cosa sta usando la porta
kill -9 <PID>        # libera la porta

In alternativa, cambia la porta lato host nel file compose che stai usando (es. "8010:8000").

Il servizio non si avvia

docker compose -f docker/docker-compose.community.local.yml logs auth-service         # leggi i messaggi di errore
docker compose -f docker/docker-compose.community.local.yml build --no-cache auth-service
docker compose -f docker/docker-compose.community.local.yml up -d auth-service

Connessione al database rifiutata

docker compose -f docker/docker-compose.community.local.yml ps    # verifica che i container postgres siano in esecuzione
docker compose -f docker/docker-compose.community.local.yml restart jinbocho-postgres-auth jinbocho-postgres-catalog

Variabili d'ambiente non applicate

I file envs/*.env vengono letti all'avvio del container. Dopo qualsiasi modifica:

docker compose -f docker/docker-compose.community.local.yml restart auth-service

Prossimi passi

  • Documentazione API: http://localhost:8001/docs (auth) / http://localhost:8002/docs (catalog)
  • Esegui i test: cd jinbocho-auth-v1 && pytest tests/ -v
  • Deploy in produzione: Vedi Deploy in Produzione