> ## Documentation Index
> Fetch the complete documentation index at: https://help.teable.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Docker デプロイ

<Callout type="info">
  **Docker Compose は小規模チームと評価用途に推奨されます**（50ユーザー未満）。
  この方法が適切かわからない場合は、[デプロイ](/ja/deploy/choose)から始めてください。AI機能またはアプリビルダーが必要な場合、新規環境には[フル機能プラットフォーム](/ja/deploy/architecture)をデプロイします。すでにこのスタンドアロン構成を運用している場合は、[移行ガイド](https://github.com/teableio/teable-deployment/blob/main/migration/2026-07-basic-to-full-featured.md)に従ってください。データはそのまま維持されます。
</Callout>

## Docker Compose デプロイ

**推奨規模**：0～50ユーザー

| 利点      | 欠点                    |
| ------- | --------------------- |
| デプロイが簡単 | 1台のマシンへのデプロイとなり、拡張が複雑 |
| 完全に制御可能 |                       |
| 柔軟な設定   |                       |

**サーバー要件**

サーバーが次の基本要件を満たしていることを確認してください。

* オペレーティングシステム：Ubuntu 20.04 LTS など、推奨される Linux ディストリビューション
* メモリ：最低 4GB RAM
* CPU：2コア以上
* ディスク容量：最低 40GB の空き容量
* ネットワーク：必要なポートへアクセスできる安定したインターネット接続

#### 前提条件

開始する前に、次の点を確認してください。

* Docker とコンテナ化の原則について基本的な知識がある
* マシンに Docker と Docker Compose がインストールされている。インストールガイドについては、Docker の公式ドキュメントを参照してください。

### **Docker をインストールする**

```bash theme={null}
# 最新版の Docker をダウンロード
curl -fsSL https://get.docker.com | bash -s docker

# インストールを確認
docker --version
docker-compose --version
```

### アプリケーションをインストールする

#### docker-compose.yaml ファイルを作成する

サーバーにアクセスし、teable フォルダーを作成して移動します。

```bash theme={null}
mkdir teable

cd teable
```

`docker-compose.yaml` と `.env` ファイルを作成し、次の内容を貼り付けます。

```bash theme={null}
vim docker-compose.yaml
```

#### **最小構成のデプロイ：**

```yaml docker-compose.yaml theme={null}
services:
  teable:
    image: ghcr.io/teableio/teable:latest
    restart: always
    ports:
      - '3000:3000'
    volumes:
      - teable-data:/app/.assets:rw
    env_file:
      - .env
    environment:
      - NEXT_ENV_IMAGES_ALL_REMOTE=true
    networks:
      - teable
    depends_on:
      teable-db:
        condition: service_healthy
      teable-cache:
        condition: service_healthy
    healthcheck:
      test: ['CMD', 'curl', '-f', 'http://localhost:3000/health']
      start_period: 5s
      interval: 5s
      timeout: 3s
      retries: 3

  teable-db:
    image: postgres:15.4
    restart: always
    ports:
      - '42345:5432'
    volumes:
      - teable-db:/var/lib/postgresql/data:rw
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    networks:
      - teable
    healthcheck:
      test: ['CMD-SHELL', "sh -c 'pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}'"]
      interval: 10s
      timeout: 3s
      retries: 3

  teable-cache:
    image: redis:7.2.4
    restart: always
    expose:
      - '6379'
    volumes:
      - teable-cache:/data:rw
    networks:
      - teable
    command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD}
    healthcheck:
      test: ['CMD', 'redis-cli', '--raw', 'incr', 'ping']
      interval: 10s
      timeout: 3s
      retries: 3

networks:
  teable:
    name: teable-network

volumes:
  teable-db: {}
  teable-data: {}
  teable-cache: {}
```

```bash .env theme={null}
# 以下のデフォルトパスワードを、8文字以上の強力なパスワード（ASCII）に置き換えてください。
POSTGRES_PASSWORD=replace_this_password
REDIS_PASSWORD=replace_this_password
SECRET_KEY=replace_this_secret_key

# 以下を外部からアクセス可能なアドレスに置き換えてください
PUBLIC_ORIGIN=http://127.0.0.1:3000

# ---------------------

# Postgres
POSTGRES_HOST=teable-db
POSTGRES_PORT=5432
POSTGRES_DB=teable
POSTGRES_USER=teable

# Redis
REDIS_HOST=teable-cache
REDIS_PORT=6379
REDIS_DB=0

# アプリ
PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
BACKEND_CACHE_PROVIDER=redis
BACKEND_CACHE_REDIS_URI=redis://default:${REDIS_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}/${REDIS_DB}
```

#### **ストレージサービスを追加する（任意）**

本番環境では、耐久性と拡張性を高めるため、**S3互換オブジェクトストレージ**（S3、MinIO、S3互換エンドポイントを備えた OSS／OBS／COS、その他のS3互換サービスなど）を使用してください。

<Tabs>
  <Tab title="docker-compose に MinIO を追加する">
    MinIO は、追加のストレージ管理画面（9001番ポート）と、より強力で安定したファイルサービスを提供します。

    ```yaml docker-compose.yaml theme={null}
    services:
      # ...前の内容
      teable-storage:
        image: minio/minio:RELEASE.2024-02-17T01-15-57Z
        ports:
          - "9000:9000"
          - "9001:9001"
        environment:
          - MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY}
          - MINIO_SECRET_KEY=${MINIO_SECRET_KEY}
        volumes:
          - teable-storage:/data:rw
        networks:
          - teable
        command: server /data --console-address ":9001"
      createbuckets:
        image: minio/mc
        networks:
          - teable
        entrypoint: >
          /bin/sh -c "
          /usr/bin/mc alias set teable-storage http://teable-storage:9000 ${MINIO_ACCESS_KEY} ${MINIO_SECRET_KEY};
          /usr/bin/mc mb teable-storage/public;
          /usr/bin/mc anonymous set public teable-storage/public;
          /usr/bin/mc mb teable-storage/private;
          exit 0;
          "
        depends_on:
          teable-storage:
            condition: service_started

    networks:
      teable:
        name: teable-network

    volumes:
      teable-db: {}
      teable-cache: {}
      # 新しいボリュームを追加
      teable-storage: {}

    ```

    ```bash .env theme={null}
    # 以下のデフォルトパスワードを、8文字以上の強力なパスワード（ASCII）に置き換えてください。
    POSTGRES_PASSWORD=replace_this_password
    REDIS_PASSWORD=replace_this_password
    SECRET_KEY=replace_this_secret_key

    # HTTPS を有効にする場合は、PROTOCOL を https に設定します。
    PROTOCOL=http
    # PUBLIC_HOST をデプロイ先のIPまたはドメイン名に設定します。localhost または 127.0.0.1 は使用できません。
    PUBLIC_HOST=192.168.x.x
    # 最後のポートをアクセス用ポートに合わせて変更します。標準ポート（80／443）を使用する場合は :port を削除します。
    PUBLIC_ORIGIN=${PROTOCOL}://${PUBLIC_HOST}:3000

    # ---------------------

    # Postgres
    POSTGRES_HOST=teable-db
    POSTGRES_PORT=5432
    POSTGRES_DB=teable
    POSTGRES_USER=teable

    # Redis
    REDIS_HOST=teable-cache
    REDIS_PORT=6379
    REDIS_DB=0

    # Minio
    MINIO_ACCESS_KEY=teable_minio_access
    MINIO_SECRET_KEY=${SECRET_KEY}

    # アプリ
    PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
    BACKEND_CACHE_PROVIDER=redis
    BACKEND_CACHE_REDIS_URI=redis://default:${REDIS_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}/${REDIS_DB}
    BACKEND_STORAGE_PROVIDER=minio
    BACKEND_STORAGE_PUBLIC_BUCKET=public
    BACKEND_STORAGE_PRIVATE_BUCKET=private
    BACKEND_STORAGE_MINIO_USE_SSL=false # HTTPS を有効にする場合は、この値を true に変更します
    BACKEND_STORAGE_MINIO_ENDPOINT=${PUBLIC_HOST}
    BACKEND_STORAGE_MINIO_PORT=9000
    BACKEND_STORAGE_MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY}
    BACKEND_STORAGE_MINIO_SECRET_KEY=${MINIO_SECRET_KEY}
    STORAGE_PREFIX=${PROTOCOL}://${PUBLIC_HOST}:${BACKEND_STORAGE_MINIO_PORT}
    ```
  </Tab>

  <Tab title="外部の MinIO に接続する">
    開始する前に、MinIO に2つのバケットを作成する必要があります。公開バケットにはプロフィール画像とフォームのヘッダーを、非公開バケットには添付ファイルの内容を保存します。

    ```sh .env theme={null}
    # ...前の内容
    # minio プロバイダーを使用
    BACKEND_STORAGE_PROVIDER=minio
    # 公開バケット名
    BACKEND_STORAGE_PUBLIC_BUCKET=public
    # 非公開バケット名
    BACKEND_STORAGE_PRIVATE_BUCKET=private
    # Minio サービスのエンドポイントIPまたはドメイン名
    BACKEND_STORAGE_MINIO_ENDPOINT=minio.example.com
    # Minio のポート
    BACKEND_STORAGE_MINIO_PORT=443
    # HTTPS が有効かどうか
    BACKEND_STORAGE_MINIO_USE_SSL=true
    # minio のアクセスキー
    BACKEND_STORAGE_MINIO_ACCESS_KEY=_minio_access_key_
    # minio のシークレットキー
    BACKEND_STORAGE_MINIO_SECRET_KEY=_minio_secret_key_
    # 完全なアクセスアドレス
    STORAGE_PREFIX=https://minio.example.com

    # ---内部ネットワーク設定（任意）---
    # 内部 Minio サービスのエンドポイントIPまたはドメイン名（HTTPS には非対応）
    BACKEND_STORAGE_MINIO_INTERNAL_ENDPOINT=teable-storage.internal
    # 内部 Minio のポート
    BACKEND_STORAGE_MINIO_INTERNAL_PORT=9000
    # ---リージョン設定（任意）---
    # リージョン名
    BACKEND_STORAGE_MINIO_REGION=us-east-1

    ```
  </Tab>

  <Tab title="AWS S3 に接続する">
    <Note>
      注：**2つのバケット**（公開／非公開）を設定する必要があります。**公開バケット**は **public-read** で、**任意のオリジンに対する CORS** を許可する必要があります。そうしないと、ブラウザーからアクセスできない場合があります。
    </Note>

    開始する前に、AWS S3 に2つのバケットを作成する必要があります。公開バケットにはアバターとフォームのヘッダーを、非公開バケットには添付ファイルの内容を保存します。

    ```sh .env theme={null}
    # ...前の内容
    # 標準の S3 プロバイダーを使用
    BACKEND_STORAGE_PROVIDER=s3
    # リージョン名
    BACKEND_STORAGE_S3_REGION=us-west-2
    # エンドポイント。プロトコルを含める必要があります（通常は https）
    BACKEND_STORAGE_S3_ENDPOINT=https://s3.us-west-2.amazonaws.com
    # アクセスキー
    BACKEND_STORAGE_S3_ACCESS_KEY=access_key
    # シークレットキー
    BACKEND_STORAGE_S3_SECRET_KEY=secret_key
    # 公開バケット
    BACKEND_STORAGE_PUBLIC_BUCKET=your-public-bucket
    # 非公開バケット
    BACKEND_STORAGE_PRIVATE_BUCKET=your-private-bucket
    # 完全なアクセスアドレス。公開バケットのアクセスアドレスです
    STORAGE_PREFIX=https://your-public-bucket.s3.us-west-2.amazonaws.com

    ```

    この手順は、AWS S3 だけでなく、ほとんどのクラウドプロバイダーに適用できます。
  </Tab>
</Tabs>

#### アプリケーションを起動する

現在のディレクトリで次のコマンドを実行し、アプリケーションを起動します。起動後、127.0.0.1:3000 でアプリケーションにアクセスできます。

<Note>
  大規模なデータコピー操作には HTTPS 環境が必要です。HTTPS がない場合、非同期のクリップボードアクセスを利用できません。
</Note>

```bash theme={null}
docker-compose pull

docker-compose up -d
```

#### マネージドデータベースを使用する（任意）

マネージドデータベースを使用すると、デプロイ手順をさらに簡略化できます。

1. services.teable-db を削除します
2. volumes.teable-db を削除します
3. マネージドデータベースの設定に合わせて .env を更新します

データベースのパラメーターに、マネージドデータベースの接続情報を入力します。

```sh .env theme={null}
POSTGRES_HOST=your-database.com
POSTGRES_PORT=5432
POSTGRES_DB=teable
POSTGRES_USER=teable
```

<Note>
  `127.0.0.1` はコンテナの内部ネットワークを示します。ローカルにデプロイしたデータベースへ接続する場合は、ホストアドレスに `127.0.0.1` ではなく `host.docker.internal` を使用してください。そうしないと接続に失敗します。
</Note>

**外部のマネージド Redis についても同様です：**

* service.teable-cache を削除します
* service.teable.depends\_on.teable-cache を削除します
* volumes.teable-cache を削除します
* マネージド Redis の設定に合わせて .env を更新します

### 次のステップ

[メールサービスを設定する](/ja/deploy/email)

## サポートとフィードバック

デプロイ中に問題が発生した場合は、[support@teable.ai](mailto:support@teable.ai) でサポートチームへお問い合わせいただくか、[問題を報告](https://github.com/teableio/teable/issues)してください。

## ライセンス

Teable には、AGPL-3.0 ライセンスに基づくオープンソースの Community 機能が含まれています。セルフホスト環境で有料機能を利用するには、[料金ページ](https://app.teable.ai/public/pricing?host=self-hosted\&billing=year)で購読してください。

<Note>
  `ghcr.io/teableio/teable:latest` イメージには、すべての機能が含まれています。有料機能を有効にするには、有効なサブスクリプションライセンスが必要です。

  オープンソースの Community 機能だけが必要な場合は、`ghcr.io/teableio/teable-community:latest` イメージを選択できます。
</Note>

## よくある問題

<Accordion title="初回デプロイ後にログインするにはどうすればよいですか？">
  インスタンスの起動後、そのURLを開いてアカウントを作成します。Teable にはあらかじめ設定された管理者アカウントは含まれておらず、セルフホストのインスタンスでは teable.ai のクラウドアカウントを使用しません。

  インスタンスで最初に登録したユーザーがインスタンス管理者になります。
</Accordion>

<Accordion title="インストール後に CSV／xlsx のインポートや画像のアップロードができないのはなぜですか？">
  ファイルのインポートに関する問題は、通常、PUBLIC\_ORIGIN 環境変数の設定が正しくないことが原因です。PUBLIC\_ORIGIN を現在アクセス可能なアドレスに設定する必要があります。

  ```bash theme={null}
  # ローカル開発の場合
  PUBLIC_ORIGIN=http://127.0.0.1:3000

  # ローカルネットワークからアクセスする場合
  PUBLIC_ORIGIN=http://192.168.1.100:3000

  # ドメイン名でアクセスする場合
  PUBLIC_ORIGIN=https://teable.example.com
  ```

  <Callout type="warning">
    重要：URLの末尾にスラッシュ（"/"）を付けないでください。
  </Callout>

  この設定を変更した後は、変更を反映するために Teable インスタンスを再起動する必要があります。
</Accordion>

<Accordion title="HTTPS を有効にする方法">
  HTTPS を有効にするには、次の手順を実行します。

  * 有効な SSL 証明書を取得します
  * `PROTOCOL=https` を設定します（構成によっては `PUBLIC_ORIGIN=https://teable.example.com` を設定します）
  * MinIO を使用する場合は、`BACKEND_STORAGE_MINIO_USE_SSL=true` を設定します

  <Tip>
    SSL終端の処理には、Nginx や Traefik などのリバースプロキシを使用することを推奨します。
  </Tip>

  <Tip>
    Nginx の設定方法（HTTPS／証明書、WebSocket、Docker ネットワーク、Nginx Proxy Manager など）がわからない場合は、[Nginx（リバースプロキシ）](/ja/deploy/nginx)を参照してください。
  </Tip>
</Accordion>

<Accordion title="データをバックアップするにはどうすればよいですか？">
  Docker Compose 環境では、複数のバックアップ方法を利用できます。

  **オプション1：仮想マシン全体のバックアップ**（簡単な方法として推奨）

  * Teable をホストしている仮想マシン全体を定期的にバックアップします
  * システム全体を復旧できます

  **オプション2：Docker ボリュームのバックアップ**

  * `docker-compose.yaml` で定義されているすべての Docker ボリュームをバックアップします
  * ボリュームを一覧表示：`docker volume ls`
  * ボリュームをバックアップ：
    ```bash theme={null}
    docker run --rm -v <ボリューム名>:/data -v $(pwd):/backup alpine tar czf /backup/<ボリューム名>.tar.gz /data
    ```

  **オプション3：コンポーネント単位のバックアップ**（詳細に制御する場合に推奨）

  * **PostgreSQL データベース**：テーブルの全データを含みます
    ```bash theme={null}
    docker exec teable-db pg_dump -U teable teable > backup.sql
    ```
  * **Redis データベース**：オートメーションのキューデータを含みます
    ```bash theme={null}
    docker exec teable-cache redis-cli --rdb /data/dump.rdb
    ```
  * **データディレクトリ**：`teable-data` ボリュームをバックアップします（すべての添付ファイルを含みます）
    ```bash theme={null}
    docker run --rm -v teable-data:/data -v $(pwd):/backup alpine tar czf /backup/teable-data.tar.gz /data
    ```

  本番環境では、保持ポリシーを設定した日次自動バックアップを推奨します。
</Accordion>
