Prezentare generală
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ă)
- Accesați instanța dumneavoastră Twenty (de obicei
http://localhost:3000) - Mergeți la Setări / Panou Admin / Variabile de Configurare
- Configurați integrările, e-mailul, stocarea și multe altele
- Schimbările intră în vigoare imediat (în termen de 15 secunde pentru implementări cu mai multe containere)
- 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…

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
.env:
- Setați
IS_CONFIG_VARIABLES_IN_DB_ENABLED=falseîn fișierul dvs..env - Adăugați toate variabilele de configurare în fișierul dvs.
.env - Reporniți containerele pentru ca schimbările să aibă efect
- 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șicanAccessFullAdminPanel) - Î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
- 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
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: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: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
- Mergeți la Google Cloud Console
- Creați un proiect nou sau selectați unul existent
- Activați aceste API-uri:
Configurați OAuth
- Mergeți la Credentials
- Creați Client ID OAuth 2.0
- 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
- Mergeți la Setări → Panou Admin → Variabile de Configurare
- Găsiți secțiunea Autentificare Google
- Setați aceste variabile:
MESSAGING_PROVIDER_GMAIL_ENABLED=trueCALENDAR_PROVIDER_GOOGLE_ENABLED=trueAUTH_GOOGLE_CLIENT_ID={client-id}AUTH_GOOGLE_CLIENT_SECRET={client-secret}AUTH_GOOGLE_CALLBACK_URL=https://{your-domain}/auth/google/redirectAUTH_GOOGLE_APIS_CALLBACK_URL=https://{your-domain}/auth/google-apis/get-access-token
https://www.googleapis.com/auth/calendar.eventshttps://www.googleapis.com/auth/gmail.readonlyhttps://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
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/redirectdacă doriți să utilizați SSO Microsofthttps://{your-domain}/auth/microsoft-apis/get-access-token
Configurați în Twenty
- Mergeți la Setări → Panou Admin → Variabile de Configurare
- Găsiți secțiunea Autentificare Microsoft
- Setați aceste variabile:
MESSAGING_PROVIDER_MICROSOFT_ENABLED=trueCALENDAR_PROVIDER_MICROSOFT_ENABLED=trueAUTH_MICROSOFT_ENABLED=trueAUTH_MICROSOFT_CLIENT_ID={client-id}AUTH_MICROSOFT_CLIENT_SECRET={client-secret}AUTH_MICROSOFT_CALLBACK_URL=https://{your-domain}/auth/microsoft/redirectAUTH_MICROSOFT_APIS_CALLBACK_URL=https://{your-domain}/auth/microsoft-apis/get-access-token
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: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
- Mergeți la Setări → Panou Admin → Variabile de Configurare
- Găsiți secțiunea Email
- Configurați setările dvs. SMTP:
- Gmail
- Office365
- smtp4dev
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’
Stocare S3
SetațiSTORAGE_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ândSTORAGE_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.
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âts3: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 lahttps://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ândSTORAGE_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:
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 cuLOGIC_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.
Funcții logice - Drivere disponibile
Funcții logice - Configurare recomandată
Pentru dezvoltare: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ă.
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.