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_STRING | Redis 接続文字列 | redis://redis |
REDIS_POOL_SIZE | Redis 接続プールサイズ | 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:/dataRedis 構成は次のいずれかを選択できます:
| モード | 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 インストールガイドを参照してください。
このガイドはいかがですか?
最終更新