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

263 lines
8.7 KiB
Plaintext

---
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>