Configurazione avanzata di Stargate Docker¶
Backup¶
Backup automatici¶
- I backup giornalieri vengono eseguiti alle 2:00 AM tramite cron (impostati durante l'installazione)
- I backup vengono archiviati in
./backups/come file.tar.gzcon timestamp - I vecchi backup (>7 giorni) vengono automaticamente eliminati
Cosa è incluso nei backup¶
- Dump PostgreSQL completo (tutti i database con utenti e permessi)
- Dump di database individuali (per ripristino parziale se necessario)
- Chiavi Vault (
vault-keys.jsonper lo scongelamento) - Configurazione cliente (
customer-config.shcon chiave WireGuard) - CSR e certificati S/MIME (tutti i file
.crt,.pem,.cer) - Manifesto del backup (
manifest.jsoncon metadati)
Backup manuale¶
Crea un archivio compresso in ./backups/YYYYMMDD_HHMMSS.tar.gz.
Ripristino dal backup¶
Per ripristinare su una nuova macchina o dopo una pulizia. Copiare l'archivio di backup sulla nuova macchina ed eseguire:
Lo script di ripristino:
- Arresta tutti i servizi in esecuzione
- Estrae e valida il backup
- Installa Docker se necessario
- Ripristina la configurazione cliente
- Avvia i servizi di infrastruttura (PostgreSQL, Vault, MinIO)
- Ripristina il database
- Scongela Vault con le chiavi di backup
- Avvia i servizi applicativi
Ripristino parziale (database singolo)¶
Se è necessario ripristinare solo un database:
Estrarre il backup¶
Ripristinare un database specifico¶
cat /tmp/20260130_143022/database/mxengine.sql | docker exec -i stargate-postgres psql -U postgres -d mxengine
Aggiornamento di Stargate¶
Aggiornare script di deployment e configurazione¶
Il repository di deployment di Stargate riceve aggiornamenti per script (install.sh, start.sh, health-check.sh, restore.sh, ecc.), modelli di configurazione e documentazione. Per applicare questi aggiornamenti:
1. Creare un backup prima dell'aggiornamento¶
2. Recuperare e applicare le ultime modifiche¶
Il repository è l'unica fonte di verità per i file tracciati. Aggiornare quindi ripristinando all'ultima revisione. Questo sostituisce i file tracciati (script, docker-compose.yml, modelli di configurazione) con le versioni del repository:
3. Riavviare i servizi per applicare eventuali modifiche a script o configurazione¶
Note
customer-config.sh, .env e la directory secrets/ sono in .gitignore, quindi questa operazione non li tocca - la configurazione e le credenziali vengono preservate. Effettuare sempre le personalizzazioni in customer-config.sh, mai modificando file tracciati come docker-compose.yml: un hard reset - e gli aggiornamenti automatici attivati dalla dashboard - annullerà qualsiasi modifica ai file tracciati. Ciò è intenzionale; mantenere ogni distribuzione identica al repository è ciò che consente agli aggiornamenti di essere applicati in modo affidabile e senza risoluzione manuale dei conflitti.
Se l'aggiornamento include modifiche al modello di configurazione, confrontarlo con la configurazione esistente per vedere se sono state aggiunte nuove variabili:
Aggiornare le immagini dei servizi¶
Le versioni delle applicazioni sono gestite esclusivamente tramite la dashboard. Ogni release è un manifest con versione che fissa insieme una combinazione nota e testata di tutte le versioni dei servizi; la pagina di aggiornamento della dashboard elenca le release disponibili e applicandone una vengono scaricate le immagini corrispondenti e ricreati per voi i servizi interessati.
Per aggiornare:
- Aprire la dashboard e andare alla pagina di aggiornamento.
- Selezionare la release desiderata.
- Confermare - la dashboard applica il manifest della release e ricrea i servizi modificati.
Non modificare le versioni manualmente
Non modificare i singoli valori *_VERSION in customer-config.sh o .env per aggiornare le applicazioni. Le versioni vengono rilasciate e testate insieme come un insieme - sceglierne una manualmente produce una combinazione non testata e la modifica verrebbe comunque annullata dal successivo aggiornamento della dashboard. Aggiornare sempre dalla dashboard.
Pulire le vecchie immagini¶
Dopo gli aggiornamenti, rimuovere le immagini inutilizzate per liberare spazio su disco:
Rollback¶
Per eseguire un rollback, selezionare una release precedente nella pagina di aggiornamento della dashboard e applicarla - lo stesso meccanismo viene eseguito al contrario, fissando l'insieme testato precedente. Non eseguire il rollback modificando le versioni manualmente.
Configurazione¶
Il file .env viene generato da install.sh da customer-config.sh. Le impostazioni di dominio, certificato e WireGuard sono gestite in fase di esecuzione dal dashboard (/installation, /onboarding, /mail) — non sono conservate in .env. Per personalizzare le impostazioni di installazione, modificare customer-config.sh e rieseguire install.sh.
Sezioni chiave nel .env generato:
## PostgreSQL (auto-generato se vuoto in customer-config.sh)
POSTGRES_USER=postgres
POSTGRES_PASSWORD=<auto-generato>
## Vault (auto-populato dopo l'inizializzazione)
VAULT_TOKEN=<auto-generato>
## Storage di oggetti S3 (SeaweedFS)
S3_ACCESS_KEY=minioadmin
S3_SECRET_KEY=<auto-generato>
## Versioni delle applicazioni
SMIMEKEYS_VERSION=v0.0.5
POLICY_VERSION=v0.0.5
IRISAGENT_VERSION=v0.0.6-branch
MXENGINE_VERSION=v0.0.35
MTACONF_VERSION=dev
## Percorso posta in uscita
MXENGINE_PUBLIC_ADDRESS=http://203.0.113.50:8084
OUTBOUND_SEALER_MX_DOMAIN=hintest.ch
## WireGuard
WG_LOCAL_IP=203.0.113.50
WG_INTERFACE_PORT=19818
WG_TRANSPORT_MODE=tcp
Warning
Non modificare .env direttamente. Le modifiche verranno sovrascritte alla successiva esecuzione di install.sh. Per la configurazione in fase di esecuzione (domini, nome host, peer, S/MIME), utilizzare il dashboard.
URL dei servizi¶
| Servizio | URL/Porta |
|---|---|
| Dashboard | https://localhost |
| smimekeys-client | http://localhost:8081 |
| policy | http://localhost:8082 |
| irisagent | http://localhost:8083 |
| mxengine HTTP | http://localhost:8084 |
| Stalwart SMTP | localhost:25 |
| Gateway APISIX | http://localhost:9080 |
| Keycloak | https://localhost:8180 |
Health Check¶
Tutti i servizi espongono un endpoint /liveness:
curl http://localhost:8081/liveness # smimekeys-client
curl http://localhost:8082/liveness # policy
curl http://localhost:8083/liveness # irisagent
curl http://localhost:8084/liveness # mxengine
Monitoraggio¶
Metriche Prometheus¶
Tutti i servizi applicativi espongono metriche Prometheus sulla porta 2112 (internamente), mappate a diverse porte host:
| Servizio | Porta metriche | URL metriche |
|---|---|---|
| smimekeys-client | 2113 | http://localhost:2113/metrics |
| irisagent | 2114 | http://localhost:2114/metrics |
| policy | 2115 | http://localhost:2115/metrics |
| mxengine | 2116 | http://localhost:2116/metrics |
| node-exporter | 9100 | http://localhost:9100/metrics |
Esempio di configurazione scrape Prometheus¶
scrape_configs:
- job_name: 'stargate-smimekeys'
static_configs:
- targets: ['<host>:2113']
- job_name: 'stargate-irisagent'
static_configs:
- targets: ['<host>:2114']
- job_name: 'stargate-policy'
static_configs:
- targets: ['<host>:2115']
- job_name: 'stargate-mxengine'
static_configs:
- targets: ['<host>:2116']
- job_name: 'stargate-node'
static_configs:
- targets: ['<host>:9100']
Controllo rapido delle metriche¶
## Controllare tutti gli endpoint delle metriche
curl -s http://localhost:2113/metrics | head -20 # smimekeys-client
curl -s http://localhost:2114/metrics | head -20 # irisagent
curl -s http://localhost:2115/metrics | head -20 # policy
curl -s http://localhost:2116/metrics | head -20 # mxengine
curl -s http://localhost:9100/metrics | head -20 # node-exporter
Raccolta log (Alloy → Loki)¶
Alloy raccoglie i log dai container delle applicazioni e li invia a Loki.
Container monitorati:
- stargate-apisix
- stargate-keycloak
- stargate-dashboard
- stargate-smimekeys-client
- stargate-policy
- stargate-policy-sync
- stargate-irisagent
- stargate-mxengine
Configurazione in .env:
## URL di push Loki
LOKI_URL=https://loki.example.com
## Etichetta nome host per i log (auto-impostata su DEPLOYMENT_NAME)
ALLOY_HOSTNAME=stargate-acme
Etichette aggiunte ai log:
environment=<DEPLOYMENT_NAME>- Identifica il deploymenthost=<ALLOY_HOSTNAME>- Identifica l'host (come il nome del deployment)container=<nome-container>- Nome del containerservice=<nome-servizio>- Nome del servizio (es., smimekeys-client, policy)level=<livello-log>- Estratto dai log JSON se disponibile
Interrogare i log in Grafana:
{environment="stargate-acme"} |= "error"
{environment="stargate-acme", service="mxengine"}
{environment="stargate-acme", level="error"}
Verificare che Alloy funzioni:
Nota: L'IP pubblico della VM deve essere nella whitelist della configurazione di ingress di Loki.
Stalwart MTA + mtaconf¶
Stargate utilizza Stalwart come mail transfer agent e mtaconf come demone di configurazione. Il dashboard invia la configurazione di domini e relay all'API REST di mtaconf, che la invia a Stalwart tramite la CLI di gestione.
Architettura del flusso di posta¶
Server di posta esterno
│
▼ (porta 25)
┌─────────────────────────────────────────────────────┐
│ stalwart (stargate-stalwart) │
│ │
│ Porta 25 (listener smtp) │
│ │ │
│ ▼ │
│ content_filter → smtp:[mxengine]:1587 │
│ │ │
└────┼────────────────────────────────────────────────┘
│
▼ (porta 1587)
┌─────────────────────────────────────────────────────┐
│ MXEngine (stargate-mxengine) │
│ │
│ Porta 1587 (ingresso SMTP) │
│ │ │
│ ▼ │
│ Firmare/crittografare/elaborare la posta │
│ │ │
│ ▼ │
│ Consegnare a stalwart per il relay │
│ │ │
└────┼────────────────────────────────────────────────┘
│
▼ (porta 10026)
┌─────────────────────────────────────────────────────┐
│ stalwart (stargate-stalwart) │
│ │
│ Porta 10026 (listener di reiniezione) │
│ │ │
│ ▼ │
│ transport → relay al MX di destinazione │
│ │ │
└────┼────────────────────────────────────────────────┘
│
▼ (porta 25)
Server di posta di destinazione (tramite ricerca MX)
Scansione antivirus: La posta in entrata viene scansionata da ClamAV (stargate-clamav), collegato a Stalwart come milter nella fase SMTP DATA sia sul listener pubblico (:25) che su quello di reiniezione (:10026). La posta infetta viene respinta a livello SMTP; se ClamAV non è raggiungibile, il messaggio viene rinviato piuttosto che consegnato non scansionato (fail-closed). Il database delle firme di ClamAV risiede nel volume clamav_data e viene mantenuto aggiornato da freshclam in background.
Flusso di callback di sigillatura (in entrata): Quando un sigillatore remoto deve consegnare un messaggio sigillato, chiama MXENGINE_PUBLIC_ADDRESS (predefinito: http://<SERVER_STATIC_IP>:8084). Questo è il motivo per cui la porta 8084 deve essere aperta per il traffico in entrata. Il protocollo http:// è corretto - TLS non è richiesto perché il payload del sigillo è già crittografato.
Configurazione del relay di posta¶
Tutta la configurazione di posta che varia per deployment (domini di posta, nome host, host di relay, mappe di relay per dominio, reti consentite) viene impostata tramite la pagina /mail del dashboard in fase di esecuzione. Il dashboard invia la configurazione tramite POST all'API REST di mtaconf, che la applica a Stalwart senza riavviare il container.
Non c'è configurazione per dominio in customer-config.sh o .env - gli operatori aggiungono o modificano i domini tramite l'interfaccia utente.
Routing della posta (Migrazione dal vecchio MGW)¶
Differenza chiave rispetto al vecchio HIN-MGW
Nel vecchio MGW, era necessario configurare manualmente un server di destinazione per dominio. In Stargate, il routing della posta è deciso da record MX DNS per impostazione predefinita - Stalwart risolve il MX di ogni dominio al momento della consegna. La pagina /mail del dashboard consente di sovrascrivere questo comportamento per dominio (es. per relayare attraverso il tenant M365 / Exchange) senza toccare il DNS.
Predefinito - automatico tramite DNS MX:
Per ciascuno dei propri domini, assicurarsi che ci sia un record MX nel DNS che punti al corrispondente server Exchange (o altro server di posta):
domain1.com MX 10 exchange1.domain1.com
domain2.com MX 10 exchange2.domain2.com
domain3.com MX 10 exchange3.domain3.com
Funziona per qualsiasi numero di domini - ogni dominio può puntare a un server di posta diverso e Stalwart instraderà di conseguenza.
Se Stargate è l'unico record MX per un dominio, Stalwart lo filtrerà e non avrà alcuna destinazione di consegna. Aggiungere un secondo record MX che punti al server di posta con una priorità più alta (= numero inferiore) in modo che Stalwart lo utilizzi come destinazione di consegna:
example.com MX 10 exchange.example.com ← destinazione di consegna (server di posta)
example.com MX 20 stargate.example.com ← gateway in entrata (Stargate)
Alternativa - relay esplicito per dominio (basato sul mittente):
Per il relay di ritorno attraverso M365 / Exchange Online, configurare le destinazioni di relay per dominio tramite la pagina /mail del dashboard. La posta dai mittenti non nella mappa ricade sulla ricerca MX.
Porte¶
| Porta | Scopo |
|---|---|
25 | Listener SMTP principale (connessioni esterne) |
10026 | Porta di reiniezione (mxengine → stalwart, solo interno) |
1587 | Ingresso SMTP MXEngine (stalwart → mxengine, solo interno) |
8080 | API di gestione Stalwart + API REST mtaconf (solo interno) |
Si utilizza Exchange?
Vedere Exchange-integration per la configurazione completa dei connettori e delle regole di trasporto Exchange Online / On-Premises.
Verifica¶
Controllare lo stato di Stalwart
Controllare i log
Testare la connessione alla porta 25
Testare la porta interna 10026 (dal container mxengine)
Aggiornamento dell'immagine mtaconf¶
Come ogni servizio, la versione dell'immagine mtaconf fa parte di una release e si aggiorna tramite la dashboard - non modificando il suo tag manualmente. Selezionare la release desiderata nella pagina di aggiornamento della dashboard per applicarla.
Risoluzione dei problemi di Stargate¶
Posta non elaborata da mxengine:
- Verificare che content_filter sia configurato: controllare che i log mtaconf mostrino il push riuscito
- Verificare che mxengine sia raggiungibile:
docker exec stargate-stalwart nc -zv mxengine 1587
Posta bloccata dopo l'elaborazione di mxengine:
- Verificare la configurazione in uscita di mxengine: OUTBOUND_SMTP_HOST=stalwart, OUTBOUND_SMTP_PORT=10026
- Verificare che il listener sulla porta 10026 sia attivo in Stalwart
- Verificare che le reti di relay consentite includano la rete Docker (172.x.x.x/16)
Errori di greylisting (450 4.7.1):
- È normale! Il server di destinazione sta rifiutando temporaneamente la posta
- Stalwart riprova automaticamente dopo un ritardo configurabile
- Controllare la coda tramite l'API di gestione
Microsoft blocca l'IP (S3140):
- L'IP del server ha una cattiva reputazione presso Microsoft
- Richiedere la rimozione dalla lista su: https://sender.office.com
- Potrebbero essere necessarie 24-48 ore per avere effetto
Fallimenti di ricerca DNS:
- Utilizzare la pagina
/maildel dashboard per impostare un host di relay esplicito o una mappa di relay per dominio (salta la scoperta basata su MX)
Connessione rifiutata sulla porta 25:
- Assicurarsi che la porta 25 non sia bloccata dal firewall
- Verificare se un altro servizio sta utilizzando la porta 25:
ss -tlnp | grep :25
WireGuard (Comunicazione Agente-Agente)¶
IRISAgent utilizza WireGuard per stabilire tunnel crittografati sicuri tra istanze Stargate per la consegna di messaggi sigillati.
Come funziona¶
Ogni istanza Stargate utilizza l'IP pubblico statico reale del proprio server come indirizzo del tunnel WireGuard. Questo garantisce l'unicità tra tutti i deployment senza coordinazione manuale.
block
columns 5
block:Stargate["Il tuo Stargate (203.0.113.50)"]:2
columns 1
A
space
A --> B
A["IRISAgent (203.0.113.50:19818)"]
B["Consegna messaggio sigillato tramite tunnel WG"]
end
blockArrowId1<["Tunnel WG (TCP)"]>(x):1
block:mxengine["HIN Test (5.102.144.182)"]:2
columns 1
C
space
C --> D
C["IRISAgent (5.102.144.182:19818)"]
D["Ricevi messaggio sigillato"]
end Configurazione WireGuard¶
Impostazioni WireGuard in customer-config.sh:
## ==============================================================================
## IP del server — utilizzato come indirizzo del tunnel WireGuard e URL di callback MXEngine
## ==============================================================================
SERVER_STATIC_IP="203.0.113.50" # L'IP pubblico statico reale del server
## ==============================================================================
## Impostazioni locali WireGuard (in genere lasciate ai valori predefiniti)
## ==============================================================================
WG_PRIVATE_KEY="" # Auto-generato da IRISAgent, poi salvato nella configurazione
WG_INTERFACE_PORT="19818" # Porta WireGuard predefinita
WG_TRANSPORT_MODE="tcp" # "tcp" (predefinito) o "udp"
Info
WG_LOCAL_IP è auto-derivato da SERVER_STATIC_IP. Non è necessario impostarlo separatamente.
Configurazione della connessione peer¶
I dettagli del peer WireGuard (chiave pubblica, endpoint, IP consentiti, ecc.) sono configurati in fase di esecuzione tramite la pagina /installation del dashboard. Non c'è più un blocco WG_PEER_* in customer-config.sh — il peer viene configurato dopo che lo stack è attivo.
Per la configurazione iniziale con l'ambiente HIN Test:
- Avviare lo stack con
./scripts/install.sh. - Aprire il dashboard, seguire
/installationper avviare l'handshake nonce / HIN. - Aprire i log IRISAgent (
docker compose logs irisagent) e copiare la rigawireguard public key:. Inviarla insieme aDEPLOYMENT_NAMEeSERVER_STATIC_IPa Vereign (kalin.canov@vereign.com) in modo che possano registrare il peer sul lato CA. - Dopo la conferma della registrazione da parte di Vereign, completare
/onboardingnel dashboard per emettere il certificato S/MIME.
Per qualsiasi peer aggiuntivo (peer-to-peer tra due Stargate), scambiare chiavi pubbliche + endpoint con l'altra parte e aggiungere la connessione tramite l'API IRISAgent:
curl --location 'localhost:8083/v1/connections' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{
"allowedIps": "<IP del nuovo peer>/32",
"description": "<breve descrizione>",
"endpoint": "<IP del nuovo peer>:19818",
"externalId": [
"<dominio del nuovo peer>"
],
"name": "<Nome del nuovo peer>",
"presharedKey": "",
"publicKey": "<chiave pubblica del nuovo peer>",
"status": "completed",
"transport": "tcp",
"wireguardIp": "<IP del nuovo peer>",
"wireguardPort": 10080
}'
Verifica WireGuard¶
Controllare l'interfaccia WireGuard di IRISAgent
Controllare la connessione nel database
docker exec stargate-postgres psql -U postgres -d irisagent \
-c "SELECT connection_id, name, endpoint, wireguard_ip, transport, status FROM connections;"
Controllare gli ID esterni della connessione (utilizzati per il routing)
docker exec stargate-postgres psql -U postgres -d irisagent \
-c "SELECT connection_id, external_id FROM connection_external_ids;"
Testare la connettività WireGuard (controllare lo stato del tunnel dall'host)
Controllare i log IRISAgent per l'attività del tunnel
Risoluzione dei problemi WireGuard¶
Nessuna interfaccia WireGuard:
- Controllare i log IRISAgent:
docker logs stargate-irisagent - Verificare che
WG_LOCAL_IPsia impostato in.env(auto-derivato daSERVER_STATIC_IP— dovrebbe essere l'IP pubblico statico di questo server)
Peer non raggiungibile:
- Verificare che l'endpoint remoto sia accessibile:
nc -zv <host_endpoint> <porta_endpoint> - Controllare che il firewall consenta la porta TCP+UDP 19818
- Verificare che le chiavi pubbliche corrispondano su entrambe le estremità
- Se TCP ha problemi, provare a impostare
WG_TRANSPORT_MODE="udp"in customer-config.sh
Connessione non presente nel database:
- Rieseguire la pagina
/installationdel dashboard per ristabilire la connessione peer - Controllare i log irisagent:
docker logs stargate-irisagent
Sincronizzazione delle policy¶
Il servizio policy-sync sincronizza automaticamente le policy OPA/Rego da un repository Git al database PostgreSQL.
Come funziona Policy Sync¶
block
columns 8
A:2 space B:2 space C:2
A["Repository Git
policies/
alpha/
outbound/
..."]
A-->B
B["policy-sync:
- Clone/Pull repo
- Parse .rego files
- Upsert to database
- Runs every 1h"]
B-->C
C["PostgreSQL
- policy database
- policies table"] Configurazione di Policy Sync¶
Impostazioni in customer-config.sh:
## Repository Git contenente le policy (preconfigurato con le policy HIN Stargate)
POLICY_SYNC_REPO_URL="https://github.com/Health-Info-Net-AG/Stargate-policies.git"
## Opzionale: Autenticazione per repo privati
POLICY_SYNC_REPO_USER=""
POLICY_SYNC_REPO_PASS=""
## Opzionale: Branch specifico (predefinito: main)
POLICY_SYNC_REPO_BRANCH=""
## Opzionale: Sottocartella nel repo contenente le policy
POLICY_SYNC_REPO_FOLDER=""
## Intervallo di sincronizzazione (predefinito: 1h)
POLICY_SYNC_INTERVAL="1h"
Verifica di Policy Sync¶
Attivazione manuale¶
Per forzare una sincronizzazione immediata:
Vault¶
Montaggi Vault¶
La porta API/UI di Vault (8200) non è pubblicata sull'host; accedere a Vault tramite la CLI all'interno del container (vedere Operazioni manuali Vault di seguito).
I seguenti motori di segreti KV-v2 vengono creati:
secret-smimekeys-clientsecret-policysecret-irisagentsecret-mxenginesecret-mtaconf
Operazioni manuali Vault¶
Database¶
Database PostgreSQL creati:
smimekeys_clientpolicyirisagentmxengine
Connettersi a PostgreSQL¶
O connettersi esternamente
Policy (Rego)¶
MXEngine utilizza policy OPA/Rego memorizzate in PostgreSQL per determinare la strategia di consegna della posta.
Raccomandato: Utilizzare policy-sync per sincronizzare automaticamente le policy da un repository Git. Vedere la sezione Policy Sync.
Visualizzare la policy corrente¶
Posizione delle policy¶
- Configurazione MXEngine:
POLICY_OUTBOUND: "outbound/delivery" - Database: database
policy, tabellapolicies - Gestito da: servizio
policy-sync(sincronizza dal repository Git)
Log¶
Risoluzione dei problemi¶
Emissione certificato fallita / Tunnel WireGuard non stabilito¶
Questo è il problema più comune dopo l'installazione iniziale. Il certificato S/MIME non può essere emesso perché il tunnel WireGuard verso la CA HIN non è stabilito.
Sintomi:
- La pagina
/onboardingdel dashboard segnala un fallimento di invio del CSR - I log smimekeys-client mostrano:
issue certificate error: certcatunnel: error sending request: irisagent: ... context deadline exceeded
Cause profonde (controllare in ordine):
- Peer non registrato sulla CA HIN - La chiave pubblica WireGuard deve essere registrata sul lato HIN. Fornire a HIN:
Insieme a DEPLOYMENT_NAME, SERVER_STATIC_IP e WG_INTERFACE_PORT (se modificato da 19818).
-
Firewall che blocca la porta 19818 - Assicurarsi che
19818/TCPsia aperto sia in entrata che in uscita sul server Stargate. -
Nome host errato - Se il nome host di Stalwart è ancora impostato sul valore predefinito del modello (
mail.example.com), aggiornarlo tramite la pagina/maildel dashboard.
Dopo la risoluzione del problema:
Riaprire la pagina /onboarding del dashboard per rigenerare il CSR e inviarlo nuovamente attraverso il tunnel ora attivo.
Vedere Passo 5: Registrazione del peer WireGuard per il processo completo.
Vault è congelato dopo il riavvio¶
Eseguire lo script di avvio che gestisce lo scongelamento:
Impossibile scaricare le immagini¶
Accedere al registry:
Il servizio non si avvia¶
Controllare i log:
Reimpostare tutto¶
Warning
Questi comandi CANCELLANO TUTTI I DATI - usare con cautela!
È possibile ripristinare i dati solo se si eseguono operazioni di backup prima e si salva il backup in un luogo sicuro.
Struttura dei file¶
stargate/
├── backups/ # Backup completi (gitignorato)
│ └── *.tar.gz
├── config
│ ├── apisix
│ │ ├── apisix.yaml.template
│ │ ├── config.yaml
│ │ └── generated
│ │ └── apisix.yaml
│ ├── keycloak
│ │ ├── generated
│ │ └── realm-stargate.json
│ ├── nats
│ │ └── nats.conf
│ ├── nginx
│ │ ├── dashboard.conf
│ │ └── keycloak.conf
│ ├── alloy
│ │ └── config.alloy # Configurazione invio log Alloy
│ └── vault
│ └── vault.hcl # Configurazione Vault
├── customer-config-prod.example.sh # Modello di configurazione (copiare in customer-config.sh)
├── customer-config.sh # Impostazioni specifiche del cliente (copiate dal modello)
├── docker-compose.yml # File compose principale
├── .env # Variabili d'ambiente (generate da install.sh)
├── init
│ └── postgres
│ └── 01-create-databases.sql
├── scripts
│ ├── backup.sh # Backup completo (DB, Vault, config, certificati)
│ ├── gather-app-versions.sh # Raccoglie le versioni delle app per le metriche node-exporter
│ ├── health-check.sh # Health check completo di tutti i servizi
│ ├── init-keycloak.sh
│ ├── init-vault.sh # Inizializzazione Vault (utilizzato dal container vault-init)
│ ├── install.sh # Prima installazione (Docker, Vault). La configurazione di dominio/certificato/peer avviene successivamente nel dashboard.
│ ├── purge.sh # Elimina tutti i dati (distruttivo!)
│ ├── restore.sh # Ripristina da archivio di backup
│ ├── send-logs-to-support.sh # Incolla i log online e ottieni un link da fornire al supporto
│ ├── start.sh # Avvia i servizi + scongela Vault
│ ├── stop.sh # Arresta i container (preserva i dati)
│ └── update.sh
└── secrets/ # Creato al primo avvio (gitignorato)
├── vault-keys.json # Chiavi di scongelamento Vault (FARE BACKUP!)
└── signing-key.csr # Richiesta di firma certificato S/MIME
Controlli rapidi di salute e log¶
Eseguire il health check completo
Questo controlla:
- Tutti gli stati dei container (in esecuzione, healthy)
- Endpoint Liveness (smimekeys-client, policy, irisagent, mxengine)
- Stato di scongelamento di Vault
- Connettività PostgreSQL e tutti i 4 database
- Salute di MinIO
- Stato del tunnel WireGuard e handshake dei peer
- Stalwart MTA (in esecuzione, porta 25, porta 10026)
- Endpoint delle metriche Prometheus
- Utilizzo del disco e della memoria
Per l'ispezione manuale dei log:
Controllare i log (ultime 10 righe)
docker logs stargate-smimekeys-client --tail 10
docker logs stargate-policy --tail 10
docker logs stargate-irisagent --tail 10
docker logs stargate-mxengine --tail 10
Seguire i log in tempo reale
Controllare tutti gli stati dei container
Seguire tutti i log dei container in tempo reale
docker ps -a --format '{{.Names}}' | xargs -I {} sh -c 'docker logs --timestamps -f {} 2>&1 | sed "s/^/[{}] /"'
Fornire log al supporto¶
È possibile fornire log al nostro supporto tramite pastebin.hin-infra.ch e il comando CLI:
Caricare i log di tutti i container:
Utilizzare il nostro script:
O eseguire manualmente:
docker ps -a --format '{{.Names}}' | xargs -I {} sh -c 'docker logs --timestamps {} 2>&1 | sed "s/^/[{}] /"' | curl https://pastebin.hin-infra.ch/ --data-binary @-
Tip
Questa operazione può raggiungere i nostri limiti di upload - 20 Mb.
Utilizzare il nostro script:
O eseguire manualmente:
Questo è il valore predefinito
--tail 500 è il valore predefinito del nostro script, ma è comunque possibile fornirlo.
Utilizzare il nostro script:
O eseguire manualmente:
Caricare i log di container specifici:
Tip
Questa operazione può raggiungere i nostri limiti di upload - 20 Mb. Se ciò accade, provare a ridurre la quantità di log impostando un limite di tempo o un numero di righe.
Dopo di che, si riceverà un link unico nel formato https://pastebin.hin-infra.ch/<20 simboli> da fornire al supporto / ticket.
Warning
La scadenza è impostata a 30 giorni. Se alcune parti dei log o i log stessi devono essere conservati per un periodo più lungo, assicurarsi di conservarne una copia.