New APINew API
利用ガイドインストールAPIリファレンスAIアプリケーションSkillsヘルプ&サポートビジネス協力

Docker Compose 設定説明

このドキュメントでは、New API の Docker Compose 設定オプションについて詳しく説明します。これらのオプションは、さまざまなデプロイシナリオで使用できます。

基本的な設定構造

docker-compose.yml は New API と依存サービスのデプロイ方法を定義します。標準構成では PostgreSQL と Redis を優先し、MySQL は互換オプションとして利用できます。

標準設定(本番環境推奨)

以下は、ほとんどの本番環境に適した標準的な Docker Compose 設定です。

# New-API Docker Compose 設定
#
# クイックスタート:
#   1. docker-compose up -d
#   2. http://localhost:3000 でアクセス
#
# PostgreSQL の代わりに MySQL を使用する場合:
#   1. postgres サービスと SQL_DSN 15行目をコメントアウト
#   2. mysql サービスと SQL_DSN 16行目をコメント解除
#   3. depends_on (28行目) の mysql をコメント解除
#   4. volumes セクション (64行目) の mysql_data をコメント解除
#
# ⚠️ 重要: 本番環境にデプロイする前に、すべてのデフォルトパスワードを変更してください!

version: '3.4' # 古い Docker バージョンとの互換性のため

services:
  new-api:
    image: calciumion/new-api:latest
    container_name: new-api
    restart: always
    command: --log-dir /app/logs
    ports:
      - '3000:3000'
    volumes:
      - ./data:/data
      - ./logs:/app/logs
    environment:
      - SQL_DSN=postgresql://root:123456@postgres:5432/new-api # ⚠️ 重要: 本番環境ではこのパスワードを変更してください!
      #      - SQL_DSN=root:123456@tcp(mysql:3306)/new-api  # mysql サービスを指します。MySQL を使用する場合はコメント解除してください
      - REDIS_CONN_STRING=redis://redis
      - TZ=Asia/Shanghai
      - ERROR_LOG_ENABLED=true # エラーログ記録を有効にするかどうか
      - BATCH_UPDATE_ENABLED=true # バッチ更新を有効にするかどうか
    #      - STREAMING_TIMEOUT=300  # ストリーミングモードの無応答タイムアウト時間(秒単位)、デフォルトは120秒。空の補完が発生する場合は、より大きな値に設定してみてください。
    #      - SESSION_SECRET=random_string  # マルチノードデプロイメント時に設定。このランダム文字列は必ず変更してください!!
    #      - SYNC_FREQUENCY=60  # キャッシュ同期頻度。独立 Redis 構成では Session の最大陳腐化時間でもあります

    depends_on:
      - redis
      - postgres
    #      - mysql  # MySQL を使用する場合はコメント解除してください
    healthcheck:
      test:
        [
          'CMD-SHELL',
          "wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' || exit 1",
        ]
      interval: 30s
      timeout: 10s
      retries: 3

  redis:
    image: redis:latest
    container_name: redis
    restart: always

  postgres:
    image: postgres:15
    container_name: postgres
    restart: always
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: 123456 # ⚠️ 重要: 本番環境ではこのパスワードを変更してください!
      POSTGRES_DB: new-api
    volumes:
      - pg_data:/var/lib/postgresql/data
#    ports:
#      - "5432:5432"  # Docker の外部から PostgreSQL にアクセスする必要がある場合はコメント解除してください

#  mysql:
#    image: mysql:8.2
#    container_name: mysql
#    restart: always
#    environment:
#      MYSQL_ROOT_PASSWORD: 123456  # ⚠️ 重要: 本番環境ではこのパスワードを変更してください!
#      MYSQL_DATABASE: new-api
#    volumes:
#      - mysql_data:/var/lib/mysql
#    ports:
#      - "3306:3306"  # Docker の外部から MySQL にアクセスする必要がある場合はコメント解除してください

volumes:
  pg_data:
#  mysql_data:

簡易設定(テスト環境向け)

テスト目的のみの場合は、New API サービス自体のみを含む以下の簡易バージョンを使用できます。

services:
  new-api:
    image: calciumion/new-api:latest
    container_name: new-api
    restart: always
    ports:
      - '3000:3000'
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./data:/data

設定説明

New API サービス設定

パラメータ説明
imageイメージ名。通常は最新バージョンを取得するためにcalciumion/new-api:latestを使用します。
container_nameコンテナ名。カスタマイズ可能です。
restartコンテナの再起動ポリシー。サービスの自動再起動を確実にするため、alwaysに設定することを推奨します。
command起動コマンド。起動パラメータをカスタマイズできます。
portsポートマッピング。デフォルトでは、コンテナ内の3000番ポートをホストの3000番ポートにマッピングします。
volumesデータボリュームマッピング。データの永続化を保証します。
environment環境変数設定。New API の動作を設定するために使用します。
depends_on依存サービス。正しい順序で起動することを保証します。
healthcheckヘルスチェック設定。サービスの状態を監視するために使用します。

