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>
Docker kontejnery jsou určeny pro produkční provoz nebo vlastní hostování. Pro přispívání se podívejte na [Lokální nastavení](/l/cs/developers/contribute/capabilities/local-setup).
</Warning>
## Přehled
Tato příručka poskytuje podrobný návod k instalaci a konfiguraci aplikace Twenty pomocí Docker Compose. Cílem je zjednodušit proces a zabránit běžným úskalím, která by mohla narušit vaše nastavení.
**Důležité:** Měňte pouze nastavení výslovně uvedená v tomto průvodci. Změna jiných konfigurací může vést k problémům.
Viz [Nastavení proměnných prostředí](/l/cs/developers/self-host/capabilities/setup) pro pokročilou konfiguraci. Všechny proměnné prostředí musí být deklarovány v souboru `docker-compose.yml` na úrovni serveru a/nebo pracovníka, v závislosti na proměnné.
## Systémové Požadavky
* RAM: Ujistěte se, že vaše prostředí má alespoň 2GB RAM. Nedostatek paměti může způsobit zhroucení procesů.
* Docker & Docker Compose: Ujistěte se, že obě jsou nainstalovány a aktuální.
## Možnost 1: Jednořádkový skript
Nainstalujte nejnovější stabilní verzi Twenty jedním příkazem:
```bash
bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
```
Pro instalaci konkrétní verze nebo větve vypište:
```bash
VERSION=vx.y.z BRANCH=branch-name bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
```
* Nahraďte x.y.z požadovaným číslem verze.
* Nahraďte branch-name názvem větve, kterou chcete nainstalovat.
## Možnost 2: Manuální kroky
Postupujte podle těchto kroků pro ruční nastavení.
### Krok 1: Nastavení souboru Prostředí
1. **Vytvořte soubor .env**
Zkopírujte příklad souboru prostředí do nového souboru .env ve vašem pracovním adresáři:
```bash
curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example
```
2. **Vygenerujte šifrovací klíč**
Spusťte následující příkaz k generování jedinečného náhodného řetězce:
```bash
openssl rand -base64 32
```
**Důležité:** Udržujte tuto hodnotu v tajnosti / nesdílejte ji. Ztráta `ENCRYPTION_KEY` znamená ztrátu přístupu ke všem tajným údajům uloženým v databázi (OAuth tokeny, aplikační proměnné, TOTP tajemství atd.).
3. **Aktualizujte `.env` soubor**
Nahraďte místoblokovou hodnotu ve svém .env souboru vygenerovaným tokenem:
```ini
ENCRYPTION_KEY=random_string
```
Podívejte se na [průvodce rotací klíče](/l/cs/developers/self-host/capabilities/key-rotation) pro pokyny, jak jej rotovat bez prostojů.
4. **Nastavte Heslo pro Postgres**
Aktualizujte hodnotu `PG_DATABASE_PASSWORD` ve vašem .env souboru silným heslem bez speciálních znaků.
```ini
PG_DATABASE_PASSWORD=my_strong_password
```
### Krok 2: Získání souboru Docker Compose
Stáhněte soubor `docker-compose.yml` do svého pracovního adresáře:
```bash
curl -o docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/docker-compose.yml
```
### Krok 3: Spuštění aplikace
Spusťte Docker kontejnery:
```bash
docker compose up -d
```
### Krok 4: Přístup k aplikaci
Pokud hostujete twentyCRM na svém vlastním počítači, otevřete svůj prohlížeč a přejděte na stránku [http://localhost:3000](http://localhost:3000).
Pokud to hostujete na serveru, zkontrolujte, že server běží a že je vše v pořádku s
```bash
curl http://localhost:3000
```
## Konfigurace
### Otevření Twenty pro Externí Přístup
Ve výchozím nastavení běží Twenty na `localhost` na portu `3000`. Uživatelské rozhraní určuje adresu API podle původu (origin) prohlížeče, takže se načte z libovolného názvu hostitele, který směřuje na kontejner — přesto však nastavte `SERVER_URL` na svou veřejnou adresu URL: server ji používá pro generované odkazy (e-maily, zpětná volání OAuth) a ke zjištění, zda se používá HTTPS, pro zabezpečené soubory cookie.
#### Porozumění `SERVER_URL`
* **Protokol:** Použijte `http` nebo `https` v závislosti na vašem nastavení.
* Použijte `http` pokud nemáte nastavené SSL.
* Použijte `https` pokud máte SSL nakonfigurované.
* **Doména/IP:** Toto je doménové jméno nebo IP adresa, kde je vaše aplikace přístupná.
* **Port:** Uveďte číslo portu, pokud nepoužíváte výchozí porty (`80` pro `http`, `443` pro `https`).
### Požadavky na SSL
SSL (HTTPS) je potřebné pro správné fungování některých funkcí prohlížeče. I když tyto funkce mohou fungovat během místního vývoje (protože prohlížeče zacházejí s localhost jinak), správná konfigurace SSL je nutná při hostování Twenty na běžné doméně.
Například rozhraní schránky může vyžadovat zabezpečený kontext - některé funkce jako tlačítka kopírování v aplikaci nemusí fungovat bez povoleného HTTPS.
Důrazně doporučujeme nastavit Twenty za reverzní proxy se SSL ukončením pro optimální bezpečnost a funkčnost.
#### Konfigurace `SERVER_URL`
1. **Určete svou přístupovou URL**
* **Bez Reverzní Proxy (Přímý Přístup):**
Pokud přistupujete k aplikaci přímo bez reverzní proxy:
```ini
SERVER_URL=http://your-domain-or-ip:3000
```
* **S Reverzní Proxy (Standardní Porty):**
Pokud používáte reverzní proxy jako Nginx nebo Traefik a máte SSL nakonfigurované:
```ini
SERVER_URL=https://your-domain-or-ip
```
* **S Reverzní Proxy (Vlastní Porty):**
Pokud používáte nestandardní porty:
```ini
SERVER_URL=https://your-domain-or-ip:custom-port
```
2. **Aktualizujte `.env` Soubor**
Otevřete svůj `.env` soubor a aktualizujte `SERVER_URL`:
```ini
SERVER_URL=http(s)://your-domain-or-ip:your-port
```
**Příklady:**
* Přímý přístup bez SSL:
```ini
SERVER_URL=http://123.45.67.89:3000
```
* Přístup přes doménu s SSL:
```ini
SERVER_URL=https://mytwentyapp.com
```
3. **Restartujte Aplikaci**
Pro aplikaci změn restartujte Docker kontejnery:
```bash
docker compose down
docker compose up -d
```
#### Úvahy
* **Konfigurace reverzního proxy:**
Ujistěte se, že váš reverzní proxy přesměruje požadavky na správný interní port (výchozí `3000`). Nakonfigurujte terminaci SSL a všechny potřebné hlavičky.
* **Nastavení firewallu:**
Otevřete nezbytné porty v firewallu, aby byl umožněn externí přístup.
* **Konzistence:**
`SERVER_URL` musí odpovídat způsobu, jakým uživatelé přistupují k vaší aplikaci ve svých prohlížečích.
#### Perzistence
* **Datové svazky:**
Konfigurace Docker Compose používá svazky k ukládání dat pro databázi a úložiště serverů.
* **Bezstavová prostředí:**
Pokud nasazujete do bezstavového prostředí (např. některé cloudové služby), nakonfigurujte externí úložiště pro uchování dat.
## Zálohování a obnovení
Pravidelné zálohy chrání vaše data v CRM před ztrátou.
### Vytvořte zálohu databáze
```bash
docker exec twenty-postgres pg_dump -U postgres twenty > backup_$(date +%Y%m%d).sql
```
### Automatizujte denní zálohy
Přidejte do svého crontabu (`crontab -e`):
```bash
0 2 * * * docker exec twenty-postgres pg_dump -U postgres twenty > /backups/twenty_$(date +\%Y\%m\%d).sql
```
### Obnovte ze zálohy
1. Zastavte aplikaci:
```bash
docker compose stop server worker
```
2. Obnovte databázi:
```bash
docker exec -i twenty-postgres psql -U postgres twenty < backup_20240115.sql
```
3. Restartujte služby:
```bash
docker compose up -d
```
### Osvědčené postupy pro zálohování
* **Pravidelně testujte obnovy** — ověřte, že zálohy skutečně fungují
* **Ukládejte zálohy mimo lokalitu** — použijte cloudové úložiště (S3, GCS, atd.)
* **Šifrujte citlivá data** — chraňte zálohy šifrováním
* **Uchovávejte více kopií** — mějte denní, týdenní a měsíční zálohy
## Řešení potíží
Pokud narazíte na jakýkoli problém, zkontrolujte sekci [Řešení potíží](/l/cs/developers/self-host/capabilities/troubleshooting) pro možná řešení.
## Spravovaný hosting
<Tip>
Nechcete Twenty provozovat a spravovat sami? [Najděte si certifikovaného hostingového partnera Twenty](https://twenty.com/partners/list?categories=HOSTING\&ref=docs-docker-compose), který pro vás zajistí nasazení, hosting a kompletní správu vaší instance od začátku do konce. *(Nebo kontaktujte náš tým: [contact@twenty.com](mailto:contact@twenty.com).)*
</Tip>

View File

@@ -0,0 +1,60 @@
---
title: Rotace klíčů
icon: rotate
---
Twenty má dvě nezávislé rodiny klíčů:
* **Klíče pro podepisování JWT** — asymetrické páry klíčů ES256 (označené `kid`), uložené v `core."signingKey"`, používané k podepisování a ověřování přístupových/obnovovacích tokenů.
* **Šifrovací klíč pro data v klidu** — `ENCRYPTION_KEY`, používaný k šifrování OAuth tokenů, aplikačních proměnných, soukromých klíčů podepisovacích klíčů, citlivých konfiguračních hodnot a TOTP tajemství uvnitř obálky `enc:v2:`.
`APP_SECRET` je starší tajný klíč ponechaný kvůli zpětné kompatibilitě: pokud `ENCRYPTION_KEY` není nastaven, slouží jako záložní řešení pro šifrování dat v klidu i pro soubory cookie relace a stále ověřuje dříve existující HS256 přístupové tokeny. Bude označen jako zastaralý (deprecated).
## Klíče pro podepisování JWT
Každý klíč nese `publicKey` (uchovávaný neomezeně dlouho, aby mohl ověřovat dříve vydané tokeny), zašifrovaný `privateKey` (používaný pouze tehdy, když je klíč aktuální), příznak `isCurrent` (vždy přesně jeden záznam) a volitelné `revokedAt`.
### Rotace aktuálního klíče
Nastavte `SIGNING_KEY_ROTATION_DAYS`, chcete-li funkci povolit: denní cron poté vydá nový klíč jako aktuální, jakmile je stávající starší než zadaný práh. Předchozí klíče *nejsou* odvolány, takže tokeny pod nimi podepsané se dál úspěšně ověřují. Ponechte proměnnou nenastavenou, abyste deaktivovali automatickou rotaci.
<Note>Automatická rotace je k dispozici od verze v2.6+.</Note>
### Odvolání klíče (pouze při úniku / v nouzi)
**Settings → Admin Panel → Signing keys → Revoke** na neaktuálním řádku. Smaže zašifrovaný privátní materiál, nastaví `revokedAt` a odmítne každý existující token podepsaný pod daným `kid`.
## Rotace `ENCRYPTION_KEY`
<Note>Příkaz `secret-encryption:rotate` popsaný níže je k dispozici od verze v2.6+.</Note>
Každá zašifrovaná hodnota je zabalena jako `enc:v2:\<keyId>:\<payload>`, kde `\<keyId>` je 8místný hexadecimální prefix odvozený ze surového klíče. Rotace probíhá online a je možné ji kdykoli znovu spustit.
1. **Vygenerujte nový klíč**: `openssl rand -base64 32`.
2. **Nakonfigurujte oba klíče vedle sebe** v `.env` a poté restartujte:
```ini
ENCRYPTION_KEY=NEW_VALUE
FALLBACK_ENCRYPTION_KEY=OLD_VALUE
```
Nové zápisy používají nový klíč, existující řádky se stále dešifrují pomocí záložního klíče.
3. **Znovu zašifrujte existující řádky**:
```bash
docker exec -it {server_container} yarn command:prod secret-encryption:rotate
```
Příkaz prochází šest míst (`connected-account-tokens`, `application-variable`, `application-registration-variable`, `signing-key-private-keys`, `sensitive-config-storage`, `totp-secrets`). SQL filtr přeskočí řádky, které už jsou na novém `\<keyId>`, takže příkaz je idempotentní: přerušte ho a znovu spusťte podle potřeby. Ukončí se s nenulovým kódem, pokud jakýkoli řádek selže — spusťte znovu pro opakování.
| Přepínač | Popis |
| ---------------------------------------- | -------------------------------------------------------- |
| `-s, --site \<site>` | Omezí běh na jedno místo (site). |
| `-b, --batch-size \<n>` | Počet řádků v dávce (výchozí `200`, maximum `5000`). |
| `-d, --dry-run` | Dešifruje + znovu zašifruje v paměti, přeskočí `UPDATE`. |
4. **Odstraňte záložní klíč** jakmile `--dry-run` ukáže, že nezbývají žádné řádky: odeberte `FALLBACK_ENCRYPTION_KEY` a restartujte.
## Podpora staršího `APP_SECRET`
Starší instance, které nikdy nenastavily `ENCRYPTION_KEY`, používají `APP_SECRET` jako šifrovací klíč pro data v klidu (a jako tajemství pro soubor cookie relace, odvozené z něj). Tato cesta je zachována kvůli zpětné kompatibilitě, ale je **zastaralá (deprecated)** — nastavte vyhrazený `ENCRYPTION_KEY` a podle výše uvedeného postupu rotace proveďte migraci pryč od něj. Samotný `APP_SECRET` zůstává v používání pro ověřování starších HS256 přístupových tokenů.

View File

@@ -0,0 +1,413 @@
---
title: Nastavení
icon: gear
---
# Správa konfigurace
<Warning>
**Instalujete poprvé?** Postupujte podle [průvodce instalací Docker Compose](/l/cs/developers/self-host/capabilities/docker-compose) k rozchození Twenty, a poté se sem vraťte pro konfiguraci.
</Warning>
Twenty nabízí **dvě konfigurační režimy** pro různé potřeby nasazení:
**Přístup k administračnímu panelu:** Pouze uživatelé s administrátorskými právy (`canAccessFullAdminPanel: true`) mohou přistupovat k rozhraní pro konfiguraci.
## 1. Konfigurace Admin panelu (výchozí)
```bash
IS_CONFIG_VARIABLES_IN_DB_ENABLED=true # default
```
**Většina konfigurace probíhá prostřednictvím uživatelského rozhraní** po instalaci:
1. Přistupte ke své instanci Twenty (obvykle `http://localhost:3000`)
2. Jděte na **Nastavení / Admin panel / Konfigurační proměnné**
3. Nakonfigurujte integrace, e-mail, úložiště a další
4. Změny se projeví okamžitě (u nasazení s více kontejnery do 15 sekund)
<Warning>
**Nasazení s více kontejnery:** Při použití databázové konfigurace (`IS_CONFIG_VARIABLES_IN_DB_ENABLED=true`) čtou oba serverové i pracovní kontejnery ze stejné databáze. Změny v administračním panelu se dotýkají obou automaticky, což eliminuje potřebu duplicitních proměnných prostředí mezi kontejnery (s výjimkou infrastrukturních proměnných).
</Warning>
**Co můžete konfigurovat přes administrační panel:**
* **Autentizace** - Google/Microsoft OAuth, nastavení hesla
* **E-mail** - nastavení SMTP, šablony, ověření
* **Úložiště** - konfigurace S3, místní cesty k úložišti
* **Integrace** - Gmail, Google Kalendář, služby Microsoft
* **Pracovní postup & Omezení rychlosti** - limity provádění, škrcení API
* **A ještě mnohem více...**
![Proměnné konfigurace Admin panelu](/images/user-guide/setup/admin-panel-config-variables.png)
<Warning>
Každá proměnná je dokumentována s popisy ve vašem administračním panelu v sekci **Nastavení → Admin panel → Konfigurační proměnné**.
Některá nastavení infrastruktury, jako připojení k databázi (`PG_DATABASE_URL`), URL serveru (`SERVER_URL`) a tajné klíče (`ENCRYPTION_KEY`, `FALLBACK_ENCRYPTION_KEY`), lze konfigurovat pouze prostřednictvím souboru `.env`.
[Kompletní technická referenční příručka →](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/twenty-config/config-variables.ts)
</Warning>
## Šifrovací klíče
Twenty používá dva šifrovací klíče dostupné pouze přes proměnné prostředí:
| Proměnná | Účel | Povinné |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------- |
| `ENCRYPTION_KEY` | Primární klíč používaný k šifrování tajných hodnot „v klidu“ (tokeny OAuth, aplikační proměnné, privátní klíče podepisovacích klíčů, TOTP tajné kódy, citlivé konfigurační hodnoty). | Ano pro nové instalace (starší instalace se mohou místo toho spoléhat na `APP_SECRET` — viz níže) |
| `FALLBACK_ENCRYPTION_KEY` | Klíč používaný pouze k ověřování. Během rotace se nastavuje na *předchozí* hodnotu `ENCRYPTION_KEY`, aby bylo možné dešifrovat stávající řádky. | Pouze během rotace |
Kvůli zpětné kompatibilitě, pokud `ENCRYPTION_KEY` není nastaven, Twenty používá pro šifrování „v klidu“ záložně `APP_SECRET`, což odpovídá původnímu chování starších nasazení. Nové instalace by vždy měly nastavit dedikovaný `ENCRYPTION_KEY`.
Hodnoty vygenerujte pomocí `openssl rand -base64 32` a uložte je na bezpečné místo (správce tajných klíčů, zapečetěná konfigurace apod.). Ztráta `ENCRYPTION_KEY` znamená ztrátu přístupu ke všem tajným hodnotám uloženým v databázi.
Jak provést rotaci `ENCRYPTION_KEY` bez výpadku, najdete v [průvodci rotací klíče](/l/cs/developers/self-host/capabilities/key-rotation).
## 2. Konfigurace pouze přes prostředí
```bash
IS_CONFIG_VARIABLES_IN_DB_ENABLED=false
```
**Všechna konfigurace je spravována prostřednictvím souborů `.env`:**
1. Nastavte `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` ve vašem souboru `.env`
2. Přidejte všechny konfigurační proměnné do souboru `.env`
3. Restartujte kontejnery, aby se změny projevily
4. Administrační panel zobrazí aktuální hodnoty, ale nemůže je upravovat
## Režim více pracovních prostorů
Ve výchozím nastavení běží Twenty v **režimu jednoho pracovního prostoru** — ideální pro většinu samostatně hostovaných nasazení, kde potřebujete jednu instanci CRM pro svou organizaci.
### Režim jednoho pracovního prostoru (výchozí)
```bash
IS_MULTIWORKSPACE_ENABLED=false # default
```
* Jeden pracovní prostor na instanci Twenty
* První uživatel se automaticky stává administrátorem s plnými oprávněními (`canImpersonate` a `canAccessFullAdminPanel`)
* Po vytvoření prvního pracovního prostoru jsou nové registrace zakázány.
* Jednoduchá struktura URL: `https://your-domain.com`
### Povolení režimu více pracovních prostorů
```bash
IS_MULTIWORKSPACE_ENABLED=true
DEFAULT_SUBDOMAIN=app # default value
```
Povolte režim více pracovních prostorů pro nasazení typu SaaS, kde více nezávislých týmů potřebuje své vlastní pracovní prostory na téže instanci Twenty.
**Klíčové rozdíly oproti režimu jednoho pracovního prostoru:**
* Na téže instanci lze vytvářet více pracovních prostorů
* Každý pracovní prostor získá vlastní subdoménu (např. `sales.your-domain.com`, `marketing.your-domain.com`)
* Uživatelé se registrují a přihlašují na `{DEFAULT_SUBDOMAIN}.your-domain.com` (např. `app.your-domain.com`)
* Žádná automatická administrátorská oprávnění — první uživatel v každém pracovním prostoru je běžný uživatel
* Nastavení specifická pro pracovní prostor, jako je subdoména a vlastní doména, se zpřístupní v nastavení pracovního prostoru
<Warning>
**Nastavení pouze na úrovni prostředí:** `IS_MULTIWORKSPACE_ENABLED` lze konfigurovat pouze prostřednictvím souboru `.env` a vyžaduje restart. Nelze jej změnit prostřednictvím administračního panelu.
</Warning>
### Konfigurace DNS pro více pracovních prostorů
Při použití režimu více pracovních prostorů nakonfigurujte své DNS pomocí zástupného (wildcard) záznamu, aby bylo možné dynamicky vytvářet subdomény:
```
*.your-domain.com -> your-server-ip
```
Tím se umožní automatické směrování subdomén pro nové pracovní prostory bez ruční konfigurace DNS.
### Omezení vytváření pracovních prostorů
V režimu více pracovních prostorů možná budete chtít omezit, kdo může vytvářet nové pracovní prostory:
```bash
IS_WORKSPACE_CREATION_LIMITED_TO_SERVER_ADMINS=true
```
Pokud je povoleno, pouze uživatelé s `canAccessFullAdminPanel` mohou vytvářet další pracovní prostory. Uživatelé si stále mohou při úvodní registraci vytvořit svůj první pracovní prostor.
## Integrace Gmail & Google Kalendář
### Vytvořte projekt Google Cloud
1. Přejděte na [Google Cloud Console](https://console.cloud.google.com/)
2. Vytvořte nový projekt nebo vyberte existující
3. Povolte tyto API:
* [Gmail API](https://console.cloud.google.com/apis/library/gmail.googleapis.com)
* [Google Calendar API](https://console.cloud.google.com/apis/library/calendar-json.googleapis.com)
* [People API](https://console.cloud.google.com/apis/library/people.googleapis.com)
### Konfigurace OAuth
1. Přejděte na [Pověření](https://console.cloud.google.com/apis/credentials)
2. Vytvořte OAuth 2.0 Client ID
3. Přidejte tyto URI přesměrování:
* `https://{your-domain}/auth/google/redirect` (pro SSO)
* `https://{your-domain}/auth/google-apis/get-access-token` (pro integrace)
### Konfigurace v Twenty
1. Jděte na **Nastavení → Admin panel → Konfigurační proměnné**
2. Najděte sekci **Google Auth**
3. Nastavte tyto proměnné:
* `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`
<Warning>
**Režim pouze s prostředím:** Pokud nastavíte `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, přidejte tyto proměnné do souboru `.env`
</Warning>
**Požadované rozsahy** (automaticky konfigurované):
[Zobrazit relevantní zdrojový kód](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-google-apis-oauth-scopes.ts#L4-L10)
* `https://www.googleapis.com/auth/calendar.events`
* `https://www.googleapis.com/auth/gmail.readonly`
* `https://www.googleapis.com/auth/profile.emails.read`
### Pokud je vaše aplikace v testovacím režimu
Pokud je vaše aplikace v testovacím režimu, budete muset přidat testovací uživatele do vašeho projektu.
V části [Obrazovka souhlasu s OAuth](https://console.cloud.google.com/apis/credentials/consent) přidejte své testovací uživatele do sekce "Testovací uživatelé".
## Integrace Microsoft 365
<Warning>
Uživatelé musí mít [Licence Microsoft 365](https://admin.microsoft.com/Adminportal/Home), aby mohli používat API Kalendáře a Zpráv. Bez něj nebudou moci synchronizovat svůj účet na Twenty.
</Warning>
### Vytvořte projekt v Microsoft Azure
Budete muset vytvořit projekt v [Microsoft Azure](https://portal.azure.com/#view/Microsoft_AAD_IAM/AppGalleryBladeV2) a získat pověření.
### Povoleňte API
Na konzoli Microsoft Azure povolte následující API v "Povoleních":
* Microsoft Graph: Mail.ReadWrite
* Microsoft Graph: Mail.Send
* Microsoft Graph: Calendars.Read
* Microsoft Graph: User.Read
* Microsoft Graph: openid
* Microsoft Graph: email
* Microsoft Graph: profile
* Microsoft Graph: offline_access
<Note>
"Mail.ReadWrite" a "Mail.Send" jsou povinné pouze tehdy, pokud chcete odesílat e-maily pomocí akcí v našich pracovních postupech. Můžete použít "Mail.Read" místo toho, pokud chcete pouze přijímat e-maily.
</Note>
<Note>
"Calendars.ReadWrite" je povinné, pokud chcete vytvářet události v kalendáři pomocí akcí v našich pracovních postupech. Pokud chcete pouze synchronizovat události kalendáře, použijte "Calendars.Read".
</Note>
### Autorizované URI přesměrování
Musíte přidat následující URI přesměrování do vašeho projektu:
* `https://{your-domain}/auth/microsoft/redirect`, pokud chcete použít Microsoft SSO
* `https://{your-domain}/auth/microsoft-apis/get-access-token`
### Konfigurace v Twenty
1. Jděte na **Nastavení → Admin panel → Konfigurační proměnné**
2. Najděte sekci **Microsoft Auth**
3. Nastavte tyto proměnné:
* `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`
<Warning>
**Režim pouze s prostředím:** Pokud nastavíte `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, přidejte tyto proměnné do souboru `.env`
</Warning>
### Konfigurace rozsahů
[Zobrazit relevantní zdrojový kód](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-microsoft-apis-oauth-scopes.ts#L2-L9)
* 'openid'
* 'email'
* 'profil'
* 'offline_access'
* 'Mail.ReadWrite'
* 'Mail.Send'
* 'Calendars.Read'
### Pokud je vaše aplikace v testovacím režimu
Pokud je vaše aplikace v testovacím režimu, budete muset přidat testovací uživatele do vašeho projektu.
Přidejte své testovací uživatele do sekce "Uživatelé a skupiny".
## Pracovní úkoly pro Kalendář & Zprávy
Po konfiguraci integrací Gmail, Google Kalendář nebo Microsoft 365 je třeba spustit úlohy na synchronizaci dat na pozadí.
Zaregistrujte následující opakující se úlohy ve vašem pracovním kontejneru:
```bash
# from your worker container
yarn command:prod cron:messaging:messages-import
yarn command:prod cron:messaging:message-list-fetch
yarn command:prod cron:calendar:calendar-event-list-fetch
yarn command:prod cron:calendar:calendar-events-import
yarn command:prod cron:messaging:ongoing-stale
yarn command:prod cron:calendar:ongoing-stale
yarn command:prod cron:workflow:automated-cron-trigger
```
## Konfigurace Emailu
1. Jděte na **Nastavení → Admin panel → Konfigurační proměnné**
2. Najděte sekci **E-mail**
3. Nakonfigurujte své nastavení SMTP:
<Tabs>
<Tab title="Gmail">
Budete potřebovat zřídit [Heslo aplikace](https://support.google.com/accounts/answer/185833).
* 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'
</Tab>
<Tab title="Office365">
**smtp4dev** je falešný SMTP e-mailový server pro vývoj a testování.
* EMAIL_DRIVER=smtp
* EMAIL_SMTP_HOST=smtp.office365.com
* EMAIL_SMTP_PORT=587
* EMAIL_SMTP_USER=office365_email_address
* EMAIL_SMTP_PASSWORD='office365_password'
</Tab>
<Tab title="smtp4dev">
**smtp4dev** je falešný SMTP e-mailový server pro vývoj a testování.
* Spusťte obraz smtp4dev: `docker run --rm -it -p 8090:80 -p 2525:25 rnwood/smtp4dev`
* Přístup k uživatelskému rozhraní smtp4dev zde: [http://localhost:8090](http://localhost:8090)
* Nastavte následující proměnné:
* EMAIL_DRIVER=smtp
* EMAIL_SMTP_HOST=localhost
* EMAIL_SMTP_PORT=2525
</Tab>
</Tabs>
<Warning>
**Režim pouze s prostředím:** Pokud nastavíte `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, přidejte tyto proměnné do souboru `.env`
</Warning>
## Úložiště S3
<Warning>
Ve výchozím nastavení Twenty ukládá nahrané soubory do místního souborového systému. Pro produkční nasazení použijte S3 nebo službu kompatibilní se S3 (MinIO, DigitalOcean Spaces atd.). aby byly soubory zachovány při restartech kontejnerů a bylo možné škálovat napříč více instancemi serveru.
</Warning>
Nastavte `STORAGE_TYPE=S_3` a nakonfigurujte proměnné `STORAGE_S3_*` prostřednictvím administračního panelu nebo `.env`. Viz [referenci config-variables.ts](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/twenty-config/config-variables.ts) pro úplný seznam proměnných S3.
Při používání S3 s funkcemi závislými na CORS (např. stahování souborů v prohlížeči) se ujistěte, že váš bucket povoluje origin vašeho frontendu Twenty ve své konfiguraci CORS.
## Logické funkce a interpret kódu
Twenty podporuje logické funkce pro pracovní postupy a interpret kódu pro analýzu dat s využitím AI. Obě spouštějí kód poskytnutý uživatelem a z důvodu zabezpečení vyžadují explicitní konfiguraci.
### Výchozí nastavení zabezpečení
**V produkci (NODE_ENV=production):** Jak logické funkce, tak interpret kódu mají ve výchozím nastavení stav **Zakázáno**. Pokud tyto funkce potřebujete, musíte je explicitně povolit pomocí `LOGIC_FUNCTION_TYPE` a `CODE_INTERPRETER_TYPE`.
**V prostředí vývoje (NODE_ENV=development):** Obě mají ve výchozím nastavení **LOCAL** pro pohodlí při lokálním spuštění.
<Warning>
**Upozornění na zabezpečení:** Místní ovladač (`LOGIC_FUNCTION_TYPE=LOCAL` nebo `CODE_INTERPRETER_TYPE=LOCAL`) spouští kód přímo na hostiteli v procesu Node.js bez sandboxu. Měl by být používán pouze pro důvěryhodný kód při vývoji. Pro produkční nasazení, která pracují s nedůvěryhodným kódem, použijte `LOGIC_FUNCTION_TYPE=LAMBDA` nebo `CODE_INTERPRETER_TYPE=E2B` (se sandboxem), případně je ponechte vypnuté.
</Warning>
### Logické funkce - dostupné ovladače
| Ovladač | Proměnná prostředí | Případ použití | Úroveň zabezpečení |
| --------- | ------------------------------ | ------------------------------------------ | ----------------------------------- |
| Neaktivní | `LOGIC_FUNCTION_TYPE=DISABLED` | Úplně zakázat logické funkce | N/A |
| Lokální | `LOGIC_FUNCTION_TYPE=LOCAL` | Vývojová a důvěryhodná prostředí | Nízká (bez sandboxu) |
| Lambda | `LOGIC_FUNCTION_TYPE=LAMBDA` | Produkční prostředí s nedůvěryhodným kódem | Vysoká (izolace na úrovni hardwaru) |
### Logické funkce - doporučená konfigurace
**Pro vývoj:**
```bash
LOGIC_FUNCTION_TYPE=LOCAL # default when NODE_ENV=development
```
**Pro produkci (AWS):**
```bash
LOGIC_FUNCTION_TYPE=LAMBDA
LOGIC_FUNCTION_LAMBDA_REGION=us-east-1
LOGIC_FUNCTION_LAMBDA_ROLE=arn:aws:iam::123456789:role/your-lambda-role
LOGIC_FUNCTION_LAMBDA_ACCESS_KEY_ID=your-access-key
LOGIC_FUNCTION_LAMBDA_SECRET_ACCESS_KEY=your-secret-key
```
**Pro zakázání logických funkcí:**
```bash
LOGIC_FUNCTION_TYPE=DISABLED # default when NODE_ENV=production
```
### Interpret kódu - dostupné ovladače
| Ovladač | Proměnná prostředí | Případ použití | Úroveň zabezpečení |
| --------- | -------------------------------- | ----------------------------------------------- | -------------------------- |
| Neaktivní | `CODE_INTERPRETER_TYPE=DISABLED` | Zakázat spouštění kódu AI | N/A |
| Lokální | `CODE_INTERPRETER_TYPE=LOCAL` | Pouze pro vývoj | Nízká (bez sandboxu) |
| E2B | `CODE_INTERPRETER_TYPE=E_2_B` | Produkční prostředí se sandboxovaným spouštěním | Vysoká (izolovaný sandbox) |
<Note>
Při použití `LOGIC_FUNCTION_TYPE=DISABLED` nebo `CODE_INTERPRETER_TYPE=DISABLED` vrátí každý pokus o spuštění chybu. To je užitečné, pokud chcete provozovat Twenty bez těchto schopností.
</Note>
## API a front-end na samostatných serverech
Platí pouze v případě, že back-end neposkytuje front-end. Nasazení se stejným původem
zde nic nepotřebují.
Uveďte každý původ prohlížeče, který komunikuje s API, oddělený čárkami. `SERVER_URL`
a `FRONTEND_URL` jsou již důvěryhodné. Server zapisuje varování do logu, když jej prohlížeč
volá z nedeklarovaného původu.
```bash
AUTH_COOKIE_ALLOWED_ORIGINS=https://app.example.com
```
<Warning>
Front-end odesílá přihlašovací údaje u každého požadavku a prohlížeče odmítnou
odpověď s přihlašovacími údaji z nedeklarovaného původu, takže se aplikace nenačte, dokud toto nenastavíte.
</Warning>
Pokud jsou dva hostitelé na různých registrovatelných doménách (nejen na různých subdoménách), nastavte také `AUTH_COOKIE_SAME_SITE=none`, což vyžaduje HTTPS.
Je-li povoleno více pracovních prostorů (multi-workspace), neuvádějte zde každou subdoménu pracovního prostoru.
Místo toho směrujte cesty API (`/graphql`, `/metadata`, `/rest`, `/auth/`,
`/client-config`, `/file`) na back-end na každém hostname pracovního prostoru, aby každý
pracovní prostor zůstal ve stejném původu (same-origin) — takto běží Twenty Cloud.

View File

@@ -0,0 +1,255 @@
---
title: Řešení potíží
icon: wrench
---
## Řešení potíží
Pokud narazíte na jakýkoli problém při nastavování prostředí pro vývoj, při aktualizaci své instance nebo při samostatném hostování,
zde jsou některá řešení běžných problémů.
### Vlastní hosting
#### První instalace skončí chybou `password authentication failed for user "postgres"`
🚨 **DŮLEŽITÉ: Toto řešení je POUZE pro nové instalace** 🚨
Pokud máte existující instanci Twenty s produkčními daty, **NEPROVÁDĚJTE** tyto kroky, protože trvale smažou vaši databázi!
Při první instalaci Twenty můžete chtít změnit výchozí heslo pro databázi.
Heslo, které nastavíte během první instalace, se stane trvale uloženým v objemu databáze. Pokud se později pokusíte toto heslo změnit v konfiguraci, aniž byste odstranili starý objem, dojde k chybám autentizace, protože databáze stále používá původní heslo.
⚠️ VAROVÁNÍ: Následující kroky trvale SMAŽÍ veškerá data z databáze! ⚠️
Pokračujte pouze v případě, že se jedná o novou instalaci bez důležitých dat.
Chcete-li aktualizovat `PG_DATABASE_PASSWORD`, potřebujte:
```sh
# Update the PG_DATABASE_PASSWORD in .env
docker compose down --volumes
docker compose up -d
```
#### Nalezeny konce řádků CR [Windows]
K tomu dochází díky znakům s liniovým jádrem Windows v kombinaci s konfigurací Git. Zkuste spustit:
```
git config --global core.autocrlf false
```
Pak smažte úložiště a naklonujte jej znovu.
#### Chybí schéma metadat
Během instalace Twenty musíte nastavit svou postgres databázi s správnými schématy, rozšířeními a uživateli.
Pokud se vám podaří spustit toto nastavování, měli byste mít ve své databázi schémata `default` a `metadata`.
Pokud nemáte, ujistěte se, že na vašem počítači není spuštěna více než jedna PostgreSQL instance.
#### Nelze najít modul 'twenty-emails' ani jeho odpovídající deklarace typů.
Před inicializací databáze musíte vytvořit balíček `dvacet e-mailů` (`npx nx spustit dvacet e-mailů:build`).
#### Chybí balíček twenty-x
Ujistěte se, že v kořenovém adresáři spouštíte `yarn` a poté spusťte `npx nx server:dev twenty-server`. Pokud stále nefunguje, zkuste chybějící balíček sestavit ručně.
#### Lint při ukládání nefunguje
Toto by mělo fungovat přímo s nainstalovaným rozšířením Oxc (`oxc.oxc-vscode`). Pokud to nefunguje, zkuste to přidat do nastavení VS kódu (rozsah dev kontejneru):
```
"editor.codeActionsOnSave": {
"source.fixAll.oxc": "explicit"
}
```
#### Při běhu `npx nx start` nebo `npx nx start 21 front`, je vyhozena chyba mimo paměť
Spusťte pouze služby, které potřebujete, místo `npx nx start`. Například pokud pracujete na serveru, spusťte pouze `npx nx worker twenty-server`
**Pokud to nefunguje:**
Pokud jste se pokusili spustit pouze `npx nx run twenty-server:start` na WSL a selhává to s následující chybou paměti:
`FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory`
Práce je spustit následující příkaz v terminálu, nebo ho přidat do profilu `.bashrc` tak, aby byl použit automaticky:
`export NODE_OPTIONS="--max-old-space-size=8192"`
Příznak --max-old-space-size=8192 nastavuje horní limit 8 GB pro hromadu v Node.js; využití se škáluje s požadavkem aplikace.
Odkaz: https://stackoverflow.com/questions/56982005/where-do-i-set-node-options-max-old-space-size-2048
**Pokud to nefunguje:**
Zjistit, které procesy přebírají většinu RAM. Ve dvaceti letech jsme si všimli, že některá rozšíření VS kódu zabírala spoustu RAM, takže jsme je dočasně zakázali.
**Pokud to nefunguje:**
Restartování zařízení pomáhá vyčistit ducha procesy.
#### Při běhu `npx nx start` se v protokolech objevují podivné [0] a [1]
To je očekávané, protože příkaz `npx nx start` spouští více příkazů v pozadí
#### E-maily nejsou odesílány
Většinou je to proto, že `worker` neběží na pozadí. Zkuste spustit
```
npx nx worker twenty-server
```
#### Nelze připojit můj účet Microsoft 365 k dvaceti
Většinou je to proto, že váš administrátor pro váš účet nepovolil licenci Microsoft 365. Zkontrolujte [https://admin.microsoft.com/](https://admin.microsoft.com/Adminportal/Home).
Pokud máte chybový kód `AADSTS50020`, pravděpodobně používáte osobní účet Microsoft. Tento přístup ještě není podporován. Více informací [zde](https://learn.microsoft.com/fr-fr/troubleshoot/entra/entra-id/app-integration/error-code-aadsts50020-user-account-identity-provider-does-not-exist)
#### Při běhu `yarn` se varování zobrazí v konzoli
Varování informují o načítání dalších závislostí, které nejsou explicitně uvedeny v `package.json`, takže pokud se neobjeví žádná vážná chyba, vše by mělo fungovat podle očekávání.
#### Když uživatel přistupuje na přihlašovací stránku, objeví se v záznamech chyba o neautorizovaném uživateli, který se snaží získat přístup k pracovnímu prostoru
To je očekáváno jako uživatel je neautorizovaný při odhlášení, protože jeho identita nebyla ověřena.
#### Jak zkontrolovat, zda váš worker běží?
* Jděte na [webhook-test.com](https://webhook-test.com/) a zkopírujte **Svou unikátní webhook URL**.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/self-hosting/webhook-test.jpg" alt="Test webhooku" />
</div>
* Otevřete svou Twenty aplikaci, přejděte na `/settings` a na levé dolní části obrazovky aktivujte přepínač **Pokročilé**.
* Vytvořte nový webhook.
* Vložte **Svou unikátní webhook URL** do pole **Endpoint Url** ve Twenty. Nastavte **Filtry** na `Companies` a `Created`.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/self-hosting/webhook-settings.jpg" alt="Nastavení webhooku" />
</div>
* Přejděte na `/objects/companies` a vytvořte nový záznam společnosti.
* Vraťte se na [webhook-test.com](https://webhook-test.com/) a zkontrolujte, zda byla přijata nová **POST request**.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/self-hosting/webhook-test-result.jpg" alt="Výsledek testu webhooku" />
</div>
* Pokud byla přijata **POST request**, váš worker běží úspěšně. V opačném případě je potřeba zkontrolovat váš worker.
#### Front-end se nespustí a chyba vrátí TS5042: Možnost 'project' nemůže být smíchána se zdrojovými soubory na příkazové řádce
Komentář kontrolního skriptu v `packages/twenty-ui/vite-config.ts`, jak je zobrazen v příkladu níže:
```
plugins: [
react({ jsxImportSource: 'react' }),
tsconfigPaths(),
svgr(),
dts(dtsConfig),
// checker(checkersConfig),
wyw({
include: [
'**/OverflowingTextWithTooltip.tsx',
'**/Chip.tsx',
'**/Tag.tsx',
'**/Avatar.tsx',
'**/AvatarChip.tsx',
],
babelOptions: {
presets: ['@babel/preset-typescript', '@babel/preset-react'],
},
}),
],
```
#### Administrační panel není přístupný
Spusťte `UPDATE core."user" SET "canAccessFullAdminPanel" = TRUE WHERE email = 'you@yourdomain.com';` v databázovém kontejneru, abyste získali přístup k administrátorskému panelu.
#### Při spuštění workflow dojde k chybě "Logic function execution is disabled. Set LOGIC_FUNCTION_TYPE to LOCAL or LAMBDA to enable."
V produkčním prostředí jsou logické funkce ve výchozím nastavení zakázané. Nastavte proměnnou prostředí `LOGIC_FUNCTION_TYPE` na `LOCAL` nebo `LAMBDA`, abyste je povolili. Toto lze nakonfigurovat pomocí proměnných prostředí nebo prostřednictvím proměnných databáze v administračním panelu. Podrobnosti najdete v [průvodci nastavením Logic Functions](/l/cs/developers/self-host/capabilities/setup#logic-functions-available-drivers).
#### Když napíšu zprávu v AI chatu, neodpoví okamžitě a musím aktualizovat stránku, abych viděl odpověď
To znamená, že vaší reverzní proxy chybí konfigurace pro streamované API odpovědi. Níže je uveden příklad konfigurace Nginx:
```
location ~* ^/api/.*stream|\/graphql\/stream {
proxy_pass http://twenty_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_request_buffering off;
proxy_cache off;
gzip off;
#chunked_transfer_encoding off;
add_header X-Accel-Buffering no always;
}
```
### Sestavení Dockeru
#### Nelze se přihlásit
Pokud se nemůžete přihlásit po nastavení:
1. Spusťte následující příkazy:
```bash
docker exec -it twenty-server-1 yarn
docker exec -it twenty-server-1 npx nx database:reset --configuration=no-seed
```
2. Restartujte Docker kontejnery:
```bash
docker compose down
docker compose up -d
```
Všimněte si, že příkaz `database:reset` zcela vymaže databázi a znovu ji obnoví od nuly.
#### Problémy s připojením za reverzní proxy
Pokud provozujete Twenty za reverzní proxy a máte problémy s připojením:
1. **Ověřte SERVER_URL:**
Ujistěte se, že `SERVER_URL` ve vašem `.env` souboru odpovídá vaší externí přístupové URL, včetně `https`, pokud je SSL povoleno.
2. **Zkontrolujte nastavení reverzní proxy:**
* Potvrďte, že vaše reverzní proxy správně směruje požadavky na server Twenty.
* Ujistěte se, že záhlaví jako `X-Forwarded-For` a `X-Forwarded-Proto` jsou správně nastaveny.
3. **Restartujte služby:**
Po provedení změn restartujte jak reverzní proxy, tak kontejnery Twenty.
#### Chyba při nahrávání obrázku - přístup odepřen
Změna vlastnictví datové složky na hostiteli z uživatele root na jiného uživatele a skupinu tento problém vyřeší.
#### Chyba „Soubor nenalezen“ při testování funkce Logic v pracovním postupu
Spusťte příkaz `yarn command:prod application:rebuild-default-deps` ve svém kontejneru twenty-server, abyste opravili problém s chybějícími závislostmi.
## Získání pomoci
Pokud se setkáte s problémy, které tento průvodce nepokrývá:
* Zkontrolujte protokoly:
Zobrazte protokoly kontejneru kvůli chybovým zprávám:
```bash
docker compose logs
```
* Podpora komunity:
Obraťte se na [komunitu Twenty](https://github.com/twentyhq/twenty/issues) nebo [podpůrné kanály](https://discord.gg/cx5n4Jzs57) pro pomoc.

View File

@@ -0,0 +1,106 @@
---
title: Průvodce upgradem
icon: arrow-up-right-dots
---
## Obecné pokyny
**Před zahájením procesu aktualizace vždy zálohujte svou databázi** spuštěním:
```bash
docker exec -it {db_container_name_or_id} pg_dumpall -U {postgres_user} > databases_backup.sql
```
Pro obnovení ze zálohy:
```bash
cat databases_backup.sql | docker exec -i {db_container_name_or_id} psql -U {postgres_user}
```
Pokud používáte Docker Compose, postupujte takto:
1. Zastavte Twenty: `docker compose down`
2. Změňte hodnotu `TAG` v souboru `.env` vedle `docker-compose.yml`
3. Spusťte Twenty: `docker compose up -d`
Server při startu automaticky spustí všechny požadované migrační kroky upgradu. Není potřeba žádný ruční příkaz.
## Upgrade na v2.34+ — vyžaduje minimálně PostgreSQL 15
Twenty v2.34 vyžaduje PostgreSQL 15 nebo novější. Oficiální konfigurace Docker Compose používá PostgreSQL 16. Pokud se vaše instance připojuje k externě spravované databázi, upgradujte ji před spuštěním serveru v2.34.
## Upgrade napříč verzemi (v1.23+)
Počínaje **v1.23** podporuje Twenty upgrade napříč verzemi. Můžete přejít přímo z jakékoli podporované verze na nejnovější vydání, aniž byste museli procházet každou meziverzí.
Například přechod z v1.23 přímo na v2.0 je plně podporován.
## Aktualizace na v2.5+ — obálka pro šifrování dat v klidu
Od **v2.5** ukládá Twenty tajné údaje v klidu (OAuth tokeny, aplikační proměnné, privátní klíče pro podepisování, citlivé konfigurační hodnoty, TOTP tajemství) do verzované obálky `enc:v2:`, která je šifrovaná pomocí `ENCRYPTION_KEY` (nebo `APP_SECRET`, pokud není `ENCRYPTION_KEY` nastavený).
Při prvním startu na v2.5 se spustí pomalé aktualizační příkazy, které **zpětně doplní** stávající řádky do nové obálky. Jsou idempotentní — při přerušení a opětovném spuštění server pokračuje tam, kde skončil — ale u velkých databází to může chvíli trvat. Postup můžete sledovat pomocí `upgrade:status`.
Měli byste nastavit vyhrazený `ENCRYPTION_KEY` **před** upgradem na v2.5, aby zpětné doplňování od začátku zapisovalo řádky pod tímto klíčem. Změna klíčů po dokončení doplnění vyžaduje [rotaci](/l/cs/developers/self-host/capabilities/key-rotation).
## Rotace tajemství a podepisovacích klíčů
Pro běžné provozní úkony, jako je rotace `ENCRYPTION_KEY`, rotace podepisovacího klíče JWT nebo zneplatnění uniklého podepisovacího klíče, viz samostatný [průvodce rotací klíčů](/l/cs/developers/self-host/capabilities/key-rotation).
## Kontrola stavu upgradu
Příkaz `upgrade:status` vám umožní zkontrolovat aktuální stav vaší instance a migrací pracovních prostorů. Je užitečný pro ladění problémů s upgradem nebo při podávání požadavku na podporu.
Spusťte jej z kontejneru serveru:
```bash
docker exec -it {server_container_name_or_id} yarn command:prod upgrade:status
```
Ukázkový výstup:
```sh
APP_VERSION: v1.23.0
Instance
Inferred version: 1.23.0
Latest command: 1.23.0_DropWorkspaceVersionColumnFastInstanceCommand_1785000000000
Status: Up to date
Executed by: v1.23.0
At: 2026-04-16T11:43:58.823Z
Workspace
Apple (20202020-1c25-4d02-bf25-6aeccf7ea419)
Inferred version: 1.23.0
Latest command: 1.23.0_UpdateGlobalObjectContextCommandMenuItemsCommand_1780000005000
Status: Up to date
Executed by: v1.23.0
At: 2026-04-16T11:44:09.361Z
Summary
Instance: Up to date
Workspaces: 1 up to date, 0 behind, 0 failed (1 total)
```
### Možnosti
| Přepínač | Popis |
| ------------------------- | ------------------------------------------------------------------------------------ |
| `-w, --workspace-id <id>` | Omezí se na konkrétní pracovní prostor. Lze zadat vícekrát. |
| `-f, --failed-only` | Skryje aktuální pracovní prostory; zobrazí pouze ty, které jsou pozadu, a neúspěšné. |
## Řešení potíží
Pokud upgrade selže u některých pracovních prostorů, server nepokročí za chybující krok. Restartování serveru (`docker compose up -d`) zkusí upgrade znovu od místa, kde se zastavil.
Pro rychlou identifikaci problémů spusťte:
```bash
docker exec -it {server_container_name_or_id} yarn command:prod upgrade:status --failed-only
```
Tímto se zobrazí pouze pracovní prostory, které jsou pozadu nebo selhaly, spolu s chybovou zprávou pro každé selhání.
## Před v1.23
Pokud je vaše instance starší než v1.23, musíte upgradovat postupně přes každou hlavní označenou verzi (z v1.6 na v1.7, poté z v1.7 na v1.8 atd.), dokud nedosáhnete v1.23. Odtud můžete přejít přímo na nejnovější verzi.