snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
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

This commit is contained in:
upstream-mirror
2026-09-17 23:28:13 +05:00
commit e7da97194a
32688 changed files with 4208681 additions and 0 deletions

View File

@@ -0,0 +1,262 @@
---
title: Docker Compose
icon: docker
---
<Warning>
Containerele Docker sunt destinate găzduirii în producție sau auto-găzduirii. Pentru a contribui, consultați [Configurarea locală](/l/ro/developers/contribute/capabilities/local-setup).
</Warning>
## Prezentare generală
Acest ghid oferă instrucțiuni pas cu pas pentru a instala și configura aplicația Twenty folosind Docker Compose. Scopul este de a face procesul direct și de a preveni capcanele comune care ar putea deteriora configurarea dvs.
**Important:** Modificați numai setările menționate explicit în acest ghid. Modificarea altor configurații poate duce la probleme.
Consultați [Setup Environment Variables](/l/ro/developers/self-host/capabilities/setup) pentru configurare avansată. Toate variabilele de mediu trebuie declarate în fișierul `docker-compose.yml` la nivel de server și/sau de lucru, în funcție de variabilă.
## Cerințe de Sistem
* RAM: Asigurați-vă că mediul dvs. are cel puțin 2 GB de RAM. Memoria insuficientă poate provoca prăbușirea proceselor.
* Docker & Docker Compose: Asigurați-vă că ambele sunt instalate și la zi.
## Opțiunea 1: Script într-o singură linie
Instalați cea mai recentă versiune stabilă a Twenty cu o singură comandă:
```bash
bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
```
Pentru a instala o versiune sau ramură specifică:
```bash
VERSION=vx.y.z BRANCH=branch-name bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
```
* Înlocuiți x.y.z cu numărul versiunii dorite.
* Înlocuiți branch-name cu numele ramurii pe care doriți să o instalați.
## Opțiunea 2: Pași manuali
Urmați acești pași pentru o configurare manuală.
### Pasul 1: Configurați Fișierul de Mediu
1. **Creați Fișierul .env**
Copiați exemplul de fișier de mediu într-un fișier .env nou în directorul de lucru:
```bash
curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example
```
2. **Generează o cheie de criptare**
Rulați următoarea comandă pentru a genera un șir unic aleatoriu:
```bash
openssl rand -base64 32
```
**Important:** Păstrați această valoare secretă / nu o împărtășiți. Pierderea `ENCRYPTION_KEY` înseamnă pierderea accesului la toate secretele stocate în baza de date (tokenuri OAuth, variabile de aplicație, secrete TOTP etc.).
3. **Actualizați `.env`**
Înlocuiți valoarea substituentului în fișierul dvs. .env cu tokenul generat:
```ini
ENCRYPTION_KEY=random_string
```
Vezi [ghidul pentru rotația cheii](/l/ro/developers/self-host/capabilities/key-rotation) pentru instrucțiuni despre cum să o rotești fără întreruperi.
4. **Setați Parola pentru Postgres**
Actualizați valoarea `PG_DATABASE_PASSWORD` în fișierul .env cu o parolă puternică fără caractere speciale.
```ini
PG_DATABASE_PASSWORD=my_strong_password
```
### Pasul 2: Obțineți Fișierul Docker Compose
Descărcați fișierul `docker-compose.yml` în directorul de lucru:
```bash
curl -o docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/docker-compose.yml
```
### Pasul 3: Lansați Aplicația
Porniți containerele Docker:
```bash
docker compose up -d
```
### Pasul 4: Accesați Aplicația
Dacă găzduiți twentyCRM pe propriul computer, deschideți browserul și navigați la [http://localhost:3000](http://localhost:3000).
Dacă îl găzduiți pe un server, verificați că serverul rulează și că totul este în regulă cu
```bash
curl http://localhost:3000
```
## Configurație
### Expuneți Twenty pentru Acces Extern
Implicit, Twenty rulează pe `localhost` la portul `3000`. Interfața de utilizator accesează API-ul folosind originea proprie a browserului, astfel încât se poate încărca de pe orice nume de gazdă care ajunge la container — totuși setează `SERVER_URL` la URL-ul tău public: serverul îl folosește pentru linkuri generate (e-mailuri, callback-uri OAuth) și pentru a detecta utilizarea HTTPS, necesară pentru cookie-uri securizate.
#### Înțelegerea `SERVER_URL`
* **Protocol:** Utilizați `http` sau `https`, în funcție de configurarea dvs.
* Utilizați `http` dacă nu ați configurat SSL.
* Utilizați `https` dacă aveți SSL configurat.
* **Domeniu/IP:** Acesta este numele domeniului sau adresa IP unde aplicația dvs. este accesibilă.
* **Port:** Includeți numărul portului dacă nu utilizați porturile implicite (`80` pentru `http`, `443` pentru `https`).
### Cerințe SSL
SSL (HTTPS) este necesar pentru funcționarea corespunzătoare a anumitor funcții ale browserului. Deși aceste funcții pot funcționa în timpul dezvoltării locale (deoarece browserele tratează localhost diferit), o configurare SSL corespunzătoare este necesară când găzduiți Twenty pe un domeniu obișnuit.
De exemplu, API-ul pentru clipboard ar putea necesita un context securizat - unele funcții precum butoanele de copiere din aplicație ar putea să nu funcționeze fără HTTPS activat.
Recomandăm cu tărie configurarea Twenty din spatele unui proxy revers cu terminare SSL pentru securitate și funcționalitate optimă.
#### Configurarea `SERVER_URL`
1. **Stabiliți Adresa dvs. de Acces**
* **Fără Proxy Revers (Acces Direct):**
Dacă accesați aplicația direct, fără un proxy revers:
```ini
SERVER_URL=http://your-domain-or-ip:3000
```
* **Cu Proxy Revers (Porturi Standard):**
Dacă utilizați un proxy revers precum Nginx sau Traefik și aveți configurat SSL:
```ini
SERVER_URL=https://your-domain-or-ip
```
* **Cu Proxy Revers (Porturi Custom):**
Dacă utilizați porturi non-standard:
```ini
SERVER_URL=https://your-domain-or-ip:custom-port
```
2. **Actualizați Fișierul `.env`**
Deschideți fișierul dvs. `.env` și actualizați `SERVER_URL`:
```ini
SERVER_URL=http(s)://your-domain-or-ip:your-port
```
**Exemple:**
* Acces direct fără SSL:
```ini
SERVER_URL=http://123.45.67.89:3000
```
* Acces prin domeniu cu SSL:
```ini
SERVER_URL=https://mytwentyapp.com
```
3. **Reporniți Aplicația**
Pentru ca modificările să intre în vigoare, reporniți containerele Docker:
```bash
docker compose down
docker compose up -d
```
#### Considerații
* **Configurarea Proxy-ului Invers:**
Asigurați-vă că proxy-ul invers transmite cererile către portul intern corect (`3000` în mod implicit). Configurați finalizarea SSL și toate headerele necesare.
* **Setările Firewall-ului:**
Deschideți porturile necesare în firewall-ul dvs. pentru a permite accesul extern.
* **Consistență:**
`SERVER_URL` trebuie să corespundă modului în care utilizatorii accesează aplicația dvs. în browserele lor.
#### Persistență
* **Volume de Date:**
Configurația Docker Compose folosește volume pentru a persista datele pentru baza de date și stocarea serverului.
* **Mediile Fără Stare:**
Dacă se utilizează un mediu fără stare (de ex., anumite servicii de cloud), configurați stocarea externă pentru a persista datele.
## Copiere de rezervă și restaurare
Copiile de rezervă regulate vă protejează datele CRM împotriva pierderii.
### Creați o copie de rezervă a bazei de date
```bash
docker exec twenty-postgres pg_dump -U postgres twenty > backup_$(date +%Y%m%d).sql
```
### Automatizați copiile de rezervă zilnice
Adăugați în crontab-ul dvs. (`crontab -e`):
```bash
0 2 * * * docker exec twenty-postgres pg_dump -U postgres twenty > /backups/twenty_$(date +\%Y\%m\%d).sql
```
### Restaurare din copie de rezervă
1. Opriți aplicația:
```bash
docker compose stop server worker
```
2. Restaurați baza de date:
```bash
docker exec -i twenty-postgres psql -U postgres twenty < backup_20240115.sql
```
3. Reporniți serviciile:
```bash
docker compose up -d
```
### Cele mai bune practici pentru copiile de rezervă
* **Testați restaurările în mod regulat** — verificați că copiile de rezervă chiar funcționează
* **Stocați copiile de rezervă în afara sediului** — utilizați stocarea în cloud (S3, GCS, etc.)
* **Criptați datele sensibile** — protejați copiile de rezervă cu criptare
* **Păstrați mai multe copii** — mențineți copii de rezervă zilnice, săptămânale și lunare
## Depanare
Dacă întâmpinați vreo problemă, verificați [Depanare](/l/ro/developers/self-host/capabilities/troubleshooting) pentru soluții.
## Găzduire gestionată
<Tip>
Preferiți să nu rulați și să nu întrețineți Twenty chiar dumneavoastră? [Găsiți un partener Twenty certificat pentru găzduire](https://twenty.com/partners/list?categories=HOSTING\&ref=docs-docker-compose) care să vă implementeze, găzduiască și gestioneze instanța de la un capăt la altul. *(Sau contactați echipa noastră: [contact@twenty.com](mailto:contact@twenty.com).)*
</Tip>