Indice del diarioDockup / nota dal campo
Note / self-host-anythingllm

Come fare self-hosting di AnythingLLM nel 2026: documenti, embedding e persistenza

Fai self-hosting di AnythingLLM con porte corrette, storage persistente, HTTPS, secrets, backup e verifiche degli upgrade. Scopri come risolvere il problema del mount dello storage mancante.

Un container AnythingLLM può risultare operativo mentre il compito che interessa agli utenti non funziona. Con AnythingLLM, questo problema nascosto è solitamente dovuto all’assenza del mount dello storage oppure al cambiamento del modello di embedding dopo l’indicizzazione. Questa guida considera come acceptance test la sequenza “acquisire un documento, attendere l’embedding, porre una domanda la cui risposta dipende da quel documento e verificare il chunk della fonte citata” e costruisce il deployment a ritroso partendo da questo risultato.

AnythingLLM ha un ruolo specifico nello stack: offrire chat sui documenti e retrieval senza dover creare una pipeline manualmente. La domanda in produzione non è quindi se la porta 3001 risponde una volta, ma se state, dipendenze e indirizzo pubblico continuano a essere coerenti dopo un riavvio, un aggiornamento e un ripristino.

Porte, processi e servizi privati

Un diagramma utile di AnythingLLM mostra la route pubblica, la porta privata 3001, il confine dello state e ogni requisito di supporto. Indica quali frecce trasportano credenziali e quali rappresentano normale traffico utente. Il network contract di AnythingLLM richiede un provider di embedding, un provider LLM e storage sufficiente per i documenti. Mantieni gli endpoint privati su DNS interno, consenti solo le chiamate outbound necessarie e assegna ad AnythingLLM una service credential con scope limitato.

Dimostra il diagramma con un’azione reale: acquisisci un documento, attendi l’embedding, poni una domanda la cui risposta dipende da quel documento e verifica il chunk della fonte citata. I principali punti di pressione saranno probabilmente il parsing dei documenti, l’embedding throughput, le dimensioni del vector store e il contesto inviato al modello selezionato; monitora questo percorso invece di trattare tutte le richieste HTTP allo stesso modo.

Rendi misurabile il recovery di AnythingLLM

Fai l’inventario di ogni artifact persistente: documenti, indici vettoriali, workspace e impostazioni dell’applicazione. Esegui il mount di /app/server/storage prima del bootstrap, scrivi dati di esempio innocui e sostituisci il container per dimostrare che quel percorso è effettivamente persistente. Includi anche la configurazione che modifica il modo in cui i dati archiviati vengono interpretati, non soltanto la directory più grande.

Imposta una retention policy, copia i backup fuori dall’host ed esegui un restore in un ambiente clean-room. Il drill di AnythingLLM è completo quando documenti, embedding, appartenenza ai workspace e impostazioni dei provider vengono ripristinati insieme e consentono di rispondere alla stessa domanda basata sulle evidenze. Se i snapshot fanno parte del piano, usa le indicazioni su PITR e snapshot per documentare ciò che ogni meccanismo è in grado di recuperare.

Scegli il trust boundary di AnythingLLM

Dopo il primo login, verifica cosa possono fare rispettivamente un visitatore anonimo, un utente normale e un amministratore. Il problema da evitare con AnythingLLM è considerare il login al workspace un sostituto dell’isolamento delle chiavi dei provider. La policy prevista consiste nel limitare i membri ai workspace e mantenere sul server le credenziali LLM, di embedding e del vector database.

Genera JWT_SECRET come valore casuale lungo; la sua rotazione invalida normalmente sessioni o token, quindi pianifica l’impatto sugli utenti invece di definirla una migrazione della cifratura. Mantieni separati gli account delle dipendenze da quelli delle persone, nega quando possibile l’egress non utilizzato e limita il lavoro influenzato dal parsing dei documenti, dall’embedding throughput, dalle dimensioni del vector store e dal contesto inviato al modello selezionato.

Cosa deve superare i test prima che arrivino dati AnythingLLM reali

Il release record di AnythingLLM deve contenere dati concreti, non un semplice “sembra tutto a posto”. Salva il digest dell’immagine selezionata, il checksum della configurazione, l’hostname pubblico e un risultato con timestamp per questa sequenza: acquisire un documento, attendere l’embedding, porre una domanda la cui risposta dipende da quel documento e verificare il chunk della fonte citata. Usa dati di esempio non di produzione, così il controllo può essere eseguito dopo ogni deployment.

Dimostra separatamente due eventi del lifecycle. La sostituzione di un container deve preservare il normale funzionamento; un recovery pulito deve dimostrare che documenti, embedding, appartenenza ai workspace e impostazioni dei provider vengono ripristinati insieme e consentono di rispondere alla stessa domanda basata sulle evidenze. Mentre esegui i controlli, misura il parsing dei documenti, l’embedding throughput, le dimensioni del vector store e il contesto inviato al modello selezionato, quindi conserva il risultato come envelope atteso per questa versione.

Verifica anche una condizione negata o non valida: nega temporaneamente all’identità di test l’accesso a un provider di embedding, a un provider LLM e allo storage sufficiente per i documenti. AnythingLLM dovrebbe fallire in modo diagnosticabile senza sovrascrivere lo state integro. Ripristina la condizione valida, esegui nuovamente il test con i dati di esempio e allega i log pertinenti con i dati sensibili oscurati. Questi artifact forniscono elementi concreti per una futura decisione di rollback.

Crea un container AnythingLLM sostituibile

