19 KiB
Installazione standalone guidata
Questa è la procedura per installare THothII da zero. THothII riceve una domanda in linguaggio naturale, interroga in sola lettura un database aziendale e accompagna l’utente nella revisione della SQL risultante. Il core, il catalogo PostgreSQL, Qdrant, il servizio di embedding e Pi vengono eseguiti in Docker; sul computer non servono Node.js, Python o Pi.
Preparazione e verifica dei workspace prima dello stack
I primi due passi del nuovo percorso funzionano senza Docker, Node, Python, Pi o
un file di installazione. Usare il bundle della propria piattaforma con entrambi
gli eseguibili tht e tht-workspace-documents nella stessa cartella (.exe su
Windows). Aggiungere la cartella al PATH, oppure usare il percorso completo.
Il vecchio pacchetto con il solo tht non contiene questa capacità. Il bundle è
attualmente producibile dal manutentore; pubblicazione degli asset e immagini
Docker Hub appartengono a una fase successiva. Il resto della guida descrive ancora
il percorso di installazione esistente.
-
Scegliere una cartella nuova, esterna all'applicazione, con padre già esistente:
tht workspace prepare --directory ./miei-workspace --id pratica --name "Pratica" --language itSono creati
thoth-workspaces.yaml,pratica/workspace.yamleworkspace-docs/pratica/README.md. Una destinazione esistente, anche vuota, viene rifiutata. Nessun servizio viene avviato; Git non viene inizializzato, nessun remoto viene contattato. I database di esempio restano un sottoprogetto differito. Per un repository fornito dal curatore, usare una copia locale separata e passare al punto 3: è sufficiente accesso in lettura all'origine. -
Modificare con calma catalogo (schema v1) e descrittore workspace (schema v4). Mantenere uguali
id,namee l'eventualedescriptionnei due file; l'id deve coincidere con la cartella. Ogni cartella alla radice deve corrispondere a un workspace elencato, salvoworkspace-docse la directory locale.git. Connessioni, schema e credenziali dei database appartengono al Metadata Catalog dell'installazione. Le Evidence sono facoltative e inizialmente assenti. -
Verificare, correggere il documento/campo indicato e ripetere:
tht workspace validate --directory ./miei-workspace tht workspace validate --directory ./miei-workspace --jsonSu PowerShell usare gli stessi argomenti, ad esempio
C:\ThothII\bin\tht.exe workspace validate --directory C:\ThothII\miei-workspace. Il controllo non modifica file. Rifiuta YAML multipli o malformati, chiavi/id duplicati, campi sconosciuti, incoerenze tra catalogo, cartelle e descrittori, riferimenti locali mancanti e link simbolici. Correggere il primo errore del documento e ripetere per vedere eventuali errori successivi.
Evidence absent è valido. Per filesystem si verificano directory, accessibilità e
riferimenti letterali; per le selezioni Markdown standard anche i limiti dichiarati.
Evidence v2 richiede curated/ e frontmatter con sintassi YAML valida. I limiti locali
sono 1 MiB per documento letto e 100.000 elementi per albero Evidence. Pattern
arbitrari, contratto completo delle unità curate, provenienza, accesso HTTP/S3 e
indicizzazione restano controlli runtime espliciti. Vedere la guida Evidence.
Il JSON espone schema_version, scope: local-documents, ok, workspaces, issues
e deferred_checks. I problemi riportano documento, campo, codice, correzione e,
quando disponibile, riga YAML, senza stampare i valori del documento. Exit status:
0 successo locale, 1 documenti/accesso/bundle da correggere, 2 argomenti errati.
Il successo locale non certifica verità semantica, connettività o readiness. La
revisione Git attivata in seguito deve contenere i documenti verificati; il comando
non pubblica file non committati o directory vuote.
Predisporre e verificare i documenti applicativi
Dopo la verifica dei workspace, creare una cartella locale esterna al loro repository:
tht installation prepare --directory ./mia-installazione
Il comando crea file privati commentati: thothii-installation.yaml, operator.env,
database-bootstrap.yaml e README.md. La cartella deve essere nuova e il padre
deve esistere. Non avvia servizi e non genera implicitamente password.
-
Nel descrittore, scegliere modelli e provider. Il template propone
openai/gpt-4.1-miniper l'interazione eollama/qwen3-embedding:0.6bcon 1024 dimensioni per l'embedding. Sono valori modificabili, non una selezione richiesta durante il setup.modelCatalog.defaults.interactiondeve essere utilizzabile nelle sessioni e anche nella generazione metadati, se quest'ultima è configurata. Il template omette la generazione metadati, che è facoltativa. Consultare la configurazione dei modelli per provider personalizzati. -
Sostituire il remoto Git sia nel descrittore sia in
operator.env; mantenere coerenti branch e trasporto. I percorsi sono assoluti e riferiti a questa macchina.operator.envaccetta una sola assegnazione letteraleKEY=valueper riga, senza duplicati o interpolazioni shell. Le credenziali restano nei file referenziati. -
Compilare
database-bootstrap.yaml: una voce per ciascun workspace, senza duplicati. Questo esempio mostra il contratto completo di un collegamento diretto:schemaVersion: 1 databases: - workspaceId: pratica engine: postgres databaseName: vendite schema: public binding: transport: postgres_direct host: db.intranet port: 5432 username: thoth_reader secretFiles: password: /percorso/privato/mia-installazione/secrets/database-passwordUsare le credenziali di un utente DWH in sola lettura. Per
rest_api, il binding richiedebaseUrl,restPatherestAuth(none,bearer,x-api-key); quando serve autenticazione, aggiungeresecretFiles.apiKey.ssh_tunnelrichiedeusername,sshHost,sshPort,sshUsername,sshTargetHost,sshTargetPorte i filepassword,sshPrivateKey,sshKnownHosts; abilita diagnostica Catalog, non sessioni NL→SQL. Sono facoltativitlsCaesshPrivateKeyPassphrase. Le Evidence HTTP firmate richiedonoevidenceSecretFilescon chiaveevidence.signed_urls; S3 con credenziali statiche richiedeevidence.access_keyeevidence.secret_key, conevidence.session_tokenfacoltativo. Tutti i valori sono percorsi di file privati. I workspace rimangono nello schema v4: il bootstrap è un input iniziale, non un secondo Catalog runtime. -
Generare esplicitamente le credenziali tecniche nel layout standard:
tht installation credentials --directory ./mia-installazioneSono creati password casuali separate per Catalog runtime/migrator e amministratore, il relativo
auth/auth.yamlconauth/users.yaml, un templatesecrets/secrets.envesecrets/pi-auth.json. I file esistenti vengono conservati; se non validi, il comando si ferma. L'amministratore iniziale èadmin, la password è nel file privatosecrets/admin-passworde non viene stampata. Il default è autenticazione locale con URL pubblicohttp://localhost:8080: verificare e, se necessario, modificareauth/auth.yamlprima del controllo. Questo incremento non valida il bootstrap OIDC del percorso esistente. -
Inserire la chiave del provider in
secrets/secrets.enve creare il file della password DWH. Per HTTPS Git fornire i file referenziati per credenziali e CA: credenziali vuote sono ammesse per un remoto pubblico, la CA deve essere disponibile. Per SSH fornire chiave e known_hosts, scegliendo il relativo override nel descrittore. I providerpi_authrichiedono credenziali Pi già preparate. Conservare tutti questi file fuori dal repository workspace e proteggere l'accesso al solo utente installatore (0600 su Unix, ACL equivalenti su Windows). Non committarli. -
Verificare e ripetere dopo ogni correzione:
tht --installation /percorso/assoluto/mia-installazione/thothii-installation.yaml installation validate --workspaces /percorso/assoluto/miei-workspace --jsonIl bootstrap viene cercato accanto al descrittore;
--bootstrap PERCORSOne seleziona uno diverso. Il controllo non cambia documenti, non genera proiezioni, non usa la rete e non scrive database. Rifiuta placeholder, incoerenze, file mancanti/non privati e segreti situati nel repository workspace. Il report indica documento, campo e correzione senza valori riservati. Exit status: 0 successo locale, 1 correzioni necessarie, 2 argomenti errati.
Gli asset Compose standard del rilascio possono ancora mancare in questa fase; gli override personalizzati devono già esistere. Il report distingue i controlli differiti: asset del rilascio, connettività esterna, import Catalog e readiness. Un esito positivo prepara il successivo preflight: non autorizza a saltare tali controlli e non equivale a un'installazione completata.
Prima di iniziare: i due repository
Servono due repository distinti:
- il repository dell’applicazione, che l’utente clona: https://git.tylconsulting.it/mptyl/ThothII.git;
- il repository dei workspace, indicato dal curatore/installatore. Non è il repository di THothII e non va clonato manualmente nella directory dell’applicazione.
Il repository workspace contiene il catalogo e una directory per ogni workspace, normalmente:
thoth-workspaces.yaml
<workspace-id>/workspace.yaml
<workspace-id>/evidence/** # se il workspace dichiara Evidence
Il file workspace.yaml descrive identità, lingua e, opzionalmente, la sorgente Evidence. Per scelta architetturale non contiene password del database. L’identità del database, il trasporto (PostgreSQL, REST o tunnel), username, password, token e certificati sono configurazione locale dell’installazione, conservata cifrata dal Catalog. Questo evita di committare credenziali nel repository workspace.
0. Prerequisiti della macchina
Windows
- Windows 10/11 con Docker Desktop avviato e backend WSL2 abilitato.
- Ubuntu in WSL2, con integrazione Docker Desktop abilitata per quella distribuzione.
- Git, Bash, curl, OpenSSL e shasum nella distribuzione WSL2.
- Non installare Node.js, Python o Pi sull’host per questa procedura.
In PowerShell, se WSL2 non esiste ancora, usare la procedura aziendale oppure:
wsl --install -d Ubuntu
Eseguire poi tutti i comandi dentro Ubuntu WSL2, in una directory Linux come $HOME/src, non sotto /mnt/c. Il percorso nativo scripts/install-tht.ps1 esiste per scenari PowerShell avanzati; per la prova riproducibile usare WSL2.
macOS
- Docker Desktop installato, avviato e con alcuni GB liberi per immagini e modello di embedding.
- Git, Bash, curl, OpenSSL e shasum.
- Sono supportati Mac Intel e Apple Silicon se Docker Desktop supporta l’architettura restituita dal Docker server.
- Non installare Node.js, Python o Pi sull’host per questa procedura.
Linux, incluso Omarchy
- Git, Bash, curl, OpenSSL e shasum.
- Docker Engine e il plugin Docker Compose v2. Su Omarchy verificare prima:
command -v docker
docker compose version
docker info
Se Docker manca, installare Docker e Compose con il gestore pacchetti/procedura approvata dalla distribuzione, poi avviare il servizio. Su una distribuzione Arch-like il percorso tipico è:
sudo pacman -S docker docker-compose
sudo systemctl enable --now docker
sudo usermod -aG docker "$USER"
Dopo l’aggiunta al gruppo aprire una nuova sessione e ripetere docker info. Non installare Node.js, Python o Pi sull’host: sono dentro le immagini Docker.
Su tutti i sistemi il controllo finale è:
bash scripts/check-standalone-prerequisites.sh
docker version --format '{{.Server.Arch}}'
L’architettura deve essere amd64, x86_64, arm64 o aarch64. Servono inoltre accesso al repository Gitea dell’applicazione, URL/branch e credenziali del repository workspace, raggiungibilità dal container degli endpoint DWH/LLM e le credenziali, token o certificati associati ai database.
1. Cosa clonare
Clonare solo l’applicazione:
mkdir -p "$HOME/src"
cd "$HOME/src"
git clone https://git.tylconsulting.it/mptyl/ThothII.git
cd ThothII
git rev-parse --short HEAD
Annotare la revisione. Il repository workspace verrà scaricato da tht setup --complete dentro un volume Docker persistente, usando URL, branch e trasporto indicati durante il setup.
2. Installare il comando terminale
Dal root del clone:
bash scripts/check-standalone-prerequisites.sh
mkdir -p "$HOME/.local/bin"
THT_INSTALL_DIRECTORY="$HOME/.local/bin" bash scripts/install-tht.sh
export PATH="$HOME/.local/bin:$PATH"
tht version
Il comando tht è l’unico componente nativo da installare. Costruisce il binario con Docker e orchestra Compose; non è un secondo runtime dell’applicazione.
3. Preparare pochi segreti e avviare il setup completo
La prima esecuzione crea i placeholder protetti sotto deploy/local/secrets/ e si ferma se manca una credenziale necessaria. Compilare i file indicati e rilanciare lo stesso comando: i file di configurazione già compatibili vengono riutilizzati.
tht setup --complete --profile local --shell-mode full --shell-default-locale en
Durante il setup servono solo le informazioni operative che il computer non può conoscere:
| Richiesta | Cosa inserire |
|---|---|
| Repository workspace | URL del repository dati/configurazione, non ThothII.git |
| Branch | normalmente main |
| Accesso | ssh con chiave e known_hosts, oppure https con credential file e CA |
| DWH/LLM URL | endpoint senza token nella URL |
| Login locale | utente e password iniziale richiesti dal prompt |
Il setup crea automaticamente le password casuali del Catalog e le scrive in operator.env come percorsi, non come valori. Esegue docker compose config, costruisce le immagini, avvia il Catalog, esegue catalog-migrate, avvia lo stack e importa il repository workspace. L’import attiva anche l’Evidence dichiarata: almeno i file source presenti nel workspace vengono materializzati nel registro locale.
Il file da compilare
Il file principale è:
deploy/local/secrets/thothii.secrets
Inserire solo righe NOME=VALORE necessarie al modelCatalog e agli adapter, per esempio una API key LLM (DEEPSEEK_API_KEY, OPENAI_API_KEY o quella dichiarata dal catalogo) ed eventualmente THT_DWH_API_KEY. I nomi ammessi sono documentati in deploy/secrets/README.md. Non mettere token nelle URL, nel repository o nei comandi.
Due precisazioni evitano gli errori più comuni:
- se il catalogo usa pi_auth, il token LLM va nel file Pi pi-auth.json creato dal setup; {} è solo un placeholder e non abilita alcun modello;
- le credenziali specifiche di un database workspace (password PostgreSQL, API token REST, chiave SSH del tunnel, known_hosts, CA) non vanno nel repository workspace: si inseriscono per workspace in Database Management, che le conserva nel Catalog cifrato. Il workspace indica database/schema e trasporto; l’installatore deve ottenere dal proprietario il valore corretto.
Per un repository workspace privato sono inoltre indispensabili i file Git richiesti dal trasporto: una chiave SSH e known_hosts, oppure credential file HTTPS e CA. Sono file di trasporto, non un secondo bundle da committare. Per ridurre i file da compilare, usare SSH con una deploy key già autorizzata.
4. Controlli automatici e test da terminale
Il setup verifica file, permessi, descriptor, Compose, Docker, autenticazione, servizi, Pi e workspace. Dopo l’avvio usare questi comandi in qualunque momento:
INSTALLATION="$PWD/deploy/local/thothii-installation.yaml"
tht --installation "$INSTALLATION" doctor --json
tht --installation "$INSTALLATION" workspace pull --json
tht --installation "$INSTALLATION" workspace test --json
workspace test prova, per ogni workspace attivo, il binding del database e le credenziali, Evidence, Qdrant e il servizio embedding. Restituisce exit code diverso da zero se manca il binding del database o una connessione non è utilizzabile. Prima di eseguirlo l’installatore deve aver configurato il database in Database Management: il workspace repository da solo non può contenere la password.
Per una verifica generale del core, doctor --json è il test ripetibile e non distruttivo. Il test funzionale finale deve inoltre aprire http://127.0.0.1:8080, autenticarsi e completare una domanda reale fino alla SQL finale.
Attività che può svolgere solo l’installatore
La procedura automatizza il bootstrap, non può inventare decisioni o autorizzazioni aziendali. L’installatore deve completare e registrare:
- quali LLM sono utilizzabili, il relativo modelCatalog e le API key collegate; poi eseguire tht pi test e tht doctor;
- per ogni database: configurazione, test connessione, sincronizzazione dello schema e generazione delle descrizioni;
- consolidamento umano delle descrizioni generate;
- generazione delle entry semantiche in Qdrant tramite workspace preprocess run;
- generazione delle FK suggerite dal naming, come complemento alle FK lette dallo schema, revisione umana delle proposte e caricamento delle relazioni approvate in Qdrant;
- verifica periodica con tht doctor --json e tht workspace test --json;
- una domanda reale completata con successo, senza errori di connessione o modello.
La configurazione è dichiarata completa solo quando tutti i punti applicabili sono stati eseguiti, le decisioni sono state registrate e i due test terminali sono verdi. Il core è dichiarato usabile solo dopo la domanda reale, non perché il frontend risponde a /health.
Gate A e Gate B
Gate A — piattaforma
uname -a
docker version --format '{{.Server.Version}} {{.Server.Arch}}'
tht version
bash scripts/check-standalone-prerequisites.sh
bash scripts/verify-standalone-install.sh "$INSTALLATION"
Gate B — usabilità
tht --installation "$INSTALLATION" doctor --json
tht --installation "$INSTALLATION" workspace test --json
curl --fail --silent --show-error http://127.0.0.1:8080/health
Poi eseguire una domanda reale e fermare/riavviare con tht stop e tht start. Non usare docker compose down --volumes: cancella Catalog, sessioni, Qdrant e il modello embedding.
Diagnosi rapida
| Sintomo | Azione |
|---|---|
| Docker Engine is not reachable | avviare Docker Desktop o systemctl e ripetere docker info |
| Omarchy non trova docker | installare Docker/Compose, abilitare il servizio e riaprire la sessione |
| Windows vede Docker ma Bash fallisce | usare Ubuntu WSL2 e abilitarne l’integrazione in Docker Desktop |
| pull workspace fallisce | controllare URL, branch, chiave/credential file e known_hosts dal container |
| workspace test segnala binding mancante | configurare database, token/password e CA in Database Management |
| Pi non è pronto | compilare pi-auth.json o la chiave dichiarata dal modelCatalog, poi eseguire tht pi test |
Documenti collegati
- Installazione e primo avvio
- Operazioni sui workspace
- Database Management
- Configurazione dei modelli
- deploy/secrets/README.md
La pubblicazione di immagini su Docker Hub e gli installer nativi DMG/MSI/AppImage restano attività successive: questa procedura parte dal clone Gitea e non richiede immagini Docker Hub pre-pubblicate.