Salt la conținutul principal

Prezentare generală

Prima instalare? Urmați ghidul de instalare Docker Compose pentru a rula Twenty, apoi reveniți aici pentru configurare.
Twenty oferă două moduri de configurare pentru a se potrivi nevoilor diferite de implementare: Acces la panoul de administrare: Doar utilizatorii cu privilegii de administrator (canAccessFullAdminPanel: true) pot accesa interfața de configurare.

1. Configurare Panou Admin (Implicită)

Majoritatea configurărilor se fac prin UI după instalare:
  1. Accesați instanța dumneavoastră Twenty (de obicei http://localhost:3000)
  2. Mergeți la Setări / Panou Admin / Variabile de Configurare
  3. Configurați integrările, e-mailul, stocarea și multe altele
  4. Schimbările intră în vigoare imediat (în termen de 15 secunde pentru implementări cu mai multe containere)
Implementări Multi-Container: Când utilizați configurarea bazei de date (IS_CONFIG_VARIABLES_IN_DB_ENABLED=true), atât serverul cât și containerele worker citesc din aceeași bază de date. Modificările din panoul de administrare afectează ambele automat, eliminând necesitatea duplicării variabilelor de mediu între containere (cu excepția variabilelor de infrastructură).
Ce puteți configura prin panoul de administrare:
  • Autentificare - OAuth Google/Microsoft, setări parole
  • E-mail - setări SMTP, șabloane, verificare
  • Stocare - configurație S3, căi stocare locală
  • Integrări - Gmail, Google Calendar, servicii Microsoft
  • Flux de lucru și limitarea ratei - limite de execuție, limitarea ratei pentru API
  • Și multe altele…
Variabile de Configurare Panou Admin
Fiecare variabilă este documentată cu descrieri în panoul dvs. de administrare la Setări → Panou Admin → Variabile de Configurare. Unele setări de infrastructură, cum ar fi conexiunile la baze de date (PG_DATABASE_URL), URL-urile serverului (SERVER_URL) și secretele (ENCRYPTION_KEY, FALLBACK_ENCRYPTION_KEY) pot fi configurate doar prin fișierul .env.Referință tehnică completă →

Chei de criptare

Twenty folosește două chei de criptare disponibile doar prin variabile de mediu: Pentru compatibilitate cu versiunile anterioare, dacă ENCRYPTION_KEY nu este setată, Twenty revine la APP_SECRET pentru criptarea în repaus — respectând comportamentul moștenit pentru implementările mai vechi. Instalările noi ar trebui să seteze întotdeauna o ENCRYPTION_KEY dedicată. Generează valori cu openssl rand -base64 32 și stochează-le într-un loc sigur (un manager de secrete, configurație sigilată etc.). Pierderea ENCRYPTION_KEY înseamnă pierderea accesului la fiecare secret stocat în baza de date. Pentru a roti ENCRYPTION_KEY fără timp de nefuncționare, vezi Ghidul de rotație a cheilor.

2. Configurare Doar Mediu

Toate configurațiile gestionate prin fișiere .env:
  1. Setați IS_CONFIG_VARIABLES_IN_DB_ENABLED=false în fișierul dvs. .env
  2. Adăugați toate variabilele de configurare în fișierul dvs. .env
  3. Reporniți containerele pentru ca schimbările să aibă efect
  4. Panoul de administrare va afișa valorile curente, dar nu le poate modifica

Mod cu mai multe spații de lucru

În mod implicit, Twenty rulează în modul cu un singur spațiu de lucru — ideal pentru majoritatea implementărilor auto-găzduite în care aveți nevoie de o singură instanță CRM pentru organizația dvs.

Modul cu un singur spațiu de lucru (implicit)

  • Un spațiu de lucru pentru fiecare instanță Twenty
  • Primul utilizator devine automat administrator cu privilegii complete (canImpersonate și canAccessFullAdminPanel)
  • Înregistrările noi sunt dezactivate după crearea primului spațiu de lucru
  • Structură URL simplă: https://your-domain.com

Activarea modului cu mai multe spații de lucru

Activați modul cu mai multe spații de lucru pentru implementări de tip SaaS, în care mai multe echipe independente au nevoie de propriile spații de lucru pe aceeași instanță Twenty. Diferențe cheie față de modul cu un singur spațiu de lucru:
  • Pe aceeași instanță pot fi create mai multe spații de lucru
  • Fiecare spațiu de lucru primește propriul subdomeniu (de ex., sales.your-domain.com, marketing.your-domain.com)
  • Utilizatorii se înregistrează și se autentifică la {DEFAULT_SUBDOMAIN}.your-domain.com (de ex., app.your-domain.com)
  • Fără privilegii administrative automate — primul utilizator din fiecare spațiu de lucru este un utilizator obișnuit
  • Setări specifice spațiului de lucru, precum subdomeniu și domeniu personalizat, devin disponibile în setările spațiului de lucru
Setare exclusiv de mediu: IS_MULTIWORKSPACE_ENABLED poate fi configurată doar prin fișierul .env și necesită o repornire. Nu poate fi modificată prin panoul de administrare.

Configurarea DNS pentru modul cu mai multe spații de lucru

Când folosiți modul cu mai multe spații de lucru, configurați DNS-ul cu o înregistrare wildcard pentru a permite crearea dinamică de subdomenii:
Acest lucru permite rutarea automată a subdomeniilor pentru spațiile de lucru noi, fără configurare DNS manuală.

Restricționarea creării de spații de lucru

În modul cu mai multe spații de lucru, este posibil să doriți să limitați cine poate crea spații de lucru noi:
Când este activată, doar utilizatorii cu canAccessFullAdminPanel pot crea spații de lucru suplimentare. Utilizatorii își pot crea în continuare primul spațiu de lucru în timpul înregistrării inițiale.

Integrare Gmail & Google Calendar

Creați Proiect Google Cloud

  1. Mergeți la Google Cloud Console
  2. Creați un proiect nou sau selectați unul existent
  3. Activați aceste API-uri:

Configurați OAuth

  1. Mergeți la Credentials
  2. Creați Client ID OAuth 2.0
  3. Adăugați aceste URI-uri de redirecționare:
    • https://{your-domain}/auth/google/redirect (pentru SSO)
    • https://{your-domain}/auth/google-apis/get-access-token (pentru integrări)

Configurați în Twenty

  1. Mergeți la Setări → Panou Admin → Variabile de Configurare
  2. Găsiți secțiunea Autentificare Google
  3. Setați aceste variabile:
    • MESSAGING_PROVIDER_GMAIL_ENABLED=true
    • CALENDAR_PROVIDER_GOOGLE_ENABLED=true
    • AUTH_GOOGLE_CLIENT_ID={client-id}
    • AUTH_GOOGLE_CLIENT_SECRET={client-secret}
    • AUTH_GOOGLE_CALLBACK_URL=https://{your-domain}/auth/google/redirect
    • AUTH_GOOGLE_APIS_CALLBACK_URL=https://{your-domain}/auth/google-apis/get-access-token
Mod doar pentru mediu: Dacă setați IS_CONFIG_VARIABLES_IN_DB_ENABLED=false, adăugați aceste variabile în fișierul dvs. .env în schimb.
Domenii necesare (configurate automat): Consultați codul sursă relevant
  • https://www.googleapis.com/auth/calendar.events
  • https://www.googleapis.com/auth/gmail.readonly
  • https://www.googleapis.com/auth/profile.emails.read

Dacă aplicația dvs. este în modul de test

Dacă aplicația dvs. este în modul de test, va trebui să adăugați utilizatori de test în proiectul dvs. În ecranul de consimțământ OAuth, adăugați utilizatorii dvs. de test în secțiunea “Utilizatori de test”.

Integrare Microsoft 365

Utilizatorii trebuie să aibă un Licență Microsoft 365 pentru a putea utiliza API-ul Calendar și Mesagerie. Nu vor putea sincroniza contul lor pe Twenty fără una.

Creați un proiect în Microsoft Azure

Va trebui să creați un proiect în Microsoft Azure și să obțineți acreditările.

Activați API-urile

În Microsoft Azure Console activați următoarele API-uri în “Permisiuni”:
  • Graph Microsoft: Mail.ReadWrite
  • Graph Microsoft: Mail.Send
  • Graph Microsoft: Calendars.ReadWrite
  • Graph Microsoft: User.Read
  • Graph Microsoft: openid
  • Graph Microsoft: email
  • Graph Microsoft: profile
  • Graph Microsoft: offline_access
Toate aceste permisiuni sunt necesare, chiar dacă doriți doar să sincronizați e-mailuri și evenimente din calendar. Twenty solicită întotdeauna “Mail.ReadWrite”, “Mail.Send” și “Calendars.ReadWrite” atunci când un utilizator își conectează contul, astfel încât permisiunile doar de citire, precum “Mail.Read” sau “Calendars.Read”, nu sunt suficiente.
Dacă entitatea dvs. găzduită nu le permite utilizatorilor obișnuiți să consimtă la aceste permisiuni, aceștia vor vedea eroarea AADSTS90094 atunci când își conectează contul. Un administrator poate remedia acest lucru făcând clic pe “Grant admin consent for ” în pagina “API permissions” a înregistrării aplicației.

URIs de redirecționare autorizate

Trebuie să adăugați următoarele URI-uri de redirecționare în proiectul dvs:
  • https://{your-domain}/auth/microsoft/redirect dacă doriți să utilizați SSO Microsoft
  • https://{your-domain}/auth/microsoft-apis/get-access-token

Configurați în Twenty

  1. Mergeți la Setări → Panou Admin → Variabile de Configurare
  2. Găsiți secțiunea Autentificare Microsoft
  3. Setați aceste variabile:
    • MESSAGING_PROVIDER_MICROSOFT_ENABLED=true
    • CALENDAR_PROVIDER_MICROSOFT_ENABLED=true
    • AUTH_MICROSOFT_ENABLED=true
    • AUTH_MICROSOFT_CLIENT_ID={client-id}
    • AUTH_MICROSOFT_CLIENT_SECRET={client-secret}
    • AUTH_MICROSOFT_CALLBACK_URL=https://{your-domain}/auth/microsoft/redirect
    • AUTH_MICROSOFT_APIS_CALLBACK_URL=https://{your-domain}/auth/microsoft-apis/get-access-token
Mod doar pentru mediu: Dacă setați IS_CONFIG_VARIABLES_IN_DB_ENABLED=false, adăugați aceste variabile în fișierul dvs. .env în schimb.

Configurați scopurile

Consultați codul sursă relevant
  • ‘openid’
  • ‘email’
  • ‘profil’
  • ‘offline_access’
  • ‘Mail.ReadWrite’
  • ‘Mail.Send’
  • ‘Calendars.ReadWrite’
  • ‘User.Read’

Dacă aplicația dvs. este în modul de test

Dacă aplicația dvs. este în modul de test, va trebui să adăugați utilizatori de test în proiectul dvs. Adăugați utilizatorii de test în secțiunea “Utilizatori și grupuri”.

Procese în fundal pentru Calendar și Mesagerie

După configurarea integrărilor Gmail, Google Calendar, sau Microsoft 365, trebuie să porniți joburile de fundal care sincronizează datele. Înregistrați următoarele joburi recurente în containerul dvs. worker:

Conexiuni de ieșire către gazde interne

În mod implicit, Twenty refuză conexiunile de ieșire către adrese IP private/interne (protecție SSRF). Aceasta acoperă acțiunile fluxurilor de lucru HTTP, webhookurile, furnizorii de identitate SSO și conexiunile IMAP/SMTP/CalDAV. Dacă furnizorul de identitate, serverul de e-mail sau serverul de calendar rulează într-o rețea privată, enumerați numele de gazdă sau literalul IP al acestuia:
Intrările sunt potrivite numai pe baza numelui de gazdă, fără metacaractere: pentru un emitent OIDC precum http://keycloak:8080/realms/twenty, enumerați keycloak. Orice altă adresă privată rămâne blocată și chiar și o gazdă permisă nu poate accesa niciodată intervalul de adrese pentru metadatele cloud. Setați variabila la * pentru a dezactiva complet protecția, lucru adecvat doar în rețele izolate, de încredere. OUTBOUND_HTTP_SAFE_MODE_ENABLED este depreciată. Cât timp este setată la false, protecția rămâne complet dezactivată, iar OUTBOUND_HTTP_ALLOWED_INTERNAL_HOSTS este ignorată, așa că eliminați-o când migrați la listă. Această listă nu acoperă atașamentele de fișiere AI: imaginile și PDF-urile ajung la model ca linkuri create din SERVER_URL, preluate fie de furnizorul AI, fie de AI SDK în worker, care refuză adresele private. Pentru ca atașamentele să funcționeze, SERVER_URL trebuie să fie public; cu un SERVER_URL localhost sau privat, conversațiile și agenții AI funcționează doar cu text.

Configurare Email

  1. Mergeți la Setări → Panou Admin → Variabile de Configurare
  2. Găsiți secțiunea Email
  3. Configurați setările dvs. SMTP:
Va trebui să provisionați o Parolă de Aplicație.
  • EMAIL_DRIVER=smtp
  • EMAIL_SMTP_HOST=smtp.gmail.com
  • EMAIL_SMTP_PORT=465
  • EMAIL_SMTP_USER=gmail_email_address
  • EMAIL_SMTP_PASSWORD=‘gmail_app_password’
Mod doar pentru mediu: Dacă setați IS_CONFIG_VARIABLES_IN_DB_ENABLED=false, adăugați aceste variabile în fișierul dvs. .env în schimb.

Stocare S3

În mod implicit, Twenty stochează fișierele încărcate în sistemul de fișiere local. Pentru implementări în producție, utilizați S3 sau un serviciu compatibil cu S3 (MinIO, DigitalOcean Spaces etc.). pentru a vă asigura că fișierele persistă între repornirile containerelor și se scalează pe mai multe instanțe de server.
Setați STORAGE_TYPE=S_3 și configurați variabilele STORAGE_S3_* prin panoul de administrare sau .env. Un fișier .env minimal pentru AWS S3 cu un utilizator IAM:
Fișierul Docker Compose transmite STORAGE_TYPE, STORAGE_S3_REGION, STORAGE_S3_NAME, STORAGE_S3_ENDPOINT și cele două variabile de acreditări din .env. Setați variabilele pentru URL-uri presemnate în panoul de administrare sau adăugați-le în blocul environment al serviciilor server și worker.

Acreditări

Când STORAGE_S3_ACCESS_KEY_ID este nesetat, serverul rezolvă acreditările prin lanțul implicit al SDK-ului AWS: variabilele de mediu AWS_ACCESS_KEY_ID și AWS_SECRET_ACCESS_KEY, un fișier de acreditări partajat, un rol de sarcină ECS, un rol de cont de serviciu EKS (IRSA) sau un profil de instanță EC2.
Profiluri de instanță EC2 și Docker: profilul de instanță este furnizat de serviciul de metadate al instanței, iar un container din rețeaua bridge implicită a Docker este la un salt de rețea mai departe de acesta decât gazda. Cu limita implicită de salt IMDSv2 de 1, containerul nu primește niciodată acreditările, chiar dacă AWS CLI funcționează pe gazdă. Măriți limita la 2 pe instanță sau utilizați acreditări statice.
Când nu pot fi găsite acreditări, serverul înregistrează CredentialsProviderError: Could not load credentials from any providers la prima încărcare, în timp ce interfața afișează doar o eroare generică.

Permisiuni pentru bucket

O încărcare este mai întâi scrisă într-o cale în așteptare, validată, apoi copiată în calea sa finală, iar obiectul în așteptare este șters. Prin urmare, politica necesită mai mult decât s3:PutObject:
s3:ListBucket este utilizat pentru a șterge foldere, de exemplu când un spațiu de lucru este șters. Fără acesta, S3 răspunde solicitărilor pentru obiecte lipsă cu acces refuzat în loc de negăsit, astfel încât serverul nu poate distinge un fișier lipsă de o problemă de permisiuni.

Endpoint și adresare

Twenty utilizează întotdeauna adresarea în stil cale, astfel încât solicitările ajung la https://endpoint/bucket/key. Pentru AWS S3 nativ, lăsați STORAGE_S3_ENDPOINT nesetat: SDK-ul construiește https://s3.{region}.amazonaws.com din STORAGE_S3_REGION, motiv pentru care o regiune introdusă greșit apare ca o eroare DNS, nu ca o eroare S3. Setați endpointul numai pentru servicii compatibile cu S3 sau când serverul accesează S3 printr-un endpoint de interfață VPC.

CORS

Când STORAGE_S3_PRESIGNED_URL_ENABLED este true, browserele comunică direct cu bucketul. Descărcările sunt solicitări GET, iar încărcările sunt solicitări PUT care conțin un antet Content-Type, ceea ce face ca browserul să trimită mai întâi o solicitare preflight. Prin urmare, politica CORS a bucketului trebuie să permită originea Twenty, ambele metode și acel antet:
Fără URL-uri presemnate, tot traficul de fișiere trece prin server, iar bucketul nu necesită configurare CORS.

Depanare

Eșecurile de încărcare ajung în interfață ca o eroare generică. Eroarea S3 subiacentă se află în jurnalele serverului (docker compose logs server) și în răspunsul GraphQL vizibil în fila de rețea a browserului.

Funcții logice și interpretor de cod

Twenty acceptă funcții logice pentru fluxuri de lucru și interpretorul de cod pentru analiza datelor cu AI. Ambele rulează cod furnizat de utilizator și necesită o configurare explicită din motive de securitate.

Valori implicite de securitate

În producție (NODE_ENV=production): Atât funcțiile logice, cât și interpretorul de cod au implicit valoarea Dezactivat. Trebuie să le activezi explicit cu LOGIC_FUNCTION_TYPE și CODE_INTERPRETER_TYPE dacă ai nevoie de aceste funcționalități. În dezvoltare (NODE_ENV=development): Ambele au implicit valoarea LOCAL pentru comoditate când rulezi local.
Atenționare de securitate: Driverul local (LOGIC_FUNCTION_TYPE=LOCAL sau CODE_INTERPRETER_TYPE=LOCAL) rulează codul direct pe gazdă într-un proces Node.js, fără sandboxing. Ar trebui utilizat doar pentru cod de încredere, în dezvoltare. Pentru implementări în producție care gestionează cod neverificat, folosiți LOGIC_FUNCTION_TYPE=LAMBDA sau CODE_INTERPRETER_TYPE=E2B (cu sandboxing) ori păstrați-le dezactivate.

Funcții logice - Drivere disponibile

Funcții logice - Configurare recomandată

Pentru dezvoltare:
Pentru producție (AWS):
Driverul Lambda încarcă stratul de dependențe al fiecărei aplicații în LOGIC_FUNCTION_LAMBDA_LAYER_BUCKET, un bucket pe care îl dețineți în aceeași regiune cu funcțiile dvs. Când nu este setat, driverul utilizează bucket-ul de stocare (STORAGE_S3_NAME). Dacă niciuna nu este setată, funcțiile logice eșuează cu o eroare de configurare. Pentru a dezactiva funcțiile logice:

Interpretor de cod - Drivere disponibile

Când utilizați LOGIC_FUNCTION_TYPE=DISABLED sau CODE_INTERPRETER_TYPE=DISABLED, orice încercare de execuție va returna o eroare. Acest lucru este util dacă doriți să rulați Twenty fără aceste capabilități.

API și interfața front-end pe gazde separate

Este relevant doar dacă nu lași back-end-ul să servească front-end-ul. Implementările cu aceeași origine nu au nevoie de nimic aici. Declară fiecare origine de browser care comunică cu API-ul, separate prin virgulă. SERVER_URL și FRONTEND_URL sunt deja de încredere. Serverul înregistrează un avertisment în jurnale atunci când un browser îl apelează dintr-o origine nedeclarată.
Partea de front-end trimite datele de autentificare la fiecare cerere, iar browserele resping un răspuns cu date de autentificare provenit de la o origine nedeclarată, astfel încât aplicația nu se încarcă până când nu configurați această opțiune.
Dacă cele două gazde se află pe domenii înregistrabile diferite (nu doar pe subdomenii diferite), setați, de asemenea, AUTH_COOKIE_SAME_SITE=none, ceea ce necesită HTTPS. Cu multi-workspace activat, nu listați aici fiecare subdomeniu de workspace. În schimb, direcționați căile API (/graphql, /metadata, /rest, /auth/, /client-config, /file) către back-end pe fiecare hostname de workspace, astfel încât fiecare workspace să rămână de aceeași origine — acesta este modul în care rulează Twenty Cloud.