Troubleshooting e diagnostica¶
Una guida strutturata alla diagnosi di un'appliance Stargate via riga di comando: aspetti da verificare, posizione dei log e misure di ripristino sicuro.
Dove eseguire questi comandi
Eseguire tutto ciò che segue dalla directory di deployment - la cartella contenente docker-compose.yml e scripts/ (nelle immagini VM si tratta generalmente di /usr/share/stargate-deployment/docker-compose, oppure la directory in cui è stata effettuata l'installazione). Tutti i comandi docker compose e ./scripts/* presuppongono questa directory di lavoro.
1. Per iniziare: controllo dell'integrità¶
Un unico comando riassume l'intera appliance:
Segnala «superato / non superato» per: container (in esecuzione / integri), liveness endpoint (smimekeys, policy, irisagent, mxengine), stato di blocco Vault, connettività e database PostgreSQL, SeaweedFS, tunnel WireGuard e handshake tra peer, Stalwart MTA (porte 25 / 10026), endpoint metriche Prometheus e disco/memoria.
Tip
Eseguire questo comando per primo. Una singola riga FAIL di solito rimanda direttamente alla sezione sottostante.
2. Posizione dei log¶
| Livello | Comando | Visualizzazione |
|---|---|---|
| Avvio / prima installazione / avvio automatico | sudo journalctl -u stargate -n 200 --no-pager | Il servizio systemd che esegue start.sh all'avvio e durante l'installazione al primo avvio |
| Aggiornamenti | cat ../update.log (cartella root di deployment, un livello sopra docker-compose/) | Output dell'ultimo update.sh avviato da dashboard/host |
| Un unico servizio | docker logs stargate-<service> --tail 100 | ad es. stargate-dashboard, stargate-mxengine, stargate-keycloak |
| Seguire un servizio live | docker logs -f stargate-mxengine | In tempo reale |
| Tutti i container live | docker ps -a --format '{{.Names}}' \| xargs -I{} sh -c 'docker logs --timestamps -f {} 2>&1 \| sed "s/^/[{}] /"' | Accorpati, con il nome del container come prefisso |
| Visualizzatore log web | Dozzle su https://<SERVER_IP>:8190 (login Keycloak) | Consente di consultare tutti i log dei container in un'interfaccia utente |
Per inviare i log all'Assistenza HIN, utilizzare lo script di caricamento e condividere il link generato - si veda Fornire log all'Assistenza:
3. Container che non si avviano o si riavviano¶
Leggere la colonna Status:
| Status | Significato | Azione |
|---|---|---|
Up ... (healthy) | In esecuzione, correttamente | - |
Up ... (senza controllo dell'integrità) | In esecuzione; nessun controllo dell'integrità definito | Verificare i docker logs se si sospetta un problema |
Restarting | Crash-looping | docker logs stargate-<svc> - correggere l'errore alla radice (config, secret, dipendenza) |
Exited (0) | Inizializzazione one-shot conclusa correttamente (ad es. *-init, vault-data-fixer) | Normale |
Exited (1+) | Fallito | docker logs stargate-<svc> - le ultime righe indicano il motivo |
Created | Mai avviato - una dipendenza non è disponibile | Verificare da cosa dipende (depends_on, di solito Postgres/Vault); risolvere prima quello |
Riavviare un singolo servizio (in modo sicuro e non distruttivo):
docker compose up -d <service> # recreate one service
docker compose restart <service> # just restart it
Ordine di avvio
I servizi attendono le proprie dipendenze (depends_on + controlli dell'integrità). Durante un riavvio completo, brevi righe come connection refused / database system is starting up mentre Postgres/Vault si avviano sono normali e scompaiono entro un minuto.
4. Diagnosi in base ai sintomi¶
Dashboard o Keycloak non si caricano / non è possibile effettuare l'accesso¶
- Entrambi sono esposti tramite Caddy: la Dashboard sulla porta
:443, Keycloak sulla porta:8180. - Controllare l'intera catena:
docker logs stargate-caddy,stargate-dashboard,stargate-keycloak,stargate-apisix. - Keycloak deve essere integro affinché la dashboard funzioni:
docker compose ps keycloak. - È normale che nel browser compaia un avviso TLS (self-signed cert) - accettare e proseguire.
- Gli errori nei reindirizzamenti durante l'accesso indicano generalmente che l'URL pubblico non corrisponde alla modalità con cui si raggiunge l'appliance - verificare che
KEYCLOAK_PUBLIC_URL/DASHBOARD_PUBLIC_URLin.envpuntino effettivamente all'IP o all'host realmente utilizzato.
Tunnel WireGuard inattivo / errore nell'emissione del certificato¶
È il problema più comune - i certificati non vengono emessi quando il tunnel è inattivo, pertanto occorre sempre risolvere prima il problema del tunnel.
./scripts/health-check.sh -v # shows WireGuard peer + handshake status
docker logs stargate-irisagent | grep -iE "handshake|peer|cert|wireguard"
- Verificare che il firewall consenta
19818(UDP e TCP) in entrata e in uscita. - Verificare che il peer sia registrato sul lato HIN (passaggio a carico dell'Assistenza) - occorre fornire la chiave pubblica WG,
DEPLOYMENT_NAME,SERVER_STATIC_IP,WG_INTERFACE_PORT. - Non appena il tunnel mostra un handshake recente, riprovare a emettere il certificato dalla dashboard.
Vault bloccato o inizializzazione fallita¶
- Il Vault deve essere sbloccato affinché smimekeys/mxengine/policy funzionino. Le chiavi si trovano in
secrets/vault-keys.json. - Se
vault-initè terminato con un codice di uscita diverso da zero, il file delle chiavi potrebbe mancare o essere danneggiato - controllare i relativi log; rilanciando./scripts/init-vault.shsi tenta un nuovo sblocco.
Non eliminare secrets/vault-keys.json
Perdere il file significherebbe perdere l'accesso a tutti i secret memorizzati. Eseguire un backup.
PostgreSQL / connettività al database¶
- È normale che
the database system is starting up (57P03)si verifichi subito dopo un riavvio - i servizi si riconnettono automaticamente. - Gli errori di autenticazione ricorrenti indicano solitamente che
POSTGRES_PASSWORDnel file.envnon corrisponde più a quello memorizzato nel volume dati - consultare le note relative agli aggiornamenti e ai secret, ed evitare di modificarlo manualmente.
La posta non viene recapitata¶
-
La posta in entrata arriva sulla porta
:25(Stalwart). Molti fornitori di servizi cloud bloccano la porta 25 per impostazione predefinita:Se la porta
25è bloccata, bisogna richiedere un'eccezione al proprio provider. - Posta in uscita / sealing: segue il percorso Stalwart → mxengine (:8084callback di blocco, SMTP:1587):docker logs stargate-mxengine. - I loop di posta si manifestano con la ripetizione dello stesso messaggio - verificare che il record MX del proprio dominio non venga risolto nell'indirizzo IP di questa stessa appliance. - Vedere Configurazione relay di posta e Configurazione DNS per il routing previsto.
Aggiornamento fallito¶
docker logs stargate-ops-agent --tail 40 # the update orchestrator
cat ../update.log # the update script output
- L'ops-agent recupera il manifesto di release, scrive le versioni nel file
customer-config.sh, quindi esegue lo scriptupdate.shsull'host. - Al termine, confermare le versioni applicate:
./scripts/gather-app-versions.sh(oppure verificare i tag delle immagini condocker compose ps). - Se un servizio si blocca dopo un aggiornamento, eseguire
docker compose up -d <service>per ricrearlo.
L'aggiornamento si avvia ma non succede nulla (aggiornamento da una versione precedente). Se il log dell'ops-agent si blocca su pulling deployment repo ... e l'aggiornamento non procede, il repository sulla VM molto probabilmente presenta modifiche locali a un file monitorato (solitamente un docker-compose.yml modificato manualmente). Questo fa sì che il git checkout dell'ops-agent si rifiuti di essere eseguito, e l'aggiornamento resta bloccato. Forzare il ripristino del repository all'ultima revisione, quindi ripetere l'aggiornamento. Git è l'unica fonte affidabile; questa operazione elimina esclusivamente le modifiche locali ai file monitorati - customer-config.sh, .env e secrets/ sono esclusi tramite .gitignore e vengono preservati:
cd /usr/share/stargate-deployment
git fetch origin
git checkout -f main
git reset --hard origin/main
sed -i 's/^OPS_AGENT_VERSION=.*/OPS_AGENT_VERSION="v0.0.3"/' docker-compose/customer-config.sh # v0.0.3 or newer
cd docker-compose
./scripts/update.sh
update.sh rigenera il file .env, scarica le immagini e ricrea i servizi interessati - non è necessario riavviare Stargate manualmente. Al termine, ripetere l'aggiornamento dalla dashboard: a questo punto procederà correttamente.
Warning
Non utilizzare git pull in questo caso. Su un working tree con modifiche locali il comando si interrompe con l'errore "local changes would be overwritten", il che costringe a un percorso alternativo con git stash, conflitti di merge o un ripristino manuale. La sequenza git checkout -f + git reset --hard riportata sopra evita completamente questo problema ed è il metodo sicuro e ripetibile per riportare il repository allo stato aggiornato.
Dozzle (log viewer) non raggiungibile¶
- L'URL è
https://<SERVER_IP>:8190; richiede il login a Keycloak (stesso realm della dashboard) tramite oauth2-proxy. - Funziona solo quando
DOZZLE_ENABLED="true". Verificare con:docker compose ps dozzle oauth2-proxy. - Assicurarsi che il firewall consenta il traffico in entrata sulla porta
:8190. Vedere Monitoraggio e Log.
5. Archiviazione e disco¶
df -h / # is the disk full?
docker system df # space used by images / containers / volumes
du -sh /var/lib/docker/volumes/* # per-volume usage (Postgres, SeaweedFS, Loki, ...)
- I log dei container sono soggetti a un limite massimo (file json, 100 MB × 5 per container), quindi non dovrebbero saturare il disco - a differenza di immagini e volumi.
- Per liberare spazio in sicurezza:
docker image prune -af(rimuove solo le immagini non utilizzate). Evitaredocker system prune --volumes- elimina i volumi con i dati. - L'archiviazione a oggetti è SeaweedFS (
stargate-seaweedfs):docker logs stargate-seaweedfs --tail 50.
6. Risorse VM¶
free -h # memory (min 8 GB)
nproc # CPUs (min 4)
docker stats --no-stream # per-container CPU/RAM
uptime # load average
Le metriche dell'host vengono esportate anche per Prometheus sulla porta :9100/metrics (vedere Monitoraggio). Se l'appliance è in swap o al limite delle risorse, è probabile che i controlli dell'integrità presentino fluttuazioni e che gli aggiornamenti risultino lenti.
7. Rete e porte¶
Verifica rapida della raggiungibilità delle principali porte in entrata:
| Porta | Servizio | Direzione |
|---|---|---|
25 | Stalwart SMTP (posta in entrata) | in entrata |
443 | Dashboard (HTTPS) | in entrata |
8180 | Keycloak | in entrata |
8190 | Dozzle (opzionale) | in entrata |
19818 | WireGuard (UDP e TCP) | in entrata / in uscita |
È necessario l'accesso in uscita al registro dei container, all'autorità di certificazione S/MIME (tramite il tunnel WireGuard) e a qualsiasi istanza remota di Loki configurata. Per la tabella completa delle porte, vedere la home page e la panoramica delle applicazioni.
8. Misure di ripristino¶
In ordine crescente di impatto:
docker compose up -d <service> # recreate one stuck service
sudo systemctl restart stargate # restart the whole stack (via start.sh)
./scripts/stop.sh && ./scripts/start.sh
Backup e ripristino distruttivo
./scripts/backup.sh e ./scripts/restore.sh gestiscono il backup e il ripristino dei dati. Lo script ./scripts/purge.sh elimina tutti i dati (database, Vault, archiviazione) per consentire una reinstallazione pulita - utilizzare solo come ultima risorsa e solo se si dispone di un backup recente. Dettagli: Configurazione avanzata di Docker.
9. Quando contattare l'Assistenza¶
Se, dopo aver seguito i passaggi sopra indicati, il controllo dell'integrità continua a segnalare errori, aprire un ticket tramite Assistenza / Contattaci e includere:
- La versione dell'appliance (
./scripts/gather-app-versions.sh) e il nome del cliente. - L'output del controllo dell'integrità (
./scripts/health-check.sh -v). - Un link al pacchetto di log generato da
./scripts/send-logs-to-support.sh(vedere Fornire log all'Assistenza). - Cosa si stava facendo quando si è verificato il problema, ed eventuali screenshot.
Aggiornamento dell'istanza Verimesh¶
Le seguenti istruzioni descrivono come aggiornare un'istanza Verimesh dalla versione v0.5.1 alla versione v0.5.3.
Nota: è necessario effettuare l'accesso alla VM utilizzando l'account amministratore Linux.
Procedura di aggiornamento¶
- Modificare il file .env e aggiornare la versione di ops-agent a v0.0.3.
- Modificare la configurazione del cliente e aggiornare anche lì la versione di ops-agent a v0.0.3.
- Passare al branch main:
git checkout main - Scaricare le ultime modifiche:
git pull - Aggiornare il container ops-agent:
docker compose up -d ops-agent - Accedere alla Dashboard.
- Accedere alle Impostazioni.
- Nella sezione Update in fondo alla pagina, inserire la versione di destinazione (v0.5.3) e avviare la procedura di aggiornamento.
Configurazione aggiornata di Keycloak¶
Nota: le presenti istruzioni sono valide se si utilizza l'immagine VM v0.5.1 e si è successivamente eseguito l'aggiornamento a una versione più recente.
In seguito all'ultimo aggiornamento di Keycloak, un breaking change fa sì che gli utenti autenticati vengano reindirizzati in modo imprevisto alla pagina di login quando accedono a determinati percorsi dell'applicazione (ad es. Peers, Peer Certificates).
Per risolvere il problema, occorre completare la seguente configurazione manuale nella interfaccia utente di Keycloak.
Procedura di risoluzione¶
-
Aprire Keycloak nell'ambiente e inserire l'URL -
<VM IP address>/admin/master/console/Nome utente: Admin Password: recuperare la password amministratore dal file .env della macchina (è necessario effettuare l'accesso alla console Linux) -
Console Admin - modificare il realm in → realm stargate:
- Selezionare Clients → dashboard
- Accedere alla scheda Client scopes → cliccare su dashboard-dedicated
- Selezionare Configure a new mapper → Audience
-
Impostare le seguenti configurazioni:
- Name: apisix-audience
- Included client audience: apisix (selezionare dal menu a tendina)
- Included custom audience: (lasciare vuoto)
- Add to access token: On
- Add to token introspection: On
- Add to ID token / lightweight token: Off
-
Cliccare su Save
