環境変数
Crowi が読む環境変数の一覧
api と web が読む環境変数の全一覧です。api は起動時にこの一覧を検証し、形式の誤りとタイポ候補を 1 か所のレポートにまとめて出力します。設定する場所と読み込みの仕組みは 設定 を参照してください。
NEXT_PUBLIC_ で始まる 3 つと CROWI_API_URL は web が読み、それ以外は api が読みます。
| 変数名 | 既定値 | 内容 |
|---|---|---|
AUTH_PUBLIC_API_URL | 解決後の web URL | 外部アカウントでのサインインのリダイレクト URI に使う api の公開 origin。origin のみ (パス・クエリを含めると起動失敗) |
AUTH_PUBLIC_WEB_URL | CLIENT_URL | 同じリダイレクト URI に使う web の公開 origin。両方とも未設定なら 外部アカウントでのサインイン が無効になる |
BASE_URL | — | 既知の変数名として受け付けるだけで、api は参照しない。公開 URL は CLIENT_URL |
CLIENT_URL | (なし) | web の公開オリジン。CORS の許可オリジンと送信メール内のリンクに使う。未設定でも起動するが警告が出る |
COLLAB_MAX_EDITORS_PER_PAGE | 20 | 1 ページあたりの同時編集者上限。超えたクライアントは読み取り専用で接続する |
CROWI_API_URL | (なし) | web サーバが内蔵プロキシで api に到達する URL。配布イメージでは起動時に読み直さないため、開発と Vercel でのみ効く |
CROWI_ENCRYPTION_KEY | (なし) | 機密設定を暗号化する 32 バイトのマスターキー (base64)。未設定なら平文で保存する。openssl rand -base64 32 で生成 |
CROWI_MIGRATE_USER | (なし) | データ移行による本文の書き換えを記録するユーザーのメールアドレス。未設定なら管理者から自動で選ぶ |
CROWI_MULTI_INSTANCE | (なし = 単一レプリカ) | 複数レプリカ構成であることの宣言 (1 / true / レプリカ数)。宣言すると WS_TOKEN_SECRET の起動ガードが有効になる |
CROWI_UPLOAD_MAX_BYTES | 52428800 (50 MB) | 添付アップロードの上限バイト数。50 MB が上限で、超える値は 50 MB に丸められる |
DEBUG | (なし) | 設定すると起動レポートを 1 行ずつ出力する (デバッグ出力と混ざらないようにするため) |
ENABLE_DNSCACHE | — | 既知の変数名として受け付けるだけで、api は参照しない |
IMAGE_DERIVATIVE_ADMISSION_CONCURRENCY | 2 | アップロード経路でサムネイルを同時に生成する数の上限 |
IMAGE_DERIVATIVE_ADMISSION_TIMEOUT_MS | 5000 | 上の生成枠を待つ上限 (ミリ秒)。超えるとサムネイルを諦め、元画像だけを返す |
IMAGE_DERIVATIVE_MAX_PIXELS | 50000000 | サムネイル生成でデコードを許す最大ピクセル数。超える画像はサムネイルを作らない |
JWT_ACCESS_TOKEN_TTL_SECONDS | 3600 (1 時間) | api が発行するアクセストークンの有効期間 |
JWT_REFRESH_TOKEN_TTL_SECONDS | 2592000 (30 日) | api が発行するリフレッシュトークンの有効期間 |
MIGRATION_PREFLIGHT_UNAPPLIED_POLICY | block | 未適用の事前データ移行があるときの挙動。block は起動しない、warn は警告して起動する。バージョンアップ 参照 |
MONGO_URI | mongodb://localhost/crowi | MongoDB の接続文字列。MONGOLAB_URI / MONGODB_URI / MONGOHQ_URL も同じ値として読む |
NEXT_PUBLIC_API_TIMEOUT_MS | 20000 | ブラウザが api の応答を待つ上限 (ミリ秒) |
NEXT_PUBLIC_API_URL | (なし) | ブラウザから見た api の絶対オリジン。同一オリジン構成では未設定にする |
NEXT_PUBLIC_COLLAB_URL | (なし) | ブラウザが接続する WebSocket の URL。未設定なら api のオリジンとブラウザの現在の origin から導出する |
NODE_ENV | production (未設定時も production 扱い) | development / production / test |
OAUTH_REFRESH_REUSE_GRACE_MS | 60000 (60 秒) | リフレッシュトークンのローテーション再利用検知を抑止する猶予時間。上限 5 分、0 で猶予なし |
PASSWORD_SEED | (なし) | 移行前の形式で保存されたパスワードを検証するためのシード |
PORT | 4301 | api サーバが待ち受けるポート。ポートと URL 参照 |
REDIS_KEY_PREFIX | CLIENT_URL のホスト名 | Redis のキーとチャンネルに付くインスタンス単位の名前空間。Redis のキーと ACL 参照 |
REDIS_REJECT_UNAUTHORIZED | 1 | 0 にすると Redis への TLS 接続で証明書の検証を行わない |
REDIS_URL | (なし) | Redis の接続先。単一レプリカでは省略可、複数レプリカでは必須。TLS は rediss://。REDISTOGO_URL / REDIS_TLS_URL も同じ値として読む。使う機能とキーは Redis のキーと ACL、省略したときの機能ごとの挙動は下の節 |
SECRET_TOKEN | (なし) | セッション関連の署名に使うシークレット |
SLACK_MANIFEST_REQUEST_URL | CLIENT_URL | Slack アプリのマニフェストに書き込む公開 origin。開発でトンネルを使うときに指定する |
WS_TOKEN_SECRET | (なし = プロセスごとにランダム生成) | WebSocket 接続の認証に使う短命トークンの署名鍵。32 文字以上必須 で、NODE_ENV=production では 32 文字未満だと起動しない。複数レプリカでは全レプリカで同じ値にする。openssl rand -base64 32 で生成 |
REDIS_URL を省略したときの挙動
| 機能 | REDIS_URL が無いとき |
|---|---|
| 共同編集の伝搬・プレゼンス・通知・設定同期 | レプリカ間連携専用なので、単一レプリカでは失うものがありません |
| 同時編集者上限 | 上限を強制しなくなります (弾く代わりに通す fail-open) |
| レート制限 | プロセス内のメモリで動作を継続します (レプリカ間では共有されません) |
| 最近見たページ | 機能自体が使えません (フォールバックはありません) |
| 外部アカウントの連携 | 連携の途中経過をプロセス内に保持するため、途中で api を再起動するとその連携をやり直すことになります |
複数レプリカ構成では REDIS_URL は必須です (リアルタイム共同編集の運用)。
関連ページ
- 設定 — 3 つの設定レイヤーと読み込みの仕組み
- crowi.config.json — プラグインとドライバの宣言
- ポートと URL — 開発と本番のポート割り当て