Pose una domanda e ottieni un riassunto del documento facendo riferimento a questa pagina e al provider AI di tua scelta
Questo documento non è aggiornato, la versione base è stata aggiornata il 23 agosto 2026.
Vai alla documentazione in ingleseCronologia delle versioni
Il contenuto di questa pagina è stato tradotto con un'IA.
Vedi l'ultima versione del contenuto originale in ingleseSe hai un’idea per migliorare questa documentazione, non esitare a contribuire inviando una pull request su GitHub.
Collegamento GitHub alla documentazioneCopia il Markdown del documento nella porta-documenti
Self-Hosting Intlayer
Intlayer può essere eseguito interamente sulla tua infrastruttura — non è richiesto alcun account Intlayer Cloud. Un singolo comando avvia uno stack pronto per la produzione:
Un comando installa tutto:
Copiare il codice nella clipboard
L'installer scarica un docker-compose.yml e un .env, genera automaticamente i segreti richiesti e avvia tutti i container con docker compose up -d.
L'unica dipendenza esterna è MongoDB: il backend si connette a un cluster MongoDB Atlas, che fornisci tu. Tutto il resto viene eseguito all'interno del container.
Indice dei Contenuti
Architettura
Copiare il codice nella clipboard
Chromium (utilizzato per la generazione di screenshot con Puppeteer) è incluso nell'immagine del backend — non è necessario un container separato.
Prerequisiti
- Docker ≥ 24 e Docker Compose ≥ v2. Se uno dei due manca, l'installer stampa il link di installazione ed esce.
- Porte
3000,3100,8025,9000e9001disponibili sull'host. - Un host Linux o macOS (o WSL2 su Windows).
Tutto il resto — Bun, Redis, MinIO, Chromium — è incluso nell'immagine.
Quick start
1. Eseguire l'installer
Copiare il codice nella clipboard
Verifica che Docker sia installato e in esecuzione, scrive ./intlayer.env con BETTER_AUTH_SECRET e S3_SECRET_ACCESS_KEY già generati, e scarica l'immagine. Non avvia il container — il backend non può avviarsi senza le credenziali del database.
Rieseguire l'installer è sicuro: un intlayer.env esistente non viene mai sovrascritto, quindi funge anche da percorso di aggiornamento.
2. Compila le tue credenziali
Apri intlayer.env e completa i valori contrassegnati come TODO:
Copiare il codice nella clipboard
Il file contiene anche blocchi commentati per le funzionalità opzionali — SMTP mailer, OPENAI_API_KEY e i provider OAuth. Decommentali secondo le tue necessità.
Il file viene letto dadocker run --env-file, che non rimuove le virgolette e tratta tutto ciò che segue=come valore. Scrivi valori senza virgolette e mantieni i commenti su righe separate.
3. Avvia il container
Questo è il comando che l'installer stampa quando termina:
Copiare il codice nella clipboard
Quindi apri http://localhost:3000. Il primo avvio inizializza i datastore, quindi concedi un minuto.
La dashboard è servita su localhost. Vedi Limitazioni — i domini personalizzati non sono supportati dall'immagine pubblicata.
Impostazioni del installer
Il installer legge alcune variabili d'ambiente. Poiché viene piped in sh, passale alla shell piuttosto che a curl:
Copiare il codice nella clipboard
Apri la tabella in una finestra modale per visualizzare tutti i dati in modo chiaro
| Variable | Default | Description |
|---|---|---|
INTLAYER_IMAGE | ghcr.io/aymericzip/intlayer-selfhost:latest | Immagine da scaricare |
INTLAYER_ENV_FILE | ./intlayer.env | Dove scrivere il file env |
INTLAYER_CONTAINER_NAME | intlayer | Nome del container |
INTLAYER_DATA_VOLUME | intlayer-data | Volume denominato montato su /data |
INTLAYER_APP_PORT | 3000 | Porta host per il dashboard |
INTLAYER_API_PORT | 3100 | Porta host per l'API |
INTLAYER_S3_PORT | 9000 | Porta host per l'API S3 MinIO |
INTLAYER_CONSOLE_PORT | 9001 | Porta host per la console MinIO |
Le quattro variabili di porta cambiano solo il lato host del mapping stampato nel comandodocker run. L'immagine pubblicata hahttp://localhost:3000,http://localhost:3100ehttp://localhost:9000compilati nel bundle dashboard al momento della compilazione, quindi rimappare i porta lascia il browser che punta alle porte vecchie. Mantieni i valori predefiniti a meno che non stai costruendo la tua immagine — vedi Limitations.
Avvio rapido
Cosa fa l'installer:
- Verifica che
dockeredocker composesiano presenti. - Scarica
docker-compose.ymle.env.examplein./intlayer/. - Se non esiste un
.env, copia l'esempio e genera segreti casuali perBETTER_AUTH_SECRET,S3_ACCESS_KEY_IDeS3_SECRET_ACCESS_KEYtramiteopenssl rand. - Esegue
docker compose pull+docker compose up -d. - Stampa gli URL: dashboard
:3000, API:3100, interfaccia utente email:8025, console MinIO:9001.
Dopo che lo stack è attivo, apri http://localhost:3000 e crea il tuo primo account.
Servizi
Apri la tabella in una finestra modale per visualizzare tutti i dati in modo chiaro
| Servizio | Immagine | Porta/e host | Scopo |
|---|---|---|---|
| app | built from apps/app/Dockerfile | 3000 | Dashboard TanStack Start (UI del CMS) |
| backend | built from apps/backend/Dockerfile | 3100 | API REST Fastify (endpoint /health) |
| mongo | mongo:7 | internal | Replica set a nodo singolo (rs0) |
| redis | redis:7-alpine | internal | Code di lavoro (BullMQ) e caching (ioredis) |
| minio | minio/minio | 9000 (S3), 9001 (console) | Storage di oggetti compatibile con S3 per avatar e screenshot |
| mailpit | axllent/mailpit | 1025 (SMTP), 8025 (web UI) | Sink di email transazionali locale |
La porta9000di MinIO deve essere raggiungibile dal browser perché gli asset caricati (avatar, screenshot) vengono caricati direttamente daS3_PUBLIC_URL=http://localhost:9000/intlayer.
Variabili d'ambiente
Obbligatorio
Apri la tabella in una finestra modale per visualizzare tutti i dati in modo chiaro
| Variabile | Esempio | Descrizione |
|---|---|---|
DB_ID | intlayer | Utente MongoDB Atlas |
DB_MDP | (la tua password) | Password MongoDB Atlas |
DB_CLUSTER | cluster0.xxxxx.mongodb.net | Host del cluster MongoDB Atlas (utilizzato nell'URI mongodb+srv://) |
BETTER_AUTH_SECRET | (generato) | Secret a 32 byte per la firma delle sessioni |
S3_SECRET_ACCESS_KEY | (generato) | Secret per il MinIO bundle |
RESEND_API_KEY | (la tua chiave) | Email transazionale via Resend. Obbligatorio per la configurazione iniziale a meno che non configuri un mailer SMTP globale (vedi Mailer globale) |
Obbligatorie (generate automaticamente o richieste)
Apri la tabella in una finestra modale per visualizzare tutti i dati in modo chiaro
| Variabile | Esempio | Descrizione |
|---|---|---|
NODE_ENV | production | Ambiente di runtime |
PORT | 3100 | Porta di ascolto del backend |
BACKEND_URL | http://localhost:3100 | URL pubblico dell'API del backend |
APP_URL | http://localhost:3000 | URL pubblico della dashboard |
DOMAIN | localhost | Dominio del cookie |
MONGODB_URI | mongodb://mongo:27017/intlayer?replicaSet=rs0 | URI di connessione completo di MongoDB |
REDIS_URL | redis://redis:6379 | URL di connessione di Redis |
BETTER_AUTH_SECRET | (generated) | Segreto di 32 byte per la firma della sessione |
MAIL_PROVIDER | smtp | Trasporto email: smtp o resend |
MAIL_SMTP_HOST | mailpit | Hostname SMTP (nome del container Mailpit) |
MAIL_SMTP_PORT | 1025 | Porta SMTP |
MAIL_FROM | Intlayer <no-reply@localhost> | Indirizzo del mittente |
S3_ENDPOINT | http://minio:9000 | Endpoint compatibile con S3 |
S3_PUBLIC_URL | http://localhost:9000/intlayer | URL pubblico per il caricamento degli asset del browser |
S3_BUCKET_NAME | intlayer | Nome del bucket |
S3_ACCESS_KEY_ID | (generated) | Chiave di accesso MinIO |
S3_SECRET_ACCESS_KEY | (generated) | Chiave segreta MinIO |
VITE_BACKEND_URL | http://localhost:3100 | URL del backend integrato nella dashboard al momento della compilazione |
VITE_DOMAIN | localhost | Dominio integrato nella dashboard al momento della compilazione |
Opzionali (le funzionalità degradano elegantemente se assenti)
Apri la tabella in una finestra modale per visualizzare tutti i dati in modo chiaro
| Variabile | Funzionalità |
|---|---|
OPENAI_API_KEY | Traduzione assistita da AI e audit del contenuto |
STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_* | Gestione della fatturazione e degli abbonamenti |
RESEND_API_KEY | Email transazionali tramite Resend (sostituisce Mailpit quando impostato) |
GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET | Accesso OAuth di GitHub |
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET | Accesso OAuth di Google |
GITLAB_CLIENT_ID, GITLAB_CLIENT_SECRET | Accesso OAuth di GitLab |
MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRET | Accesso OAuth di Microsoft |
LINKEDIN_CLIENT_ID, LINKEDIN_CLIENT_SECRET | Accesso OAuth di LinkedIn |
ATLASSIAN_CLIENT_ID, ATLASSIAN_CLIENT_SECRET | Accesso OAuth di Atlassian |
Mailer globale
Per impostazione predefinita, tutti i messaggi email transazionali vengono inviati tramite Resend utilizzando RESEND_API_KEY. I deploy self-hosted possono invece instradare ogni email — incluse le email non organizzative come i reset delle password e i magic link — attraverso un mailer globale configurato con variabili di ambiente.
Imposta MAIL_PROVIDER per attivarlo. Quando non impostato, viene utilizzato il mailer predefinito di Resend.
Apri la tabella in una finestra modale per visualizzare tutti i dati in modo chiaro
| Variabile | Esempio | Descrizione |
|---|---|---|
MAIL_PROVIDER | smtp | Trasporto globale: smtp o resend. Lascia non impostato per usare i default |
MAIL_FROM | Intlayer <no-reply@acme.com> | Intestazione del mittente. Accetta un indirizzo bare o il formato Name <email> |
MAIL_SMTP_HOST | smtp.acme.com | Host SMTP (obbligatorio quando MAIL_PROVIDER=smtp) |
MAIL_SMTP_PORT | 587 | Porta SMTP (per impostazione predefinita 587) |
MAIL_SMTP_SECURE | false | TLS implicito. Imposta true per la porta 465 |
MAIL_SMTP_USER | (il tuo utente) | Nome utente SMTP (opzionale; ometti per relay non autenticati) |
MAIL_SMTP_PASSWORD | (la tua password) | Password SMTP |
Precedenza: il mailer personalizzato di un'organizzazione (configurato dal dashboard Organization) ha priorità rispetto al mailer globale, che a sua volta ha priorità rispetto alla chiave Resend predefinita.
Collegamento del tuo progetto Intlayer
Una volta che lo stack è in esecuzione, punta il tuo progetto al backend e alla dashboard self-hosted invece di intlayer.org.
Configurazione del progetto
Copiare il codice nella clipboard
import type { IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
editor: {
clientId: process.env.INTLAYER_CLIENT_ID,
clientSecret: process.env.INTLAYER_CLIENT_SECRET,
/**
* URL della dashboard CMS self-hosted.
* Predefinito: https://app.intlayer.org
*/
cmsURL: process.env.INTLAYER_CMS_URL, // e.g. http://localhost:3000
/**
* URL dell'API del backend self-hosted.
* Predefinito: https://back.intlayer.org
*/
backendURL: process.env.INTLAYER_BACKEND_URL, // e.g. http://localhost:3100
},
};
export default config;
Imposta le variabili d'ambiente nel .env del tuo progetto:
Copiare il codice nella clipboard
Crea le credenziali di accesso nella tua dashboard self-hosted sotto Progetti → Chiavi di accesso all'indirizzo http://localhost:3000/projects.
SDK @intlayer/api
Quando si utilizza l'SDK @intlayer/api in modo programmatico, passa backendURL esplicitamente:
Copiare il codice nella clipboard
Aggiornamento
Questo scarica le immagini più recenti e riavvia i container con docker compose pull && docker compose up -d. I volumi esistenti (mongo-data, redis-data, minio-data) vengono preservati — nessuna perdita di dati.
Copiare il codice nella clipboard
Backup e ripristino
Tutti i dati persistenti risiedono in tre volumi Docker nominati.
Backup
Copiare il codice nella clipboard
Ripristino
Copiare il codice nella clipboard
Limitazioni
- MongoDB deve essere esterno (Atlas). Il backend si connette solo su
mongodb+srv://(costruito daDB_ID/DB_MDP/DB_CLUSTER), quindi un semplicemongodb://host:27017— incluso ilmongodincluso nel container — non può essere utilizzato. Fornire un cluster MongoDB Atlas. - Nessun dominio personalizzato. Tutti gli URL
VITE_*rivolti al browser sono inline nell'app al momento della compilazione, e l'immagine pubblicata contiene valorilocalhost. Il dashboard deve essere accessibile suhttp://localhost:3000; servarlo su un dominio pubblico richiederebbe di ricompilare l'immagine con gli URL di destinazione incorporati e non è supportato out of the box. - Email richiede un mailer funzionante. La configurazione al primo avvio applica la verifica email, quindi
RESEND_API_KEYo un mailer SMTP globale (MAIL_PROVIDER=smtp+MAIL_SMTP_*) deve essere configurato. Dopo che il primo amministratore ha effettuato l'accesso, ogni organizzazione può anche configurare il proprio mailer SMTP o Resend dal dashboard.
Risoluzione dei problemi
Il backend si riavvia in loop al primo avvio
MongoDB e Redis devono essere sani prima che il backend si avvii. Il file compose utilizza depends_on con condition: service_healthy. Se vedi ripetuti riavvii del backend, verifica che i controlli di integrità di mongo e redis passino:
Copiare il codice nella clipboard
Cerca MongoDB connection error vicino alla parte superiore del log.
La dashboard non riesce a raggiungere l'API
Verifica che VITE_BACKEND_URL corrisponda all'URL dove il backend è raggiungibile dal browser (non dalla rete Docker). Se hai cambiato la porta del backend o aggiunto un reverse proxy, ricostruisci l'immagine della dashboard:
Bucket MinIO mancante
Se il servizio one-shot minio-init non è stato eseguito (o è stato eseguito prima che MinIO fosse pronto), crea il bucket manualmente:
Copiare il codice nella clipboard
