feat: establish production SaaS foundation

This commit is contained in:
Codex
2026-07-12 19:26:57 +08:00
parent 1c2ce38cea
commit 39f7332f33
219 changed files with 20647 additions and 2628 deletions

View File

@@ -9,12 +9,36 @@ NODE_ENV=development
# API 服务端口
PORT=8787
API_HEADERS_TIMEOUT_MS=15000
API_REQUEST_TIMEOUT_MS=120000
API_KEEP_ALIVE_TIMEOUT_MS=5000
API_SHUTDOWN_GRACE_PERIOD_MS=30000
API_MAX_REQUESTS_PER_SOCKET=1000
# Supabase/PostgreSQL 重构 API
DATABASE_URL=postgresql://postgres:postgres@127.0.0.1:54322/postgres
# 本地 postgres 可留空;生产 API 必须为 tiku_apiworker 必须为 tiku_worker。
DB_EXPECTED_RUNTIME_ROLE=
# 不要在 .env 中持久化 SMOKE_SEED_CONFIRM破坏性测试只通过受控 npm script/CLI 临时确认。
# API/worker 各自进程使用。生产建议 API 10-20、worker 4-8并结合 PgBouncer/连接池总量核算。
DB_POOL_MAX=10
DB_CONNECTION_TIMEOUT_MS=5000
DB_QUERY_TIMEOUT_MS=35000
DB_STATEMENT_TIMEOUT_MS=30000
DB_LOCK_TIMEOUT_MS=5000
DB_IDLE_IN_TRANSACTION_TIMEOUT_MS=30000
DB_IDLE_TIMEOUT_MS=30000
DB_POOL_MAX_USES=7500
DB_POOL_MAX_LIFETIME_SECONDS=1800
DB_APPLICATION_NAME=tiku-local
DEFAULT_TENANT_SLUG=master
# 生产必须只写真实 HTTPS 域名,不能包含 *
# 生产只列中央平台/运维的固定 HTTPS Origin,不能包含 *
# 各租户 H5 Origin 从 active tenant_domains + active tenants 动态准入,不要把数百个租户域名展开到此列表。
CORS_ORIGIN=http://127.0.0.1:5173,http://localhost:5173
CORS_TENANT_DOMAINS_ENABLED=false
CORS_TENANT_DOMAIN_CACHE_TTL_MS=60000
CORS_TENANT_DOMAIN_NEGATIVE_CACHE_TTL_MS=10000
CORS_TENANT_DOMAIN_CACHE_MAX_ENTRIES=10000
MAX_JSON_BODY_BYTES=1048576
MAX_IMPORT_JSON_BODY_BYTES=10485760
@@ -32,6 +56,11 @@ AUTH_JWT_SECRET=development-jwt-secret-change-me
AUTH_JWT_JWKS_URL=
AUTH_CODE_TTL_SECONDS=300
AUTH_SMS_COOLDOWN_SECONDS=60
AUTH_SMS_TENANT_DAILY_LIMIT=20000
AUTH_SMS_PHONE_DAILY_LIMIT=10
# 校园/运营商 NAT 会共享 IPIP 配额应宽于手机号/设备配额。
AUTH_SMS_IP_HOURLY_LIMIT=120
AUTH_SMS_DEVICE_HOURLY_LIMIT=10
AUTH_SESSION_TTL_SECONDS=604800
# 远程 Auth/JWKS 验收脚本配置。只在预生产/生产验收命令行临时设置真实 access token
@@ -113,6 +142,8 @@ WORKER_ASSET_SECURITY_SCAN_FAIL_OPEN=false
# Worker 配置:大批量内容导入
WORKER_IMPORT_BATCH_SIZE=5
WORKER_IMPORT_ID=imports-1
WORKER_IMPORT_LEASE_SECONDS=120
WORKER_IMPORT_HEARTBEAT_INTERVAL_MS=30000
WORKER_IMPORT_BACKOFF_SECONDS=30,120,600,1800
# Worker 配置:公共题库自动同步。冲突会保留租户自改题目并等待后台处理。