Pose una domanda e ottieni un riassunto del documento facendo riferimento a questa pagina e al provider AI di tua scelta
Il contenuto di questa pagina è stato tradotto con un'IA.
Vedi l'ultima versione del contenuto originale in ingleseIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
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:
Copiare il codice nella clipboard
curl -fsSL https://intlayer.org/install.sh | shL'installer scarica un docker-compose.yml e un .env, genera automaticamente i segreti richiesti e avvia tutti i container con docker compose up -d.
Indice dei Contenuti
Architettura
Copiare il codice nella clipboard
┌─────────────────────────────┐ browser ──────▶ │ app (TanStack Start) :3000│ ──┐ └─────────────────────────────┘ │ VITE_BACKEND_URL ┌─────────────────────────────┐ │ │ backend (Fastify/Bun) :3100│ ◀─┘ └──────────────┬──────────────┘ ┌──────────┬─────────┼──────────┬───────────┐ ▼ ▼ ▼ ▼ ▼ mongo:27017 redis:6379 minio:9000 mailpit:1025 Chromium (1-node RS) (S3 API) (SMTP) (in-image) minio:9001 mailpit:8025 (console) (web UI)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).
Avvio rapido
Copiare il codice nella clipboard
curl -fsSL https://intlayer.org/install.sh | shCosa 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 |
Le porte interne (mongo, redis) non sono esposte all'host per impostazione predefinita.
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
L'installer genera un .env pronto all'uso. La tabella seguente descrive ogni variabile.
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 |
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
INTLAYER_CMS_URL=http://localhost:3000INTLAYER_BACKEND_URL=http://localhost:3100INTLAYER_CLIENT_ID=<your-client-id>INTLAYER_CLIENT_SECRET=<your-client-secret>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
import { createIntlayerCMS } from "@intlayer/api";import { dictionaryEndpoint } from "@intlayer/api/dictionary";const cms = createIntlayerCMS({ editor: { clientId: process.env.INTLAYER_CLIENT_ID, clientSecret: process.env.INTLAYER_CLIENT_SECRET, backendURL: process.env.INTLAYER_BACKEND_URL, // http://localhost:3100 },});const { data: dictionaries } = await dictionaryEndpoint(cms).getDictionaries();Aggiornamento
Eseguire nuovamente l'installer su un'implementazione esistente esegue un aggiornamento rolling:
Copiare il codice nella clipboard
curl -fsSL https://intlayer.org/install.sh | shQuesto 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.
Per aggiornare manualmente dalla directory ./intlayer/:
Copiare il codice nella clipboard
docker compose pulldocker compose up -dBackup e ripristino
Tutti i dati persistenti risiedono in tre volumi Docker nominati.
Backup
Copiare il codice nella clipboard
docker run --rm \ -v intlayer_mongo-data:/data \ -v "$(pwd)":/backup \ busybox tar czf /backup/mongo-data.tar.gz /datadocker run --rm \ -v intlayer_redis-data:/data \ -v "$(pwd)":/backup \ busybox tar czf /backup/redis-data.tar.gz /datadocker run --rm \ -v intlayer_minio-data:/data \ -v "$(pwd)":/backup \ busybox tar czf /backup/minio-data.tar.gz /dataRipristino
Copiare il codice nella clipboard
docker run --rm \ -v intlayer_mongo-data:/data \ -v "$(pwd)":/backup \ busybox tar xzf /backup/mongo-data.tar.gz -C /# Ripetere per redis-data e minio-dataUtilizzo di un reverse proxy (Nginx / Caddy)
Per le implementazioni in produzione, posiziona un reverse proxy davanti ai container dell'app e del backend invece di esporli direttamente.
Esempio Nginx
Copiare il codice nella clipboard
server { listen 80; server_name cms.example.com; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }}server { listen 80; server_name api.example.com; location / { proxy_pass http://localhost:3100; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }}Aggiorna le seguenti variabili .env per corrispondere ai tuoi domini pubblici:
Copiare il codice nella clipboard
BACKEND_URL=https://api.example.comAPP_URL=https://cms.example.comDOMAIN=example.comVITE_BACKEND_URL=https://api.example.comVITE_DOMAIN=example.comLe variabiliVITE_*sono integrate nell'immagine della dashboard al momento della compilazione. Se le modifichi dopo che l'immagine è stata compilata, devi ricostruire l'immagineapp(docker compose build app) o utilizzare l'iniezione della configurazione a runtime.
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
docker compose psdocker compose logs mongodocker compose logs redisLa 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:
Copiare il codice nella clipboard
docker compose build appdocker compose up -d appEmail non inviate
Per impostazione predefinita, tutte le email in uscita vengono catturate da Mailpit. Apri http://localhost:8025 per vedere i messaggi inviati. Per inviare email reali, imposta MAIL_PROVIDER=resend e RESEND_API_KEY=<la-tua-chiave> in .env, quindi riavvia il backend:
Copiare il codice nella clipboard
docker compose restart backendBucket 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
docker compose run --rm minio-init