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
263 lines
12 KiB
Plaintext
263 lines
12 KiB
Plaintext
---
|
||
title: Docker Compose
|
||
icon: docker
|
||
---
|
||
|
||
<Warning>
|
||
Docker コンテナーは、本番環境でのホスティングまたはセルフホスティング向けです。 コントリビュートする場合は、[ローカルセットアップ](/l/ja/developers/contribute/capabilities/local-setup)を確認してください。
|
||
</Warning>
|
||
|
||
## 概要
|
||
|
||
このガイドは、Docker Composeを使用してTwentyアプリケーションをインストールおよび構成するためのステップバイステップの手順を提供します。 プロセスを簡単にし、設定を破壊する可能性のある一般的な落とし穴を防止することが目的です。 プロセスを簡単にし、設定を破壊する可能性のある一般的な落とし穴を防止することが目的です。 プロセスを簡単にし、設定を破壊する可能性のある一般的な落とし穴を防止することが目的です。 プロセスを簡単にし、設定を破壊する可能性のある一般的な落とし穴を防止することが目的です。
|
||
|
||
**重要:** このガイドで明示的に言及されている設定のみを変更してください。 他の構成を変更すると、問題が発生する可能性があります。 他の構成を変更すると、問題が発生する可能性があります。 他の構成を変更すると、問題が発生する可能性があります。
|
||
|
||
高度な構成については、[環境変数の設定](/l/ja/developers/self-host/capabilities/setup)を参照してください。 すべての環境変数は、変数に応じて、サーバーレベルまたはワーカーレベル(またはその両方)で、`docker-compose.yml`ファイルに宣言する必要があります。
|
||
|
||
## システム要件
|
||
|
||
* RAM: 環境に最低2GBのRAMがあることを確認してください。 メモリが不足するとプロセスがクラッシュすることがあります。 メモリが不足するとプロセスがクラッシュすることがあります。 メモリが不足するとプロセスがクラッシュすることがあります。 メモリが不足するとプロセスがクラッシュすることがあります。 メモリが不足するとプロセスがクラッシュすることがあります。 メモリが不足するとプロセスがクラッシュすることがあります。 メモリが不足するとプロセスがクラッシュすることがあります。
|
||
* Docker & Docker Compose: 両方がインストールされ、最新であることを確認してください。
|
||
|
||
## オプション 1: ワンラインスクリプト
|
||
|
||
単一のコマンドで最新版のTwentyをインストールします:
|
||
|
||
```bash
|
||
bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
|
||
```
|
||
|
||
特定のバージョンまたはブランチをインストールするには:
|
||
|
||
```bash
|
||
VERSION=vx.y.z BRANCH=branch-name bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
|
||
```
|
||
|
||
* x.y.zを希望するバージョン番号に置き換えます。
|
||
* branch-nameをインストールしたいブランチの名前に置き換えます。
|
||
|
||
## オプション 2: 手動の手順
|
||
|
||
マニュアルセットアップには、これらの手順に従ってください。
|
||
|
||
### ステップ 1: 環境ファイルを設定
|
||
|
||
1. **.env ファイルを作成**
|
||
|
||
例の環境ファイルを作業ディレクトリに新しい.envファイルとしてコピーします:
|
||
|
||
```bash
|
||
curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example
|
||
```
|
||
|
||
2. **暗号化キーを生成する**
|
||
|
||
ユニークなランダム文字列を生成するには、次のコマンドを実行します:
|
||
|
||
```bash
|
||
openssl rand -base64 32
|
||
```
|
||
|
||
**重要:** この値を秘密にしてください/共有しないでください。 `ENCRYPTION_KEY` を失うことは、データベースに保存されているすべてのシークレット(OAuth トークン、アプリケーション変数、TOTP シークレットなど)へのアクセスを失うことを意味します。
|
||
|
||
3. **`.env`を更新**
|
||
|
||
生成したトークンで.envファイルのプレースホルダー値を置き換えます:
|
||
|
||
```ini
|
||
ENCRYPTION_KEY=random_string
|
||
```
|
||
|
||
ダウンタイムなしでキーをローテーションする手順については、[キーのローテーションガイド](/l/ja/developers/self-host/capabilities/key-rotation)を参照してください。
|
||
|
||
4. **Postgres パスワードを設定**
|
||
|
||
特殊文字を含まない強力なパスワードで、.envファイルの`PG_DATABASE_PASSWORD`値を更新します。
|
||
|
||
```ini
|
||
PG_DATABASE_PASSWORD=my_strong_password
|
||
```
|
||
|
||
### ステップ 2: Docker Compose ファイルを取得
|
||
|
||
作業ディレクトリに`docker-compose.yml`ファイルをダウンロードします:
|
||
|
||
```bash
|
||
curl -o docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/docker-compose.yml
|
||
```
|
||
|
||
### ステップ 3: アプリケーションを起動
|
||
|
||
Dockerコンテナを開始します:
|
||
|
||
```bash
|
||
docker compose up -d
|
||
```
|
||
|
||
### ステップ 4: アプリケーションにアクセス
|
||
|
||
自分のコンピュータでtwentyCRMをホストしている場合は、ブラウザを開いて[http://localhost:3000](http://localhost:3000)にアクセスします。
|
||
|
||
サーバーでホストしている場合、サーバーが稼働していてすべてが正常であるかを確認してください
|
||
|
||
```bash
|
||
curl http://localhost:3000
|
||
```
|
||
|
||
## 構成
|
||
|
||
### Twentyを外部アクセスに公開
|
||
|
||
デフォルトでは、Twentyはポート`3000`で`localhost`上で動作します。 外部ドメインまたはIPアドレス経由でアクセスするには、`.env`ファイルで`SERVER_URL`を構成する必要があります。 UI はブラウザー自身のオリジンから API を解決するため、コンテナに到達できる任意のホスト名から読み込まれます。ただし、`SERVER_URL` には必ずパブリック URL を設定してください。サーバーは、生成されるリンク(メール、OAuth コールバック)や、安全な Cookie のための HTTPS 検出にそれを使用します。
|
||
|
||
#### `SERVER_URL`の理解
|
||
|
||
* **プロトコル:** 設定に応じて`http`または`https`を使用します。
|
||
* SSLを設定していない場合は`http`を使用します。
|
||
* SSLを構成済みの場合は`https`を使用します。
|
||
* **ドメイン/IP:** これは、アプリケーションがアクセス可能なドメイン名またはIPアドレスです。
|
||
* **ポート:** デフォルトのポート(`http`は`80`、`https`は`443`)以外を使用している場合、ポート番号を含めます。
|
||
|
||
### SSL 要件
|
||
|
||
SSL(HTTPS)は、特定のブラウザ機能が正しく動作するために必要です。 SSL(HTTPS)は、特定のブラウザ機能が正しく動作するために必要です。 SSL(HTTPS)は、特定のブラウザ機能が正しく動作するために必要です。 これらの機能は、ローカル開発中に動作するかもしれませんが(ブラウザがlocalhostを異なる扱い方をするため)、Twentyを通常のドメインでホスティングする場合、適切なSSLの設定が必要です。
|
||
|
||
たとえば、クリップボードAPIは安全なコンテキストが必要かもしれません - アプリケーション全体でのコピー ボタンのような機能は、HTTPSが有効でないと動作しないかもしれません。
|
||
|
||
最適なセキュリティと機能のために、SSL終了を備えたリバースプロキシの背後にTwentyを設定することを強くお勧めします。
|
||
|
||
#### `SERVER_URL`の構成
|
||
|
||
1. **アクセスURLを特定する**
|
||
* **リバースプロキシがない場合(直接アクセス):**
|
||
|
||
リバースプロキシなしでアプリケーションに直接アクセスする場合:
|
||
|
||
```ini
|
||
SERVER_URL=http://your-domain-or-ip:3000
|
||
```
|
||
|
||
* **リバースプロキシを使用する場合(標準ポート):**
|
||
|
||
NginxやTraefikのようなリバースプロキシを使用し、SSLを構成している場合:
|
||
|
||
```ini
|
||
SERVER_URL=https://your-domain-or-ip
|
||
```
|
||
|
||
* **リバースプロキシを使用する場合(カスタムポート):**
|
||
|
||
標準以外のポートを使用している場合:
|
||
|
||
```ini
|
||
SERVER_URL=https://your-domain-or-ip:custom-port
|
||
```
|
||
|
||
2. **.env ファイルを更新**
|
||
|
||
.env`ファイルを開き、`SERVER_URL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\`を更新します:
|
||
|
||
```ini
|
||
SERVER_URL=http(s)://your-domain-or-ip:your-port
|
||
```
|
||
|
||
**例:**
|
||
|
||
* SSLなしの直接アクセス:
|
||
```ini
|
||
SERVER_URL=http://123.45.67.89:3000
|
||
```
|
||
* ドメイン経由でSSLを使用してアクセス:
|
||
```ini
|
||
SERVER_URL=https://mytwentyapp.com
|
||
```
|
||
|
||
3. **アプリケーションを再起動**
|
||
|
||
変更を反映するために、Dockerコンテナを再起動します:
|
||
|
||
```bash
|
||
docker compose down
|
||
docker compose up -d
|
||
```
|
||
|
||
#### 考慮事項
|
||
|
||
* **リバースプロキシ構成:**
|
||
|
||
リバースプロキシが正しい内部ポート(デフォルトでは`3000`)にリクエストを転送することを確認してください。 SSL終端と必要なヘッダーを設定します。 SSL終端と必要なヘッダーを設定します。 SSL終端と必要なヘッダーを設定します。
|
||
|
||
* **ファイアウォール設定:**
|
||
|
||
外部アクセスを許可するためにファイアウォールで必要なポートを開けます。
|
||
|
||
* **一貫性:**
|
||
|
||
`SERVER_URL`は、ユーザーがブラウザでアプリケーションにアクセスする方法と一致する必要があります。
|
||
|
||
#### 永続性
|
||
|
||
* **データボリューム:**
|
||
|
||
Docker Compose 構成では、データベースとサーバーストレージのデータを永続化するためにボリュームを使用します。
|
||
|
||
* **ステートレス環境:**
|
||
|
||
ステートレス環境(例: 一部のクラウドサービス)に展開する場合、データを永続化するために外部ストレージを設定します。
|
||
|
||
## バックアップと復元
|
||
|
||
定期的なバックアップは、CRM データを損失から保護します。
|
||
|
||
### データベースのバックアップを作成
|
||
|
||
```bash
|
||
docker exec twenty-postgres pg_dump -U postgres twenty > backup_$(date +%Y%m%d).sql
|
||
```
|
||
|
||
### 日次バックアップを自動化
|
||
|
||
crontab に追加 (`crontab -e`):
|
||
|
||
```bash
|
||
0 2 * * * docker exec twenty-postgres pg_dump -U postgres twenty > /backups/twenty_$(date +\%Y\%m\%d).sql
|
||
```
|
||
|
||
### バックアップから復元
|
||
|
||
1. アプリケーションを停止します:
|
||
|
||
```bash
|
||
docker compose stop server worker
|
||
```
|
||
|
||
2. データベースを復元します:
|
||
|
||
```bash
|
||
docker exec -i twenty-postgres psql -U postgres twenty < backup_20240115.sql
|
||
```
|
||
|
||
3. サービスの再起動:
|
||
|
||
```bash
|
||
docker compose up -d
|
||
```
|
||
|
||
### バックアップのベストプラクティス
|
||
|
||
* **復元を定期的にテスト** — バックアップが実際に機能することを確認
|
||
* **バックアップをオフサイトに保管** — クラウドストレージ (S3, GCS など) を使用
|
||
* **機密データを暗号化** — バックアップを暗号化で保護
|
||
* **複数のコピーを保持** — 日次・週次・月次のバックアップを保持
|
||
|
||
## トラブルシューティング
|
||
|
||
問題が発生した場合は、[トラブルシューティング](/l/ja/developers/self-host/capabilities/troubleshooting)を確認して解決策を見つけてください。
|
||
|
||
## マネージドホスティング
|
||
|
||
<Tip>
|
||
Twenty を自分で運用・保守したくない場合は? [認定済みの Twenty ホスティングパートナー](https://twenty.com/partners/list?categories=HOSTING\&ref=docs-docker-compose)に依頼して、インスタンスのデプロイ、ホスティング、管理をエンドツーエンドで任せましょう。 *(または、私たちのチームにご連絡ください: [contact@twenty.com](mailto:contact@twenty.com)。)*
|
||
</Tip>
|