Un comando minimale è utile quando mostra cosa verrà poi gestito dalla piattaforma.

docker run -d \
  --name anythingllm \
  --restart unless-stopped \
  -p 127.0.0.1:3001:3001 \
  -v anythingllm-data:/app/server/storage \
  -e JWT_SECRET=replace-with-a-long-random-value \
  mintplexlabs/anythingllm:latest

In questo modo la porta 3001 resta privata sull’host e ogni percorso necessario è esplicito. Aggiungi le connection settings verificate per un provider di embedding, un provider LLM e storage sufficiente per i documenti; usa nomi privati per i servizi privati. Verifica l’avvio sia tramite i log sia con la prova specifica dell’applicazione: acquisisci un documento, attendi l’embedding, poni una domanda la cui risposta dipende da quel documento e verifica il chunk della fonte citata. Una volta verificato il comportamento, fissa la versione dell’immagine affinché una sostituzione ordinaria non lo modifichi senza preavviso.

Testa AnythingLLM dall’esterno del server

Evita origin pubbliche temporanee e permanenti per AnythingLLM. Usa invece l’origin HTTPS esterna per l’accesso tramite browser e API, punta il nome DNS scelto alla route della piattaforma e fai proxy soltanto verso la porta 3001.

Esegui questa azione dall’esterno dell’host: acquisisci un documento, attendi l’embedding, poni una domanda la cui risposta dipende da quel documento e verifica il chunk della fonte citata. Se l’ingress non funziona, la guida alla risoluzione dei problemi 502 tratta gli errori relativi a porte e listener. Se AnythingLLM riceve la richiesta ma il mount dello storage manca oppure il modello di embedding è cambiato dopo l’indicizzazione, le evidenze ora indicano un problema oltre il proxy.

Failure drill per AnythingLLM

Costruisci dashboard incentrate sul parsing dei documenti, sull’embedding throughput, sulle dimensioni del vector store e sul contesto inviato al modello selezionato. Un grafico della CPU privo del contesto relativo al workload non può spiegare perché AnythingLLM è lento. Aggiungi un controllo sintetico o schedulato che provi ad acquisire un documento, attendere l’embedding, porre una domanda la cui risposta dipende da quel documento e verificare il chunk della fonte citata usando dati di test innocui.

Prima dell’upgrade, considera questo rischio specifico dell’applicazione: la modifica di un modello di embedding può richiedere una nuova indicizzazione, mentre le release dell’applicazione possono migrare i metadata dei workspace e dei vector. Ripristina un backup recente in un deployment isolato, esegui lì le migrazioni e confronta il comportamento. Se il mount dello storage manca oppure il modello di embedding è cambiato dopo l’indicizzazione, esamina il confine coinvolto — origin pubblico, storage o dipendenza — prima di modificare impostazioni non correlate.

Cosa dovrebbe automatizzare Dockup per AnythingLLM

Per AnythingLLM, Dockup può creare la route e il certificato TLS, preservare i mount, distribuire i secrets e collocare un provider di embedding, un provider LLM e storage sufficiente per i documenti su una rete privata, eseguendo il deployment su Dockup o su server collegati.

Il release gate resta comunque la transazione concreta di AnythingLLM: acquisire un documento, attendere l’embedding, porre una domanda la cui risposta dipende da quel documento e verificare il chunk della fonte citata. Verifica anche la condizione di restore: documenti, embedding, appartenenza ai workspace e impostazioni dei provider devono essere ripristinati insieme e consentire di rispondere alla stessa domanda basata sulle evidenze. Questi due controlli mostrano se il deployment funziona e se può essere recuperato.

Domande frequenti

Di cosa ha bisogno AnythingLLM per un deployment in produzione?

Instrada il container AnythingLLM sulla porta 3001 attraverso un’unica origin HTTPS. Il requisito di rete di supporto consiste in un provider di embedding, un provider LLM e storage sufficiente per i documenti. Non considerare AnythingLLM pronto finché non puoi acquisire un documento, attendere l’embedding, porre una domanda la cui risposta dipende da quel documento e verificare il chunk della fonte citata.

Quali dati di AnythingLLM devono essere inclusi in un backup?

Rendi persistente /app/server/storage e includi documenti, indici vettoriali, workspace e impostazioni dell’applicazione nello stesso recovery manifest. Un restore pulito di AnythingLLM è riuscito solo quando documenti, embedding, appartenenza ai workspace e impostazioni dei provider vengono ripristinati insieme e consentono di rispondere alla stessa domanda basata sulle evidenze.

AnythingLLM richiede HTTPS dietro un reverse proxy?

Usa HTTPS per l’origin pubblico di AnythingLLM e mantieni la porta 3001 sulla route interna. Applica correttamente l’impostazione di AnythingLLM: usa l’origin HTTPS esterna per l’accesso tramite browser e API. Per AnythingLLM, HTTPS protegge le credenziali o i contenuti degli utenti durante il transito e mantiene coerente il comportamento del client sensibile all’origin.

Come deve essere testato un upgrade di AnythingLLM?

Ripristina lo state corrente di AnythingLLM in un deployment isolato, applica la versione candidata e ripeti la relativa acceptance transaction. Presta particolare attenzione perché la modifica di un modello di embedding può richiedere una nuova indicizzazione, mentre le release dell’applicazione possono migrare i metadata dei workspace e dei vector. Conserva l’immagine precedente di AnythingLLM finché non avrai compreso i confini della migrazione dei dati e del rollback.