Files
upstream-twenty/packages/twenty-docs/l/it/developers/self-host/capabilities/docker-compose.mdx
upstream-mirror e7da97194a
Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s
snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
2026-09-17 23:28:13 +05:00

263 lines
8.5 KiB
Plaintext

---
title: Docker Compose
icon: docker
---
<Warning>
I container Docker sono destinati all'hosting in produzione o al self-hosting. Per contribuire, consulta [Configurazione locale](/l/it/developers/contribute/capabilities/local-setup).
</Warning>
## Panoramica
Questa guida fornisce istruzioni passo passo per installare e configurare l'applicazione Twenty usando Docker Compose. L'obiettivo è rendere il processo semplice ed evitare gli errori comuni che potrebbero compromettere il tuo setup.
**Importante:** Modifica solo le impostazioni esplicitamente menzionate in questa guida. Modificare altre configurazioni potrebbe portare a problemi.
Consulta [Configurazione delle variabili di ambiente](/l/it/developers/self-host/capabilities/setup) per configurazioni avanzate. Tutte le variabili di ambiente devono essere dichiarate nel file `docker-compose.yml` a livello di server e/o di worker, a seconda della variabile.
## Requisiti di Sistema
* RAM: Assicurati che il tuo ambiente abbia almeno 2GB di RAM. Memoria insufficiente può causare arresti anomali dei processi.
* Docker & Docker Compose: Assicurati che entrambi siano installati e aggiornati.
## Opzione 1: Script a riga singola
Installa l'ultima versione stabile di Twenty con un unico comando:
```bash
bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
```
Per installare una versione o un ramo specifico:
```bash
VERSION=vx.y.z BRANCH=branch-name bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
```
* Sostituisci x.y.z con il numero di versione desiderato.
* Sostituisci nome-ramo con il nome del ramo che vuoi installare.
## Opzione 2: Passaggi manuali
Segui questi passaggi per un setup manuale.
### Passo 1: Configura il File di Ambiente
1. **Crea il File .env**
Copia il file di ambiente di esempio in un nuovo file .env nella tua directory di lavoro:
```bash
curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example
```
2. **Genera una chiave di cifratura**
Esegui il seguente comando per generare una stringa casuale unica:
```bash
openssl rand -base64 32
```
**Importante:** Tieni questo valore segreto / non condividerlo. La perdita di `ENCRYPTION_KEY` significa perdere l'accesso a tutti i segreti archiviati nel database (token OAuth, variabili dell'applicazione, segreti TOTP, ecc.).
3. **Aggiorna il `.env`**
Sostituisci il valore segnaposto nel tuo file .env con il token generato:
```ini
ENCRYPTION_KEY=random_string
```
Consulta la [Guida alla rotazione delle chiavi](/l/it/developers/self-host/capabilities/key-rotation) per le istruzioni su come ruotarla senza tempi di inattività.
4. **Imposta la Password di Postgres**
Aggiorna il valore `PG_DATABASE_PASSWORD` nel file .env con una password forte senza caratteri speciali.
```ini
PG_DATABASE_PASSWORD=my_strong_password
```
### Passo 2: Ottieni il File Docker Compose
Scarica il file `docker-compose.yml` nella tua directory di lavoro:
```bash
curl -o docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/docker-compose.yml
```
### Passo 3: Avvia l'Applicazione
Avvia i container Docker:
```bash
docker compose up -d
```
### Passo 4: Accedi all'Applicazione
Se ospiti twentyCRM sul tuo computer, apri il browser e naviga a [http://localhost:3000](http://localhost:3000).
Se lo ospiti su un server, controlla che il server sia in esecuzione e che tutto sia ok con
```bash
curl http://localhost:3000
```
## Configurazione
### Esponi Twenty per Accesso Esterno
Per impostazione predefinita, Twenty gira su `localhost` alla porta `3000`. L'interfaccia utente risolve l'API dall'origine del browser, quindi viene caricata da qualsiasi hostname che raggiunga il container — ma imposta comunque `SERVER_URL` sul tuo URL pubblico: il server lo usa per i link generati (email, callback OAuth) e per rilevare l'HTTPS per i cookie sicuri.
#### Comprendere `SERVER_URL`
* **Protocollo:** Usa `http` o `https` a seconda della tua configurazione.
* Usa `http` se non hai configurato SSL.
* Usa `https` se hai configurato SSL.
* **Dominio/IP:** Questo è il nome del dominio o indirizzo IP dove la tua applicazione è accessibile.
* **Porta:** Includi il numero di porta se non stai usando le porte predefinite (`80` per `http`, `443` per `https`).
### Requisiti SSL
SSL (HTTPS) è necessario affinché alcune caratteristiche del browser funzionino correttamente. Mentre queste caratteristiche potrebbero funzionare durante lo sviluppo locale (poiché i browser trattano localhost in modo diverso), è necessario un setup SSL adeguato quando si ospita Twenty su un dominio regolare.
Ad esempio, l'API degli appunti potrebbe richiedere un contesto sicuro - alcune funzionalità come i pulsanti di copia in tutta l'applicazione potrebbero non funzionare senza HTTPS abilitato.
Raccomandiamo fortemente di configurare Twenty dietro un proxy inverso con terminazione SSL per una sicurezza e funzionalità ottimali.
#### Configurare `SERVER_URL`
1. **Determina il tuo URL di Accesso**
* **Senza Proxy Inverso (Accesso Diretto):**
Se accedi all'applicazione direttamente senza un proxy inverso:
```ini
SERVER_URL=http://your-domain-or-ip:3000
```
* **Con Proxy Inverso (Porte Standard):**
Se usi un proxy inverso come Nginx o Traefik e hai configurato SSL:
```ini
SERVER_URL=https://your-domain-or-ip
```
* **Con Proxy Inverso (Porte Personalizzate):**
Se usi porte non standard:
```ini
SERVER_URL=https://your-domain-or-ip:custom-port
```
2. **Aggiorna il File `.env`**
Apri il tuo file `.env` e aggiorna il `SERVER_URL`:
```ini
SERVER_URL=http(s)://your-domain-or-ip:your-port
```
**Esempi:**
* Accesso diretto senza SSL:
```ini
SERVER_URL=http://123.45.67.89:3000
```
* Accesso tramite dominio con SSL:
```ini
SERVER_URL=https://mytwentyapp.com
```
3. **Riavvia l'Applicazione**
Per rendere effettive le modifiche, riavvia i container Docker:
```bash
docker compose down
docker compose up -d
```
#### Considerazioni
* **Configurazione del Reverse Proxy:**
Assicurati che il tuo reverse proxy inoltri le richieste alla porta interna corretta (`3000` per impostazione predefinita). Configura la terminazione SSL e tutte le intestazioni necessarie.
* **Impostazioni Firewall:**
Apri le porte necessarie nel tuo firewall per consentire l'accesso esterno.
* **Coerenza:**
Il `SERVER_URL` deve corrispondere a come gli utenti accedono alla tua applicazione nei loro browser.
#### Persistenza
* **Volumi di Dati:**
La configurazione di Docker Compose utilizza volumi per mantenere i dati per il database e l'archiviazione del server.
* **Ambienti Senza Stato:**
Se si distribuisce in un ambiente senza stato (ad esempio, alcuni servizi di cloud), configura l'archiviazione esterna per mantenere i dati.
## Backup e ripristino
I backup regolari proteggono i dati del tuo CRM dalla perdita.
### Crea un backup del database
```bash
docker exec twenty-postgres pg_dump -U postgres twenty > backup_$(date +%Y%m%d).sql
```
### Automatizza i backup giornalieri
Aggiungi al tuo crontab (`crontab -e`):
```bash
0 2 * * * docker exec twenty-postgres pg_dump -U postgres twenty > /backups/twenty_$(date +\%Y\%m\%d).sql
```
### Ripristina dal backup
1. Arresta l'applicazione:
```bash
docker compose stop server worker
```
2. Ripristina il database:
```bash
docker exec -i twenty-postgres psql -U postgres twenty < backup_20240115.sql
```
3. Riavvia i servizi:
```bash
docker compose up -d
```
### Pratiche migliori per i backup
* **Esegui regolarmente test di ripristino** — verifica che i backup funzionino davvero
* **Conserva i backup off-site** — usa l'archiviazione cloud (S3, GCS, ecc.)
* **Crittografa i dati sensibili** — proteggi i backup con la crittografia
* **Mantieni più copie** — conserva backup giornalieri, settimanali e mensili
## Risoluzione dei problemi
Se riscontri problemi, controlla [Risoluzione dei problemi](/l/it/developers/self-host/capabilities/troubleshooting) per le soluzioni.
## Hosting gestito
<Tip>
Preferisci non gestire e mantenere Twenty in autonomia? [Trova un partner Twenty certificato](https://twenty.com/partners/list?categories=HOSTING\&ref=docs-docker-compose) per distribuire, ospitare e gestire la tua istanza end-to-end. *(Oppure contatta il nostro team: [contact@twenty.com](mailto:contact@twenty.com).)*
</Tip>