環境変数説明

New API は複数の環境変数設定をサポートしており、以下はよく使用されるものです。

環境変数説明
SQL_DSNデータベース接続文字列postgresql://root:123456@postgres:5432/new-api
REDIS_CONN_STRINGRedis 接続文字列redis://redis
REDIS_POOL_SIZERedis 接続プールサイズ10
TZタイムゾーン設定Asia/Shanghai
SESSION_SECRETセッションキー(マルチノードデプロイメントでは必須)your_random_string
CRYPTO_SECRETキャッシュキー用 HMAC シークレット(Redis 共有ノードで同一)デフォルトは SESSION_SECRET
NODE_TYPEノードタイプ(マスター/スレーブ)masterまたはslave
SYNC_FREQUENCYキャッシュ同期頻度、および独立 Redis 構成での Session キャッシュの最大陳腐化時間(秒)60

より完全な環境変数リストについては、環境変数設定ガイドを参照してください。

マルチノードデプロイメント設定

マルチノードデプロイメントでは、すべてのノードが同じデータベースと同じ SESSION_SECRET を使用する必要があります。Redis は共有、ノードごとに独立、未使用のいずれも選択できます。

マスターノード設定

services:
  new-api-master:
    image: calciumion/new-api:latest
    container_name: new-api-master
    restart: always
    ports:
      - '3000:3000'
    environment:
      - SQL_DSN=postgresql://newapi:123456@your-db-host:5432/new-api
      - REDIS_CONN_STRING=redis://your-master-redis-host:6379 # 他ノードと共有、またはこのノード専用として使用可能
      - SESSION_SECRET=your_unique_session_secret
      - CRYPTO_SECRET=your_unique_crypto_secret
      - SYNC_FREQUENCY=60
      - TZ=Asia/Shanghai
    volumes:
      - ./data:/data

スレーブノード設定

services:
  new-api-slave:
    image: calciumion/new-api:latest
    container_name: new-api-slave
    restart: always
    ports:
      - '3001:3000' # ポートマッピングが異なることに注意
    environment:
      - SQL_DSN=postgresql://newapi:123456@your-db-host:5432/new-api # マスターと同じデータベースを指す必要があります
      - REDIS_CONN_STRING=redis://your-slave-redis-host:6379 # Redis を共有する場合はマスターと同じアドレスを使用します
      - SESSION_SECRET=your_unique_session_secret # マスターノードと同じである必要があります
      - CRYPTO_SECRET=your_unique_crypto_secret # Redis を共有する場合はマスターと同じ値が必要です
      - NODE_TYPE=slave # スレーブノードとして設定
      - SYNC_FREQUENCY=60
      - TZ=Asia/Shanghai
    volumes:
      - ./data-slave:/data

Redis 構成は次のいずれかを選択できます:

モードCompose 設定Session とレート制限の動作
Redis を共有すべてのノードで同じ REDIS_CONN_STRING と有効な CRYPTO_SECRET を設定Session の失効は通常即時に反映され、Redis のレート制限枠はノード間で共有される
ノードごとに独立した Redis各ノードに個別の REDIS_CONN_STRING を設定有効な SYNC_FREQUENCY 以内に共有データベースを再参照して Session 状態が収束し、レート制限枠はノードごとに集計される
Redis を使用しないREDIS_CONN_STRING を削除Session 検証は共有データベースを直接参照し、各ノードのインメモリレート制限を使用する

SYNC_FREQUENCY のデフォルト値、および不正な値を指定した場合のフォールバック値は 60 秒です。Session Redis Hash の TTL は、Session の残り有効期間とこの値のうち短い方で、読み取りでは延長されません。独立 Redis 構成では、バージョン更新直後の新しい Access JWT が収束前に一時的な 401 になる場合があります。アクティブ Session 上限と Session 発行ウィンドウは共有データベースで集計されるため、すべてのノードで共有されます。

遅延して完了した active キャッシュの書き戻しは、元のデータベース参照時点から残っている観測ウィンドウだけを使用し、失効 tombstone の期限切れ後に完全な TTL を新たに開始しません。

New API は REDIS_CONN_STRING の単一の Redis 互換エンドポイントへ接続します。Redis Cluster や Sentinel のノード一覧を直接設定することはできません。高可用性が必要な場合は、単一の互換接続エンドポイントを提供するサービスまたはプロキシを使用してください。

使用方法

インストール

設定をdocker-compose.ymlファイルとして保存し、同じディレクトリで以下を実行します。

docker compose up -d

ログの確認

docker compose logs -f

サービスの停止

docker compose down

ヒント

Docker Compose のより詳しい使用方法については、Docker Compose インストールガイドを参照してください。

このガイドはいかがですか?

最終更新