Risoluzione dei problemi¶
Problemi comuni e come risolverli, raggruppati per area.
Problemi di database¶
OperationalError: Connection refused all'avvio¶
Causa: il servizio si è avviato prima che PostgreSQL fosse pronto.
Soluzione: Docker Compose usa gli health check — non dovrebbe accadere. Se accade:
docker compose restart auth-service # riprova dopo che il DB è sano
asyncpg.exceptions.InvalidAuthorizationSpecificationError¶
Causa: password errata nella stringa di connessione.
Soluzione: controlla DATABASE_URL nel file envs/<service>.env del servizio interessato rispetto a POSTGRES_PASSWORD nel .env radice — devono coincidere. Assicurati di non aver modificato accidentalmente il segmento della password copiandola.
La migrazione Alembic fallisce all'avvio¶
Sintomo: nei log del servizio vedi alembic.util.exc.CommandError o relation "xxx" already exists.
Soluzione:
- Controlla se è stata eseguita una migrazione parziale:
docker exec -it jinbocho-postgres psql -U postgres -d jinbocho -c '\dt auth.*'(ocatalog.*) e ispezionaalembic_version - Se lo schema è in uno stato inconsistente, resettalo:
# Elimina e ricrea lo schema dentro il container jinbocho-postgres, poi riavvia # (Alembic rieseguirà tutte le migrazioni da zero) docker exec -it jinbocho-postgres psql -U postgres -d jinbocho -c 'DROP SCHEMA auth CASCADE;' docker compose -f docker/docker-compose.all.yml --env-file .env restart auth-service
Problemi tra servizi¶
Il catalog service restituisce 401 per ogni richiesta¶
Causa: il JWT_SECRET_KEY del catalog-service non corrisponde all'auth-service.
Soluzione: conferma che JWT_SECRET_KEY sia esattamente la stessa stringa nelle variabili d'ambiente di auth, catalog e gateway. Gli errori di copia-incolla (spazi finali, ritorni a capo) sono comuni.
Il gateway restituisce 502 Bad Gateway¶
Causa: il gateway non riesce a raggiungere un servizio interno.
Controlli:
- L'URL del servizio interno nell'ambiente del gateway (
AUTH_SERVICE_URL/CATALOG_SERVICE_URLinenvs/api-gateway.env) è errato — deve essere il nome del servizio Docker Compose, es.http://auth-service:8001, nonlocalhost - Il servizio si sta ancora avviando o si è bloccato — controlla i suoi log:
docker compose -f docker/docker-compose.all.yml logs auth-service
Problemi Frontend / CORS¶
Errore CORS nella console del browser: Access-Control-Allow-Origin mancante¶
Causa: il CORS_ORIGINS del gateway non include l'URL del frontend.
Soluzione:
- Modifica
envs/api-gateway.env - Imposta
CORS_ORIGINSall'origin esatta del frontend:["https://library.example.com"] - Nessuna barra finale
- Deve essere un array JSON valido (virgolette doppie, parentesi quadre)
- Riavvia il gateway:
docker compose -f docker/docker-compose.all.yml --env-file .env restart api-gateway
Il frontend mostra una pagina bianca dopo il deploy¶
Causa: API_BASE_URL nel .env radice è errato o mancante — il container frontend lo inietta in /env.js all'avvio, non al momento della build.
Soluzione: controlla API_BASE_URL nel .env, poi riavvia il container frontend: docker compose -f docker/docker-compose.all.yml --env-file .env restart frontend. Nessuna rebuild necessaria.
Il login ha successo ma tutte le chiamate API successive restituiscono 401¶
Causa: il token di accesso viene inviato correttamente ma il gateway o un servizio backend lo rifiuta.
Controlli:
- Apri DevTools del browser → scheda Network → ispeziona l'header
Authorizationdi una richiesta che fallisce - Conferma che
JWT_SECRET_KEYsia identica su auth, catalog e gateway
Problemi di ricerca ISBN¶
La ricerca ISBN restituisce 404 per un ISBN valido¶
Causa: il libro non è in Open Library o Google Books, o la chiave API di Google Books è mancante/non valida.
Controlli:
- Testa Open Library direttamente:
curl "https://openlibrary.org/api/books?bibkeys=ISBN:9788845292613&format=json&jscmd=data" - Se
GOOGLE_BOOKS_API_KEYè mancante, la ricerca di fallback viene saltata — aggiungi la chiave aenvs/catalog-service.env
La ricerca ISBN è lenta (> 2 secondi)¶
Causa: l'ISBN non è nella cache locale e la ricerca esterna è lenta.
Soluzione: è previsto per la prima ricerca di qualsiasi ISBN. Le ricerche successive per lo stesso ISBN sono servite dalla cache e sono veloci.
Generale¶
Porta già in uso¶
# Trova il processo che usa la porta 8000
lsof -i :8000
# Terminalo
kill -9 <PID>
# Oppure cambia la porta host nel file compose (es. "8010:8000")