forked from EduCraft/curriculum-project-hub
ce5fbfb9a6
7.8MB 文件上传报 413:那是 Fastify 在 body 解析阶段拒的,不是 HUB_FILELIB_MAX_FILE_BYTES。上传把内容放在 JSON body 里、二进制过 base64 体积涨 4/3,所以有效上限是 min(该值, HUB_HTTP_BODY_LIMIT_BYTES × 3/4)。 原先 body limit 是 1MiB,10MiB 的文件上限根本不可达。 .env.example:body limit 1MiB → 70MiB,新增 HUB_FILELIB_MAX_FILE_BYTES=50MiB。 注意 body limit 同时是 ADR-0022 requestBodySize 维度的平台 ceiling,抬高它 对所有端点生效。 resolveMaxFileBytes 拆成 parseMaxFileBytes(纯解析)+ resolveMaxFileBytes(读 env):原先带默认参数,显式传 undefined 会回落到读 env,"没传值"与"读环境变量" 分不开,vitest 加载 .env 后测试会读到真实配置。
79 lines
3.5 KiB
Bash
79 lines
3.5 KiB
Bash
# Hub runtime configuration. Copy to .env and fill in.
|
||
|
||
# Production preflight requires the explicit production runtime mode.
|
||
NODE_ENV="production"
|
||
|
||
# PostgreSQL connection string.
|
||
DATABASE_URL="postgresql://paradigm:paradigm@127.0.0.1:5432/paradigm"
|
||
|
||
# Provider URL and credentials are write-only Organization Provider Connection
|
||
# data in PostgreSQL, encrypted by ADR-0024. Process-global ANTHROPIC_* provider
|
||
# settings are rejected in production and must not be added here.
|
||
|
||
# Model override (optional). Defaults to anthropic/claude-sonnet-5.
|
||
# Use an OpenRouter model slug, for example:
|
||
# ANTHROPIC_DEFAULT_SONNET_MODEL="~anthropic/claude-sonnet-latest"
|
||
# To use GLM:
|
||
# ANTHROPIC_DEFAULT_SONNET_MODEL="z-ai/glm-4.7"
|
||
# ANTHROPIC_DEFAULT_OPUS_MODEL="z-ai/glm-4.7"
|
||
# ANTHROPIC_DEFAULT_HAIKU_MODEL="z-ai/glm-4.6"
|
||
|
||
# Alpha Silo safety limits. max turns may use its default; every other value is
|
||
# mandatory in production and should be calibrated on the target host.
|
||
# HUB_AGENT_MAX_TURNS=25
|
||
HUB_AGENT_MAX_CONCURRENT_RUNS="1"
|
||
HUB_AGENT_MAX_RUN_SECONDS="900"
|
||
HUB_HTTP_BODY_LIMIT_BYTES="73400320"
|
||
HUB_MAX_FILES_PER_MESSAGE="8"
|
||
HUB_MAX_FILE_BYTES="26214400"
|
||
HUB_HTTP_REQUESTS_PER_MINUTE="120"
|
||
HUB_FEISHU_EVENTS_PER_MINUTE="120"
|
||
|
||
# 文件库单文件上限(缺省 10 MiB)。这两个值是串联的:上传把文件内容放在
|
||
# JSON body 里,二进制过 base64 体积涨 4/3。所以有效上限是
|
||
# min(本值, HUB_HTTP_BODY_LIMIT_BYTES × 3/4);body limit 太小时本值不可达,
|
||
# 且报错是 Fastify 的 413 Payload Too Large 而不是 file_too_large。
|
||
HUB_FILELIB_MAX_FILE_BYTES="52428800"
|
||
|
||
# Persistent system-managed root for project workspaces. Production must use an
|
||
# absolute path outside the deployment/release tree; install_service.sh defaults
|
||
# to this path and rejects any overlap before installing the unit.
|
||
HUB_PROJECT_WORKSPACE_ROOT="/var/lib/cph-hub/workspaces"
|
||
|
||
# Persistent root for the content-addressed agent skill store. Required at hub
|
||
# startup unless XDG_STATE_HOME is set (then defaults to $XDG_STATE_HOME/skills).
|
||
HUB_SKILL_STORE_ROOT="/var/lib/cph-hub/state/skills"
|
||
|
||
# This process is pinned to exactly one Organization. Feishu credentials are
|
||
# resolved from that Organization's encrypted ACTIVE connection.
|
||
HUB_SILO_ORGANIZATION_ID=""
|
||
HUB_SYSTEMD_UNIT="cph-hub-example.service"
|
||
|
||
# Absolute path to the `cph` binary (ADR-0016). Production preflight requires
|
||
# the file to be executable and `cph --version` to succeed.
|
||
CPH_BIN="/usr/local/bin/cph"
|
||
|
||
# Hub bind address and port. Production defaults to loopback for a local TLS
|
||
# reverse proxy; both values are validated and honored by the HTTP server.
|
||
HOST="127.0.0.1"
|
||
PORT=8788
|
||
|
||
# --- Org admin web (ADR-0021) ---------------------------------------------
|
||
# Public base URL of this Hub (no trailing slash). Used for Feishu OAuth
|
||
# redirect_uri = ${HUB_PUBLIC_BASE_URL}/auth/feishu/callback
|
||
# Configure the same callback URL in the Feishu developer console under
|
||
# Security Settings → Redirect URLs.
|
||
HUB_PUBLIC_BASE_URL="https://hub.example.com"
|
||
|
||
# HMAC secret for signed session + OAuth state cookies. Generate with:
|
||
# openssl rand -base64 32
|
||
HUB_SESSION_SECRET=""
|
||
|
||
# Optional OAuth scope (space-separated). Default: contact:user.base:readonly
|
||
# Apply matching scopes in the Feishu developer console.
|
||
# HUB_OAUTH_SCOPE="contact:user.base:readonly"
|
||
|
||
# Local development/tests only. Production must not set this: systemd injects
|
||
# the fixed cph-secret-keyring credential through CREDENTIALS_DIRECTORY.
|
||
# HUB_SECRET_KEYRING_FILE="/absolute/path/to/dev-keyring.json"
|