Supporto · self-hosted

Problemi noti e soluzioni

Questa pagina raccoglie i bug noti — con il fix già rilasciato — e le soluzioni ai problemi più frequenti dell'installazione self-hosted. Nasce dalle segnalazioni reali dei primi utenti della Community: se incontri qualcosa che qui non c'è, scrivici e la arricchiamo.

ClamAV si riavvia ogni ~10 minuti Risolto · 3.60.0
  • Sintomo: il container itsm-clamav riparte ciclicamente, nei log si ripete "Starting ClamAV" senza nessun messaggio di errore o shutdown.
  • Causa: il limite di memoria nei compose distribuiti fino alla 3.59 era 768 MB, ma clamd con il database firme completo occupa 1,2–1,4 GB: il kernel terminava il container (OOM kill).
  • Fix: dalla 3.60.0 i compose impostano memory: 1536M. Se hai un compose vecchio, alza il limite nella sezione clamav e applica con docker compose up -d clamav. Verifica: docker inspect itsm-clamav --format '{{.State.OOMKilled}}' deve restituire false.
ClamAV sempre "unhealthy" anche se funziona Risolto · 3.60.1
  • Sintomo: docker compose ps mostra itsm-clamav unhealthy a tempo indeterminato, anche quando clamd è attivo e scansiona regolarmente.
  • Causa: l'healthcheck nei compose usava clamdscan --ping senza argomento — un comando che fallisce sempre in parsing, quindi il check non poteva mai passare.
  • Fix: dalla 3.60.1 l'healthcheck è clamdscan --ping 1. Su un compose vecchio basta aggiungere l'argomento 1 e fare docker compose up -d clamav.

I compose aggiornati con entrambi i fix sono già nelle istruzioni di installazione: se parti oggi da /scarica non sei interessato da questi bug.

Risolvi da solo

Problemi frequenti d'installazione

Prima regola del troubleshooting: l'errore vero sta quasi sempre in docker logs itsm-fpm — l'applicazione scrive su stderr. I log di itsm-web (nginx) mostrano solo il sintomo, ad esempio i 500 dell'healthcheck interno.

Errore 500 su ogni pagina subito dopo l'installazione +

Nel 90% dei casi è l'APP_KEY nel .env scritta senza il prefisso base64:. Il formato corretto è:

APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=

Si genera con echo "base64:$(openssl rand -base64 32)". Senza prefisso le migrazioni passano ma ogni richiesta web fallisce in cifratura ("Unsupported cipher or incorrect key length"). Conferma in docker logs itsm-fpm, correggi e applica con docker compose up -d. Stessa attenzione per APP_KEK_SECRET: dev'essere base64 di 32 byte (openssl rand -base64 32), non hex.

itsm-fpm, itsm-worker e itsm-scheduler si riavviano in loop dopo una modifica al .env +

Se nei log di itsm-fpm vedi "password authentication failed", hai cambiato DB_PASSWORD dopo il primo avvio: PostgreSQL legge la password solo quando inizializza il volume, ai riavvii successivi conserva quella vecchia. Le migrazioni falliscono e l'entrypoint esce.

  • Istanza vuota (mai funzionata, nessun dato): riparti pulito —
    docker compose -f docker-compose.production.yml down
    docker volume rm itsm_db_data itsm_redis_data
    docker compose -f docker-compose.production.yml up -d
  • Istanza con dati: non cancellare nulla — riallinea la password dentro il database: docker exec itsm-db psql -U itsm -d itsm -c "ALTER ROLE itsm PASSWORD 'nuova-password';"

⚠️ E non rigenerare mai APP_KEY / APP_KEK_SECRET su un'istanza con dati: cifrano le informazioni sensibili nel database, cambiarle le rende irrecuperabili.

Ho modificato il .env (o il compose) ma non cambia niente +

docker restart e docker compose restart riavviano i container con l'ambiente e i limiti vecchi: non rileggono né il .env né il compose. Per applicare le modifiche serve la ricreazione:

docker compose -f docker-compose.production.yml up -d

Compose ricrea solo i container la cui configurazione è cambiata. In caso di dubbio aggiungi --force-recreate seguito dai nomi dei servizi interessati.

itsm-web non parte (o "è sparito") +

itsm-web (nginx) dipende da itsm-fpm con condizione healthy: se PHP-FPM è in crash loop, Compose non lo avvia proprio. Non è lui il problema — risolvi prima la causa su itsm-fpm (vedi le voci sopra) e poi rilancia docker compose up -d: tornerà su da solo.

Il login riesce ma torno sempre alla pagina di login +

Stai servendo l'app in HTTP con SESSION_SECURE_COOKIE=true: il cookie di sessione viene marcato Secure e il browser lo scarta. Due configurazioni coerenti:

  • Produzione dietro reverse proxy TLS: APP_FORCE_HTTPS=true + SESSION_SECURE_COOKIE=true
  • Test in HTTP (es. http://localhost:8087): APP_FORCE_HTTPS=false + SESSION_SECURE_COOKIE=false

Dopo la modifica, come sempre: docker compose up -d.

Login Google/Microsoft: errore "redirect_uri_mismatch" +

Il redirect URI registrato nella console del provider deve coincidere esattamente con l'URL pubblico dell'istanza: stesso schema, stesso host, stesso percorso. Esempio per Google: https://itsm.tuodominio.it/auth/google/callback. La guida passo-passo alla configurazione OAuth è nel QUICKSTART incluso nelle istruzioni di installazione.

ClamAV ci mette minuti a partire: è normale? +

Sì. Al primo avvio scarica ~300 MB di firme antivirus e poi le carica in memoria: su rete lenta anche 10 minuti. Le firme restano nel volume itsm_clamav_data, quindi i riavvii successivi impiegano ~2 minuti. Nel frattempo la piattaforma funziona normalmente: la scansione degli allegati riprova da sola quando ClamAV è pronto. Per un ambiente di prova puoi anche disattivarla con ITSM_ANTIVIRUS=off (da riattivare in produzione).