Teable 1.10 配置参数详解
Teable 1.10.0 环境变量逐项实测:默认值、必填性与真实行为(时区/日志级别/数据库连接失败/缓存内置 Redis 兜底/会话 Cookie/13 个安全密钥回退告警/PASSWORD_LOGIN_DISABLED 路由移除等),附 22 项实测汇总表与 FAQ。
Teable 1.10 配置参数详解
目标:逐项讲清 Teable 1.10.0 的环境变量配置体系——默认值、必填性、实测行为与常见误配。全部「默认值」结论来自官方发布件内置环境变量与官方文档 env 页(查询日期 2026-10-18),全部「实测行为」均在 Ubuntu 22.04.4 + Teable 1.10.0(Standalone,主实例 8105 端口 + 临时实测实例 8107 端口)环境逐项验证。
一、环境信息
- 操作系统:Ubuntu 22.04.4 LTS(x86_64,12 核 / 32GB 内存)
- Teable:1.10.0(发布件构建标识
release.2026-10-16T07-06-34Z.3445) - 部署形态:Standalone(应用 + PostgreSQL 15.4 + Redis 7.2.4,编排与部署过程见《Teable Docker Compose 部署指南》,主实例对外端口 8105)
- 临时实测实例:同一网络内另起应用实例(对外端口 8107,独立 PostgreSQL 15.4 与独立附件数据卷),用于参数默认值与故障行为实测,不与主实例共享数据
- 实测日期:2026-10-18
- 参数来源核验:官方文档 https://help.teable.ai/en/deploy/env (2026-10-18 抓取)+ 发布件内置环境变量实测(
docker inspect ghcr.io/teableio/teable:latest的镜像配置,镜像内置TZ=UTC、NODE_ENV=production、PORT=3000、NEXTJS_DIR=enterprise/app-ee、BUILD_VERSION=release.2026-10-16T07-06-34Z.3445、GIT_COMMIT_SHA=fef0615eb0c228e0d3afdb8e50cf21349bcb7868、PREVIEW_TAG=)
说明:Teable 没有主配置文件,全部参数经环境变量注入(Compose 部署走
.env或编排文件environment:段)。修改后必须重建服务才会生效,见第十五章 FAQ Q1。
二、参数体系总览
2.1 参数生效链路
启动脚本按以下顺序处理环境变量(实测行为还原):
- 镜像内置默认:
TZ=UTC、NODE_ENV=production、PORT=3000等烧录在发布件中,不配置时以此兜底; - 部署注入:Compose 读取
.env注入(本部署主实例注入了数据库/缓存连接、时区、对外地址); - 入口脚本兜底:未提供 Redis 连接时,入口脚本自动拉起内置 Redis 并注入对应连接变量(实测见第五章 5.3);
- 密钥回退:安全密钥类变量缺失时不阻断启动,回退到「公开的内置默认值」并打印完整告警块(实测见第七章 7.2);
- 校验层检查:应用启动时经 Joi schema 校验(
env.validation.schema.ts),非法取值直接拒绝启动。
2.2 参数分组速查
| 分组 | 核心变量 | 必填 | 详解章节 |
|---|---|---|---|
| 基础与启动 | TZ/TIMEZONE、PORT、LOG_LEVEL、LOG_FORMAT | — | 第三章 |
| 数据库 | PRISMA_DATABASE_URL、PRISMA_TRANSACTION_TIMEOUT 等 | ✅ | 第四章 |
| 缓存与队列 | BACKEND_CACHE_PROVIDER、BACKEND_CACHE_REDIS_URI | ✅(URI) | 第五章 |
| 地址与会话 | PUBLIC_ORIGIN、BACKEND_SESSION_EXPIRES_IN、BACKEND_JWT_EXPIRES_IN | ✅(地址) | 第六章 |
| 安全密钥 | SECRET_KEY 及 13 个密钥槽位 | 建议(缺省回退公开值) | 第七章 |
| 认证与登录 | PASSWORD_LOGIN_DISABLED、OAuth/OIDC 组、TURNSTILE_* | — | 第八章 |
| 存储 | BACKEND_STORAGE_PROVIDER 及各存储后端变量组 | — | 第九章 |
| 邮件 | BACKEND_MAIL_*(建议改用管理面板配置) | — | 第十章 |
| 资源限额 | MAX_COPY_CELLS、TABLE_LIMIT_* | — | 第十一章 |
| 自动化/AI | AUTOMATION_*、SANDBOX_*、TEABLE_INFRA_* | AI 形态必填 | 第十二章 |
| 开关与遥测 | RECORD_HISTORY_DISABLED、TELEMETRY_REPORT_DISABLED 等 | — | 第十三章 |
三、基础与启动参数
3.1 时区:TZ / TIMEZONE
| 属性 | 值 |
|---|---|
| 默认值 | UTC(发布件内置) |
| 必填 | 否 |
| 官方示例 | Asia/Shanghai |
实测:未配置时日志时间为 UTC;编排 .env 中 TIMEZONE=Asia/Shanghai(经 TZ=${TIMEZONE} 注入)后,启动日志显示:
> System Time Zone: Asia/Shanghai
> Current System Time: Sun Oct 18 2026 20:10:34 GMT+0800 (China Standard Time)
⚠️ 注意:PostgreSQL 服务需同样注入
TZ(官方编排已包含),否则数据库时区与应用时区不一致会影响日期字段默认值展示。
3.2 监听端口:PORT
| 属性 | 值 |
|---|---|
| 默认值 | 3000(发布件内置) |
| 实测 | 启动日志 > Ready on http://localhost:3000 |
| 改法建议 | 一般不动应用内端口,改宿主机映射(如 8105:3000)即可 |
3.3 运行环境:NODE_ENV
| 属性 | 值 |
|---|---|
| 默认值 | production(发布件内置) |
| 校验 | Joi 仅允许 test / development / production |
| 实测 | 启动日志 > NODE_ENV is production |
3.4 版本标识:BUILD_VERSION / GIT_COMMIT_SHA
| 属性 | 值 |
|---|---|
| 默认值 | release.2026-10-16T07-06-34Z.3445 / fef0615eb0c228e0d3afdb8e50cf21349bcb7868(发布件内置,只读) |
| 用途 | 核对运行中的发布件与官方 Release 的对应关系(该 commit 的 @teable/core 包版本 1.10.0) |
3.5 日志级别:LOG_LEVEL
| 属性 | 值 |
|---|---|
| 默认值 | info |
| 取值 | fatal / error / warn / info / debug / trace(Joi 校验,越界值拒绝启动) |
| 官方说明 | 应用日志走 pino 结构化输出,"level":30 为 info、40 为 warn、50 为 error、20 为 debug |
实测(默认 info,主实例全量日志级别统计):
4157 "level":30
36 "level":40
2 "level":50
实测(LOG_LEVEL=debug,临时实例重启后出现 20 级日志):
{"level":20,"time":1792326517338,"pid":223,"hostname":"5d87fdace005","name":"teable","context":"OpenApiDocs","msg":"OpenAPI routes without a serving controller: GET /billing/subscription/summary, ..."}
{"level":20,"time":1792326519971,"pid":223,"hostname":"5d87fdace005","name":"teable","context":"WsGateway","msg":"SockJS v0.5.0 bound to \"/socket\""}
💡 说明:默认级别下就能看到 warn/error(如集成未配置的提示),一般无需调到 debug;排障连接/队列问题时临时切
debug。
3.6 日志格式:LOG_FORMAT
| 属性 | 值 |
|---|---|
| 默认值 | json(实测主实例输出为 pino JSON 行) |
| 取值 | json / raw |
| 官方示例 | json |
💡 说明:接日志采集系统(Loki/ELK)保持
json;人工排查想看纯文本时改raw。
四、数据库连接参数
4.1 主数据库连接:PRISMA_DATABASE_URL
| 属性 | 值 |
|---|---|
| 默认值 | 无(必填,官方标注 "must be configured") |
| 格式 | postgresql://用户:密码@主机:端口/库名 |
| 本部署实测值 | postgresql://teable:q1w2e3r4@teable-db:5432/teable |
| 兼容写法 | DATABASE_URL(老版本变量名,仍被识别) |
实测(连接串指向不存在的主机,服务启动失败退出):
Migrate Deploy Error: undefined
Error: getaddrinfo EAI_AGAIN teable-1-10-0-deadhost
服务状态 Exited (1),健康检查端口无响应。结论:连接串错误在启动期迁移阶段即失败,不会带病运行——这是排查「应用起不来」的第一检查点。
实测(正确连接串,首次启动自动完成全量迁移):
meta database target: teable-db:5432 (postgresql)
Running meta database migration...
255 migrations found in prisma/migrations
meta database migration completed
💡 说明:仅支持 PostgreSQL 作为主库;连接串建议与官方 Standalone 编排保持一致,库名默认
teable。
4.2 事务超时:PRISMA_TRANSACTION_TIMEOUT / PRISMA_TRANSACTION_MAX_WAIT / BIG_TRANSACTION_TIMEOUT
| 变量 | 默认值 | 说明 |
|---|---|---|
PRISMA_TRANSACTION_TIMEOUT | 5000 | 单事务最大执行毫秒数;批量更新外键多的记录时官方建议调大 |
PRISMA_TRANSACTION_MAX_WAIT | 2000 | 从连接池等待事务连接的最大毫秒数 |
BIG_TRANSACTION_TIMEOUT | 600000 | 大型内部事务(如整项目导出)的超时毫秒数 |
实测:默认值下正常建表/导入均无事务超时;未做压测性调参,遵循官方默认。
五、缓存与队列参数
5.1 缓存提供方:BACKEND_CACHE_PROVIDER
| 属性 | 值 |
|---|---|
| 默认值 | 官方文档标注 sqlite;实际行为见 5.3 实测——未配置任何缓存变量时入口脚本会自动拉起内置 Redis 并注入连接,等效 redis |
| 取值 | sqlite / memory / redis |
源码佐证(发布件对应仓库 cache.config.ts):
provider: (process.env.BACKEND_CACHE_PROVIDER ??
(process.env.BACKEND_CACHE_REDIS_URI ? 'redis' : 'sqlite')) as 'memory' | 'sqlite' | 'redis',
sqlite: { uri: process.env.BACKEND_CACHE_SQLITE_URI ?? 'sqlite://.assets/.cache.db' },
5.2 Redis 连接:BACKEND_CACHE_REDIS_URI
| 属性 | 值 |
|---|---|
| 默认值 | 无(官方标注必填——「computed task delivery 必需」,同时作为 provider=redis 时的缓存连接) |
| 格式 | redis://default:密码@主机:6379/库号 |
| 本部署实测值 | redis://default:q1w2e3r4@teable-cache:6379/0 |
| 附加能力 | 计算任务/自动化队列的投递通道(BullMQ) |
实测(主实例注入外部 Redis):启动日志出现 Skipping the registration of FallbackQueueModule(回退队列模块未注册,说明外部 Redis 队列已接管),且未出现内部 Redis 启动信息。
5.3 内置 Redis 兜底行为(重要实测发现)
未提供任何缓存变量(既无 BACKEND_CACHE_REDIS_URI 也无 BACKEND_CACHE_PROVIDER)的实测实例启动日志:
Starting internal Redis...
Waiting for Redis to start...
✓ Internal Redis started successfully (took 2 attempts)
[Nest] 222 - 8:32:19 PM DEBUG [ConditionalModule] (env)=>!env.BACKEND_CACHE_REDIS_URI evaluated to false. Skipping the registration of FallbackQueueModule
服务健康检查通过:
{"status":"ok","info":{"metaDatabase":{"responseTime":5,"status":"up"}},"error":{},"details":{"metaDatabase":{"responseTime":5,"status":"up"}}}
结论:1.10.0 官方发布件在缺少 Redis 配置时会自动拉起内置 Redis(进程内 localhost:6379,实测监听端口确认为 6379)并自动注入连接变量,应用照常可用。这意味着:
- 最小可用部署可以只有「应用 + PostgreSQL」两个服务;
- 单机多进程共享缓存/队列时内置 Redis 不可跨服务共享,多服务编排(官方推荐形态)仍应外置 Redis;
- 内置 Redis 数据随应用服务生命周期,持久化与监控不受控,生产环境不要依赖该兜底。
5.4 性能缓存:BACKEND_PERFORMANCE_CACHE
| 属性 | 值 |
|---|---|
| 默认值 | 无(可选) |
| 作用 | 查询结果性能缓存,官方建议与 BACKEND_CACHE_REDIS_URI 分开用独立 Redis 实例 |
| 官方示例 | redis://default:teable@127.0.0.1:6379/0 |
实测:本部署未启用(小规模单机场景收益有限);多用户高并发协作场景按官方建议启用。
六、访问地址与会话参数
6.1 对外地址:PUBLIC_ORIGIN
| 属性 | 值 |
|---|---|
| 默认值 | 无(必填,官方描述 "must be set to your app's access address") |
| 本部署实测值 | http://127.0.0.1:8105 |
| 影响面 | 头像 URL、邀请链接、分享链接、邮件内链接的生成基准 |
实测(注册接口回显,头像 URL 前缀即 PUBLIC_ORIGIN):
{"id":"usrmBbQTvZwObJ4ugW8", "email":"admin@teable.local", "isAdmin":true,
"avatar":"http://127.0.0.1:8105/api/attachments/read/public/avatar/usrmBbQTvZwObJ4ugW8", ...}
⚠️ 注意:域名/反向代理部署时必须改成对外真实地址(如
https://teable.example.com),否则页面内出现的资源与分享链接不可用;修改后需重建服务(FAQ Q1)。
6.2 会话有效期:BACKEND_SESSION_EXPIRES_IN
| 属性 | 值 |
|---|---|
| 默认值 | 7d |
| 说明 | 服务端登录会话有效期(会话数据在服务端,超期需重新登录) |
实测(登录响应的 Cookie 属性):Set-Cookie: auth_session=...; Expires=Mon, 18 Oct 2027 18:11:20 GMT; HttpOnly; SameSite=Lax——浏览器侧 Cookie 持久化 1 年,但服务端会话按 7d 过期,两者是两层机制,不要混淆。
6.3 会话 Cookie 安全:BACKEND_SESSION_COOKIE_SECURE
| 属性 | 值 |
|---|---|
| 默认值 | false |
| 建议值 | HTTPS 部署改 true(Cookie 仅经 HTTPS 传输) |
6.4 JWT 有效期:BACKEND_JWT_EXPIRES_IN
| 属性 | 值 |
|---|---|
| 默认值 | 20d |
| 说明 | 认证/分享/插件 JWT 的有效期;BACKEND_JWT_SECRET 未设置时签名密钥回退 SECRET_KEY |
6.5 重置密码邮件有效期:BACKEND_RESET_PASSWORD_EMAIL_EXPIRES_IN
| 属性 | 值 |
|---|---|
| 默认值 | 30m |
七、安全密钥参数
7.1 密钥槽位清单(官方 env 页 + 启动告警块双源核对)
| 密钥变量 | 用途 | 推荐生成方式 |
|---|---|---|
SECRET_KEY | 根密钥:JWT/会话回退、BYODB URL 派生、EE 环境变量加密、AI 配置加密、邀请码 HMAC、插件密钥回退 | openssl rand -base64 32 |
BACKEND_JWT_SECRET | 认证/分享/插件 JWT 签名(回退 SECRET_KEY) | openssl rand -base64 32 |
BACKEND_SESSION_SECRET | 登录会话 Cookie 签名(回退 SECRET_KEY) | openssl rand -base64 32 |
BACKEND_ENV_VARIABLE_SECRET | EE 应用环境变量加密(HKDF 根,回退 SECRET_KEY) | openssl rand -base64 32 |
BACKEND_AI_CONFIG_ENCRYPTION_SECRET | AI 服务商 API Key 加密(HKDF 根,回退 SECRET_KEY) | openssl rand -base64 32 |
BACKEND_MAIL_ENCRYPTION_KEY / _IV | 邮件退订链接令牌加密 | openssl rand -hex 8 |
BACKEND_STORAGE_ENCRYPTION_KEY / _IV | 附件访问令牌加密(local 存储时必需) | openssl rand -hex 8 |
BACKEND_ACCESS_TOKEN_ENCRYPTION_KEY / _IV | 个人访问令牌加密 | openssl rand -hex 8 |
BACKEND_DATA_DB_URL_ENCRYPTION_KEY / _IV | BYODB 数据库 URL 加密 | openssl rand -hex 8 |
SANDBOX_JWT_SECRET | AI 沙箱会话签名(沙箱服务须与应用一致) | openssl rand -base64 32 |
7.2 缺省回退行为(实测告警块全文)
未配置任何密钥时实例照常启动,日志打印完整安全告警(主实例实测,[sandbox] 行为内置沙箱组件的同源告警):
SECURITY WARNING: missing secret environment variable(s) — the instance will START anyway, falling back to the built-in PUBLICLY KNOWN defaults (they live in the public git history, so anyone can forge tokens / decrypt data protected by them):
- SECRET_KEY: JWT/session fallback, BYODB URL key derivation, EE env-variable encryption, AI-config key encryption, invitation-code HMAC, welcome-reward inbox HMAC, plugin secret fallback
- BACKEND_JWT_SECRET (or SECRET_KEY): signing auth / share / plugin JWTs
- BACKEND_SESSION_SECRET (or SECRET_KEY): signing login session cookies
- BACKEND_ENV_VARIABLE_SECRET (or SECRET_KEY): encrypting EE app env variables (HKDF root)
- BACKEND_AI_CONFIG_ENCRYPTION_SECRET (or SECRET_KEY): encrypting AI provider API keys stored in instance/space AI config (HKDF root)
- BACKEND_MAIL_ENCRYPTION_KEY: encrypting email unsubscribe-link tokens
- BACKEND_MAIL_ENCRYPTION_IV: encrypting email unsubscribe-link tokens
- BACKEND_STORAGE_ENCRYPTION_KEY: encrypting attachment access tokens (local storage provider only)
- BACKEND_STORAGE_ENCRYPTION_IV: encrypting attachment access tokens (local storage provider only)
- BACKEND_ACCESS_TOKEN_ENCRYPTION_KEY: encrypting personal access tokens
- BACKEND_ACCESS_TOKEN_ENCRYPTION_IV: encrypting personal access tokens
- BACKEND_DATA_DB_URL_ENCRYPTION_KEY: encrypting BYODB database URLs
- BACKEND_DATA_DB_URL_ENCRYPTION_IV: encrypting BYODB database URLs
Fine for a quick local try-out; for anything reachable from the network, set your own values.
[sandbox] SECURITY WARNING: SANDBOX_JWT_SECRET is not set — starting anyway on the PUBLICLY KNOWN former source default (it lives in the public git history, so anyone can forge execution tokens).
7.3 密钥生成与落配置
生成命令实测(每次执行结果不同,以下为实测样例):
openssl rand -base64 32
openssl rand -hex 8
openssl rand -hex 8
arNqKGLeb0cJyMqPgWzVJK9Yno+V2j9dwntLdmZDJIY=
1f3dfd8b72471373
593baf48b1c66380
⚠️ 关键提醒(官方 Secrets and rotation 章节 + 告警行为一致):
- 密钥缺失不阻断启动——回退值是公开的,任何人可伪造令牌/解密数据,仅限本机试用;
- 已用公开默认值运行过的实例,升级时先按启动告警打印的原值显式配置(保持旧会话/令牌可解密),再计划轮换;
- Compose 配置中密钥含
$字符时需转义($$),否则会被变量展开吃掉。
八、认证与登录参数
8.1 密码登录开关:PASSWORD_LOGIN_DISABLED
| 属性 | 值 |
|---|---|
| 默认值 | false |
| 取值 | true 时禁用密码登录(官方注 OAuth/OIDC 仍可用) |
实测(PASSWORD_LOGIN_DISABLED=true 后重启,密码登录接口整体消失):
POST /api/auth/signin => {"message":"Cannot POST /api/auth/signin","status":404,"code":"not_found"}
POST /api/auth/signup => {"message":"Cannot POST /api/auth/signup","status":404,"code":"not_found"}
⚠️ 注意:是路由级移除(404)而非 403 拒绝。开启后管理员账号必须先配好 OAuth/OIDC,否则任何人都无法登录(含管理员)——生产慎用,或保留一个已登录会话再切换。
8.2 第三方登录组
| 变量 | 默认值 | 说明 |
|---|---|---|
SOCIAL_AUTH_PROVIDERS | 无 | 启用列表,逗号分隔:github,google,oidc |
BACKEND_GITHUB_CLIENT_ID / _SECRET | 无 | GitHub OAuth 应用凭据 |
BACKEND_GOOGLE_CLIENT_ID / _SECRET | 无 | Google OAuth 凭据 |
BACKEND_OIDC_CLIENT_ID / _SECRET / _CALLBACK_URL | 无 | 通用 OIDC 凭据与回调地址 |
实测(未配置时启动日志告警,行为=功能关闭不报错):
LEVEL 40 | GoogleSheetProvider | Google Sheets credentials not configured. Set BACKEND_GOOGLE_CLIENT_ID and BACKEND_GOOGLE_CLIENT_SECRET (shared with Google sign-in) environment variables.
8.3 登录验证码与防刷
| 变量 | 默认值 | 说明 |
|---|---|---|
BACKEND_SIGNIN_VERIFICATION_EXPIRES_IN | 10m | 验证码有效期(回退 BACKEND_EMAIL_CODE_EXPIRES_IN) |
BACKEND_SIGNIN_VERIFICATION_MAX_ATTEMPTS | 5 | 单验证码最大错误次数,超限作废 |
TURNSTILE_SITE_KEY / TURNSTILE_SECRET_KEY | 无 | Cloudflare Turnstile 人机校验 |
BACKEND_SIGNUP_VERIFICATION_CODE_RATE_LIMIT_SECONDS | 无 | 注册验证码发送限流间隔(秒) |
TEABLE_SSRF_PROTECTION_DISABLE | false | 出站请求 SSRF 防护(禁回环/私网/链路本地地址),仅可信内网置 true |
BACKEND_TRUST_PROXY | loopback, linklocal, uniquelocal | 反向代理信任设置(影响审计日志中的客户端 IP) |
实测(Turnstile 未配置的启动告警):
LEVEL 40 | TurnstileService | Turnstile validation is disabled - missing site key or secret key
九、存储参数
9.1 存储后端:BACKEND_STORAGE_PROVIDER
| 属性 | 值 |
|---|---|
| 默认值 | local |
| 取值 | local / minio / s3 / aliyun |
| 本地路径 | BACKEND_STORAGE_LOCAL_PATH 默认 .assets/uploads(相对应用目录,即挂载卷 /app/.assets/uploads) |
实测(默认 local):附件数据卷实测内容为 uploads/ 目录(上传后才产生子目录),公开桶/私有桶分别对应 URL 前缀 public / private(注册回显头像 URL 中的 /api/attachments/read/public/... 为证)。
9.2 桶与地址
| 变量 | 默认值 | 说明 |
|---|---|---|
BACKEND_STORAGE_PUBLIC_BUCKET | public | 公开桶(头像等) |
BACKEND_STORAGE_PRIVATE_BUCKET | private | 私有桶(附件、应用文件、归档数据) |
BACKEND_STORAGE_PUBLIC_URL | 无 | 公开桶对外 URL 覆盖(可接 CDN) |
BACKEND_STORAGE_PRIVATE_BUCKET_ENDPOINT | 无 | 私有桶端点覆盖 |
STORAGE_PREFIX | 回退 PUBLIC_ORIGIN | 附件 URL 前缀 |
9.3 MinIO / S3 / 阿里云变量组(选配)
| 后端 | 必配变量 |
|---|---|
| MinIO | BACKEND_STORAGE_MINIO_ENDPOINT、_PORT(默认 9000)、_USE_SSL(默认 false)、_ACCESS_KEY、_SECRET_KEY、_REGION(可选)、_INTERNAL_ENDPOINT / _INTERNAL_PORT(可选) |
| S3 | BACKEND_STORAGE_S3_REGION、_ENDPOINT、_ACCESS_KEY、_SECRET_KEY、_FORCE_PATH_STYLE(默认 false,端点不支持桶子域名时开启)、_INTERNAL_ENDPOINT / _INTERNAL_FORCE_PATH_STYLE / _MAX_SOCKETS(默认 100) |
| 阿里云 | BACKEND_STORAGE_ALIYUN_* 组(同官方 env 页) |
| 上传方式 | BACKEND_STORAGE_UPLOAD_METHOD 默认 put |
💡 说明:切换存储后端只影响新上传文件,历史文件仍按原前缀访问;跨后端迁移需自行搬运对象并保持 key 一致。
十、邮件参数
官方已将邮件配置标记为 Deprecated,推荐走「管理面板 → 实例设置 → Email」可视化配置(通知邮箱与自动化邮箱分开配);环境变量组仍可用作默认值:
| 变量 | 默认值 | 说明 |
|---|---|---|
BACKEND_MAIL_HOST | smtp.teable.ai | 默认邮件服务器 |
BACKEND_MAIL_PORT | 465 | SMTP 端口 |
BACKEND_MAIL_SECURE | true | SSL/TLS |
BACKEND_MAIL_SENDER | noreply.teable.ai | 发件地址 |
BACKEND_MAIL_SENDER_NAME | Teable | 发件人显示名 |
BACKEND_MAIL_AUTH_USER / _PASS | 无 | SMTP 认证 |
BACKEND_MAIL_INVITE_USER_NAME_MAX_LENGTH / BACKEND_MAIL_INVITE_SPACE_NAME_MAX_LENGTH | 无(0=不截断) | 邀请邮件标题中名称截断长度 |
实测:未配置邮件时邀请/找回密码功能不可用(无告警阻断),按需在管理面板或环境变量二选一配置。
十一、资源限额参数
以下限额全部实测为官方默认值(未修改),生产按数据规模调整:
11.1 请求与上传
| 变量 | 默认值 | 说明 |
|---|---|---|
MAX_COPY_CELLS | 无(官方示例 50000) | 单次复制单元格上限 |
MAX_READ_ROWS | 无(官方示例 10000) | 单次读取行数上限 |
MAX_ATTACHMENT_UPLOAD_SIZE | 无(官方示例 2147483648,即 2GB) | 单附件上传字节上限 |
11.2 表结构限额(TABLE_LIMIT_*)
| 变量 | 默认值 |
|---|---|
TABLE_LIMIT_TABLES_PER_BASE_MAX | 1000 |
TABLE_LIMIT_FIELDS_PER_TABLE_MAX | 500 |
TABLE_LIMIT_VIEWS_PER_TABLE_MAX | 100 |
TABLE_LIMIT_RECORDS_PER_TABLE_MAX | 无(不限,官方示例 1000000) |
TABLE_LIMIT_RECORDS_PER_MUTATION_MAX | 20000 |
TABLE_LIMIT_SELECT_CHOICES_MAX | 1000 |
TABLE_LIMIT_FORMULA_MAX_LENGTH | 8192 |
TABLE_LIMIT_CELL_VALUE_MAX_BYTES | 262144 |
TABLE_LIMIT_RECORD_FIELDS_MAX_BYTES | 1048576 |
TABLE_LIMIT_VIEW_FILTER_ITEMS_MAX | 100 |
TABLE_LIMIT_VIEW_FILTER_DEPTH_MAX | 5 |
TABLE_LIMIT_VIEW_SORT_ITEMS_MAX | 20 |
TABLE_LIMIT_VIEW_GROUP_ITEMS_MAX | 3 |
TABLE_LIMIT_NAME_MAX_LENGTH | 100 |
TABLE_LIMIT_DESCRIPTION_MAX_LENGTH | 2000 |
💡 说明:默认限额对常规业务完全够用;
TABLE_LIMIT_RECORDS_PER_TABLE_MAX空值=不限行数,超大表场景建议显式设置并在架构上评估 PostgreSQL 单表规模。
十二、自动化 / AI / 运行时参数
12.1 自动化
| 变量 | 默认值 | 说明 |
|---|---|---|
AUTOMATION_MIN_SCHEDULED_MINUTES_INTERVAL | 10 | 定时触发最小间隔(分钟),设大于 60 关闭分钟级调度 |
AUTOMATION_MIN_EMAIL_POLL_INTERVAL_MINUTES | 10 | 邮件触发轮询最小间隔(分钟) |
12.2 AI 与 App Builder(全功能形态才需要)
| 变量 | 默认值 | 说明 |
|---|---|---|
SANDBOX_PROVIDER | 无(示例 opensandbox) | AI 会话沙箱提供方 |
TEABLE_INFRA_API_URL / TEABLE_INFRA_API_KEY | 无 | 运行时平面入口(必须是公开入口地址)与共享密钥 |
TEABLE_INFRA_BUCKET | teable-agent | AI 工作区数据桶 |
SANDBOX_OPENSANDBOX_IMAGE | 无(示例 ghcr.io/teableio/teable-sandbox-agent,不带 tag) | 沙箱代理发布件前缀(应用自动追加版本 tag) |
SANDBOX_OPENSANDBOX_RUNTIME | kubernetes | 沙箱引擎类型:kubernetes / docker(Docker 部署必须 docker) |
SANDBOX_OPENSANDBOX_USE_SERVER_PROXY | false | Docker 本地模式建议 true |
APP_DEPLOY_PROVIDer | vercel | App Builder 部署后端(全功能自托管用 docker-runtime) |
SANDBOX_JWT_SECRET | 无(缺省回退公开值,见 7.2 告警) | 沙箱会话签名,全功能形态必填 |
SANDBOX_CPU / SANDBOX_MEMORY / SANDBOX_DISK | 2 / 4 / 15 | 单沙箱 vCPU/内存 GiB/临时盘 GiB(管理面板设置优先) |
实测(Standalone 形态):内置沙箱组件随应用启动并监听 7070 端口(日志 [sandbox] listening on http://0.0.0.0:7070、[sandbox] Max concurrent: 10, Max queue: 2000),AI 会话/App Builder 的完整能力仍需运行时平面与许可。
12.3 遥测与分析
| 变量 | 默认值 | 说明 |
|---|---|---|
TELEMETRY_REPORT_DISABLED | false | 自托管遥测上报(含许可合规报告);内网环境建议 true |
OTEL_EXPORTER_OTLP_ENDPOINT | 无 | OpenTelemetry OTLP 上报端点 |
MICROSOFT_CLARITY_ID | 无 | 微软 Clarity 分析 |
十三、功能开关参数
| 变量 | 默认值 | 说明 |
|---|---|---|
RECORD_HISTORY_DISABLED | false | 关闭记录历史 |
BACKEND_STORAGE_COLD_ARCHIVE_DISABLED | false | 停止历史数据定时归档(已归档数据仍可读) |
PASSWORD_LOGIN_DISABLED | false | 见 8.1(路由级移除实测) |
V2_TABLE_QUERY_OPS_ENABLED | false | 启用 Table Query Ops(管理面板对应页才有数据);修改后需重启 |
十四、参数实测汇总表
| # | 变量 | 官方默认值 | 实测方式 | 实测结论 |
|---|---|---|---|---|
| 1 | TZ/TIMEZONE | UTC | 注入 Asia/Shanghai 重建 | 日志显示 System Time Zone: Asia/Shanghai ✅ |
| 2 | PORT | 3000 | 启动日志观测 | Ready on http://localhost:3000 ✅ |
| 3 | NODE_ENV | production | 启动日志观测 | NODE_ENV is production ✅ |
| 4 | LOG_LEVEL | info | 对比默认/debug 两实例日志 | 默认无 20 级;debug 后出现 OpenApiDocs/WsGateway 20 级日志 ✅ |
| 5 | LOG_FORMAT | json | 主实例日志观测 | pino JSON 行输出 ✅ |
| 6 | PRISMA_DATABASE_URL | 无(必填) | 注入死主机连接串 | 启动期 getaddrinfo EAI_AGAIN 失败退出(Exited 1)✅ |
| 7 | BACKEND_CACHE_PROVIDER | sqlite(官方) | 不配任何缓存变量启动 | 实际自动拉起内置 Redis 并注入 URI,等效 redis ✅(重要差异) |
| 8 | BACKEND_CACHE_REDIS_URI | 无(必填) | 注入外部 Redis | FallbackQueueModule 跳过注册、无内置 Redis 启动 ✅ |
| 9 | BACKEND_PERFORMANCE_CACHE | 无 | 未启用 | 独立实例建议,按官方配置即可 ✅ |
| 10 | PUBLIC_ORIGIN | 无(必填) | 注册接口回显 | 头像/链接 URL 前缀与配置一致 ✅ |
| 11 | BACKEND_SESSION_EXPIRES_IN | 7d | 登录 Cookie 观测 | 服务端会话 7d;浏览器 Cookie 持久化 1 年(两层机制)✅ |
| 12 | BACKEND_SESSION_COOKIE_SECURE | false | 默认观测 | Cookie 无 Secure 标记(HTTP 形态)✅ |
| 13 | BACKEND_JWT_EXPIRES_IN | 20d | 官方文档核对 | 默认 20d ✅ |
| 14 | SECRET_KEY 等 13 密钥槽位 | 公开内置值 | 未配置启动 | 打印完整 SECURITY WARNING 告警块,不阻断启动 ✅ |
| 15 | PASSWORD_LOGIN_DISABLED | false | 置 true 重启 | signin/signup 路由 404 移除 ✅ |
| 16 | OAuth/OIDC 组 | 无 | 未配置启动 | warn 级提示凭据未配置,功能关闭 ✅ |
| 17 | TURNSTILE_* | 无 | 未配置启动 | warn 级提示校验关闭 ✅ |
| 18 | BACKEND_STORAGE_PROVIDER | local | 上传/注册回显 | uploads/ 目录 + public/private 桶前缀 ✅ |
| 19 | BACKEND_MAIL_* | smtp.teable.ai 组 | 未配置 | 邮件功能不可用,不阻断 ✅ |
| 20 | TABLE_LIMIT_* | 见 11.2 | 官方文档核对 | 默认值与官方一致 ✅ |
| 21 | SANDBOX_*(内置沙箱) | 见 12.2 | 启动日志观测 | 沙箱组件 7070 端口自启 + JWT 密钥告警 ✅ |
| 22 | TELEMETRY_REPORT_DISABLED | false | 官方文档核对 | 内网部署建议置 true ✅ |
十五、常见问题(FAQ)
Q1:改了 .env/编排后参数没生效?
环境变量在服务创建时注入,restart 只重启进程不重读配置。实测改 PASSWORD_LOGIN_DISABLED 用 restart 后行为不变,重建后立即生效(路由 404)。解决:配置变更一律走编排重建(docker compose up -d),并观察启动日志确认新值(时区/端口/密钥告警块都会回显)。
Q2:启动日志刷一堆 SECURITY WARNING 是不是必须处理?
是密钥回退告警(见 7.2):13 个密钥槽位缺失时用公开内置值兜底启动。本机试用可忽略;对外/多用户环境必须配置。已经用默认值运行过的实例,先按告警提示的原值显式写回配置保持数据可解密,再安排轮换。
Q3:不配 Redis 能不能跑?
能(实测见 5.3):入口脚本自动拉起内置 Redis。但仅适合作试用——内置 Redis 不跨服务共享、无受控持久化,官方 Standalone 编排仍要求外置 Redis,多用户/自动化场景务必外置。
Q4:PUBLIC_ORIGIN 配错会怎样?
页面可用但所有对外链接(头像、邀请、分享)指向错误地址(实测头像 URL 前缀与配置一致)。改成真实访问地址后重建即可,已生成的旧链接按新配置重发。
Q5:数据库连接串写错为什么整服务起不来?
主库连接在启动期迁移阶段校验(实测 getaddrinfo EAI_AGAIN 后退出),这是有意设计——避免带病运行。按日志中的主机名/端口排障后重启即可。
Q6:PASSWORD_LOGIN_DISABLED=true 后把自己锁死了怎么办?
该开关是路由级移除(实测 404)。恢复:去掉该变量重建服务即可回退;已配置 OAuth/OIDC 的实例确认第三方登录可用后再开启此开关。
Q7:内置沙箱告警 SANDBOX_JWT_SECRET 怎么处理?
Standalone 形态不使用 AI 会话可忽略;启用 AI 能力时必须设置该密钥且与应用后端一致(实测告警建议 openssl rand -base64 32 生成后同时配到后端与沙箱)。
十六、参考链接
- 官方环境变量文档(本篇全部官方默认值来源):https://help.teable.ai/en/deploy/env (查询日期 2026-10-18)
- 官方 Standalone 编排源文件(
.env结构来源):https://github.com/teableio/teable/blob/develop/dockers/examples/standalone/docker-compose.yaml (查询日期 2026-10-18) - 官方 Secrets and rotation 章节:https://help.teable.ai/en/deploy/env#secrets-and-rotation (查询日期 2026-10-18)
- 发布件对应仓库配置源码:
apps/nestjs-backend/src/configs/(env.validation.schema.ts、cache.config.ts 等,teableio/teable@fef0615) - 关联文档:《Teable Docker Compose 部署指南》(部署与编排实操)、《Teable 1.10 功能验证手册》(功能实测)、《Teable 1.10 介绍与选型指南》(版本与架构)