Shaper 0.26.4 配置参数详解
Shaper 0.26.4 全量配置参数详解:命令行/环境变量/配置文件三通道机制、按功能域分组的参数说明与默认值、16GB 内存级生产配置模板与常见故障定位。
Shaper 0.26.4 配置参数详解
目标:完整梳理 Shaper 0.26.4 的全部配置参数——三通道配置机制(命令行/环境变量/配置文件)、按功能域分组的参数详解(默认值、环境变量名、生产建议)、面向中型规模的生产配置模板,以及参数相关的常见故障定位。参数清单与默认值以
shaper --help实测回显为基准(2026-10-30 于 Ubuntu 24.04 x86_64 实测),三通道机制与优先级核对自官方 Configuration Options 文档。
一、环境信息
- 操作系统:Ubuntu 24.04 LTS(x86_64)
- 软件版本:Shaper 0.26.4(二进制安装于
/opt/shaper,软链/usr/local/bin/shaper) - 数据目录:
/var/lib/shaper - 参数取证方式:
shaper --help实测回显(全文 FLAGS 段)+ 官方文档 https://taleshape.com/shaper/docs/configuration-options/ (查询日期 2026-10-30)
二、前置条件
- 已按《Shaper 0.26.4 裸机安装指南》完成二进制安装并能运行
shaper --version(输出shaper version 0.26.4); - 理解 Shaper 单进程内嵌四部件的落盘布局:DuckDB(
shaper.duckdb)、SQLite(shaper_internal.sqlite)、NATS JetStream(nats/),全部位于--dir指向的数据目录下——多数存储类参数的本质是改变这些部件的落盘位置或行为; - 无需预先准备任何外部服务(NATS/S3 均有内嵌与按需配置形态)。
三、参数查看与修改方式
3.1 查看全量参数
唯一权威清单来自二进制自带帮助(实测回显,FLAGS 段完整保留默认值信息):
shaper --help
实测回显(节选,保留头部与代表性参数行):
NAME
shaper
USAGE
Version: 0.26.4
Shaper is a minimal data platform built on top of DuckDB and NATS to create analytics dashboards and embed them into your software.
All configuration options can be set via command line flags, environment variables or config file.
All options are optional.
Environment variables must be prefixed with SHAPER_ and use uppercase letters and underscores.
For example, --nats-token turns into SHAPER_NATS_TOKEN.
...
FLAGS
-h, --help show help
-v, --version show version
--log-level STRING log level: debug, info, warn, error (default: info)
--addr STRING HTTP server address. Not used if --tls-domain is set. In that case, server is automatically listening on the ports 80 and 443. (default: localhost:5454)
-d, --dir STRING directory to store data, by default set to /data in docker container) (default: /root/.shaper)
--jwt-secret STRING Static shared secret for signing and validating JWTs
--snapshot-s3-bucket STRING S3 bucket for snapshots (required for snapshots)
-p, --nats-port INT NATS server port. If not specified, NATS will not listen on any port. (default: 0)
--duckdb STRING Override duckdb DSN (default: [--dir]/shaper.duckdb)
--no-edit Disable editing dashboards via the UI
--config-file STRING path to config file
(其余约 70 个参数的完整清单与默认值见本文四~七章逐域展开,或直接执行上述命令查看全文。)
3.2 三通道配置机制与优先级
Shaper 全部参数均可通过三种方式设置(官方 Configuration Options 文档口径,2026-10-30 查询):
| 通道 | 形式 | 示例 | 优先级 |
|---|---|---|---|
| 命令行 flag | --参数名 值 | shaper --addr 0.0.0.0:5454 | 最高 |
| 环境变量 | 前缀 SHAPER_ + 大写下划线 | SHAPER_ADDR=0.0.0.0:5454 | 次之 |
| 配置文件 | 纯文本,每行一个 flag,空格分隔 | addr 0.0.0.0:5454 | 最低 |
配置文件启用方式:启动时传 --config-file /etc/shaper/shaper.conf。三通道可组合使用,高优先级覆盖低优先级——推荐的工程实践:静态基线放配置文件(版本化管理),实例差异用环境变量(如 systemd 的 Environment=),临时调试用命令行 flag。
3.3 配置文件的交互式创建
shaper validate/preview/dev/login 等 CLI 子命令首次运行时若无 ./shaper.json 会交互式引导创建(实测过程):
Config file ./shaper.json not found. Let's create it.
Server URL [Press ENTER to use http://localhost:5454]:
Directory to watch [Press ENTER to use .]:
Saved config to ./shaper.json
两次回车采用默认值后生成 ./shaper.json。该文件是 CLI 子命令(部署/校验/预览工作流)的配置,与服务端 --config-file 纯文本配置是两套文件、各管一头,勿混用。
四、参数总览(按功能域分组)
| 功能域 | 参数 | 生产关注度 |
|---|---|---|
| 服务器基础 | addr、log-level、basepath、cors-domains、favicon、css、css-file、pdf-date-format | 高 |
| 存储与数据 | dir、sqlite、duckdb、duckdb-ext-dir、duckdb-secret-dir、allowed-duckdb-extensions、no-duckdb-community-extensions、init-sql、init-sql-file、deploy | 高 |
| 认证与会话 | jwt-secret、jwtexp、sessionexp、inviteexp、sso-login-url、no-api-keys | 高 |
| NATS 与集群 | nats-host、nats-port、nats-token、nats-servers、nats-max-store、nats-js-key、nats-dir、node-id-file、stream-prefix、subject-prefix 系、各 stream/KV 桶命名参数 | 中(单机低/多节点高) |
| 快照备份 | snapshot-s3-bucket/endpoint/access-key/secret-key/region、snapshot-time、no-snapshots、no-auto-restore | 高 |
| 功能开关 | no-edit、no-tasks、no-public-sharing、no-password-protected-sharing、no-ingest、no-chrome-sandbox | 中 |
| 消息保留与 TTL | ingest-max-age、state-max-age、task-results-max-age、tmp-dashboards-ttl、downloads-ttl | 中 |
| TLS(已弃用) | tls-domain、tls-email、tls-cache、https-port | 低(建议反代终止 TLS) |
解读:Shaper 参数虽多,但单机生产只需盯紧「服务器基础 + 存储 + 认证 + 快照」四个高关注域;NATS 与 TTL 域在多节点/高吞吐摄取场景才需要展开(详见第七章)。
五、核心参数分类详解
5.1 服务器基础域
--addr STRING HTTP server address. (default: localhost:5454)
--log-level STRING log level: debug, info, warn, error (default: info)
--basepath STRING Base URL the frontend is served from. (default: /)
--cors-domains STRING Comma-separated list of domains allowed for CORS
--css STRING CSS string to inject into the frontend
--css-file STRING Path to CSS file to inject into the frontend (can be reloaded at runtime by sending SIGHUP)
--favicon STRING path to override favicon. Must end .svg or .ico
--pdf-date-format STRING Date format for PDF exports, using Go time format (default: 02.01.2006)
逐项说明:
- addr:Web 监听地址。默认
localhost:5454仅回环——裸机部署必须改0.0.0.0:5454(实测外网可达性由它决定);生产更常见的做法是保持默认、由 Nginx 反代转发。设置了--tls-domain时此参数不生效(服务自动改听 80/443); - basepath:反向代理子路径场景(如
https://ops.example.com/shaper/)设为/shaper或完整 URL;官方还支持让反代发X-Forwarded-Prefix头动态指定(头优先于本参数); - cors-domains:允许跨域的域名逗号列表,嵌入式前端(自家域名页面调 Shaper API)必须配置;
- css/css-file:品牌化注入自定义样式;
--css-file支持 SIGHUP 热重载(systemctl kill -s HUP shaper,无需重启服务); - pdf-date-format:PDF 导出页眉页脚日期格式,Go 时间布局(默认欧洲式
02.01.2006,中文环境常改2006-01-02)。
5.2 存储与数据域
-d, --dir STRING directory to store data (default: /root/.shaper)
--sqlite STRING Override sqlite DB file for system state (default: [--dir]/shaper_internal.sqlite)
--duckdb STRING Override duckdb DSN (default: [--dir]/shaper.duckdb)
--duckdb-ext-dir STRING Override DuckDB extension directory (default: ~/.duckdb/extensions/)
--duckdb-secret-dir STRING Override DuckDB secret directory (default: ~/.duckdb/stored_secrets/)
--allowed-duckdb-extensions STRING Comma-separated list of allowed DuckDB extensions (e.g. 'httpfs,parquet,json')
--no-duckdb-community-extensions Disable installing DuckDB community extensions
--init-sql STRING Execute SQL on startup. Supports environment variables in the format $VAR or ${VAR}
--init-sql-file STRING Same as init-sql but read SQL from file (default: [--dir]/init.sql)
--deploy STRING Directory path containing dashboards and tasks to deploy on startup
逐项说明:
- dir:一切数据的根目录(DuckDB/SQLite/NATS/节点 ID/Let's Encrypt 缓存都在其下)。生产固定为
/var/lib/shaper并纳入备份; - sqlite / duckdb:两个引擎的落盘文件。
--duckdb接 DSN,意味着可指向外部 DuckDB/MotherDuck 形态的数据文件,实现多实例共享同一分析库(注意 DuckDB 单写者锁约束); - allowed-duckdb-extensions / no-duckdb-community-extensions:仪表盘 SQL 里
INSTALL/LOAD扩展的白名单管控——安全关键项:生产建议显式白名单(如httpfs,parquet,json,postgres)并关闭社区扩展自动安装,防止用户 SQL 任意加载扩展; - init-sql / init-sql-file:启动时在 DuckDB 执行的初始化 SQL(建表/ATTACH/视图),支持
$VAR/${VAR}环境变量插值;无文件时默认尝试读<dir>/init.sql。实测可用它现场建演示表:
shaper --addr 0.0.0.0:5454 --dir /var/lib/shaper --init-sql "CREATE OR REPLACE TABLE sales AS SELECT date '2026-01-01' + INTERVAL (i) DAY AS day, 'channel-' || (i % 3 + 1) AS channel, (random()*1000)::INT AS amount FROM range(90) t(i)"
启动后经管理 API 验证建表生效(实测回显,节选):
"tables": [
{
"name": "sales",
"columns": [
{ "name": "day", "type": "TIMESTAMP", "nullable": true },
{ "name": "channel", ...
- deploy:启动时自动部署目录内的仪表盘与任务文件(等价于执行一次
shaper deploy,无需认证与 shaper.json),官方建议与--no-edit组合实现「Git 仓库 → 只读生产环境」的纯代码发布流。⚠️ 有冲突会拒绝启动,生产慎用该失败语义。
5.3 认证与会话域
--jwt-secret STRING Static shared secret for signing and validating JWTs
--jwtexp DURATION JWT expiration duration (default: 15m0s)
--sessionexp DURATION Session expiration duration (default: 720h0m0s)
--inviteexp DURATION Invite expiration duration (default: 168h0m0s)
--sso-login-url STRING SSO Login URL to redirect users when authentication is missing or expired
--no-api-keys Disable API keys
逐项说明:
- jwt-secret:不设置时每次启动动态生成并存入 NATS(重启后仍可复用);设为固定值才能与外部 SSO 登录端点/嵌入页共享签名能力。实测设
--jwt-secret q1w2e3r4(演示密钥)后,含userId/userEmail/userNameclaim 的 HS256 JWT 可直接通过Authorization: Bearer调管理 API——未认证请求返回 401(日志报token signature is invalid: signature is invalid,可据此排查密钥不一致); - sso-login-url:无有效 JWT 访问 UI 时跳转的外部登录页地址(登录页负责签 JWT 并以
回调URL#token=<jwt>重定向回来); - jwtexp/sessionexp/inviteexp:三段过期时长——API 调用 JWT(15 分钟)、用户会话(默认 720 小时即 30 天)、邀请链接(7 天)。安全基线:对外暴露的部署建议 sessionexp 收紧到 24h~72h;
- no-api-keys:关闭 API Key 功能(纯人工使用的内部部署可关,缩小凭据面)。
5.4 快照备份域
--snapshot-s3-bucket STRING S3 bucket for snapshots (required for snapshots)
--snapshot-s3-endpoint STRING S3 endpoint URL (optional, defaults to AWS S3 if not provided)
--snapshot-s3-access-key STRING S3 access key (optional, can use AWS_ACCESS_KEY_ID environment variable)
--snapshot-s3-secret-key STRING S3 secret key (optional, can use AWS_SECRET_ACCESS_KEY environment variable)
--snapshot-s3-region STRING AWS region (optional, can use AWS_REGION environment variable)
--snapshot-time STRING time to run daily snapshots, format: HH:MM (default: 01:00)
--no-snapshots Disable automatic snapshots
--no-auto-restore Disable automatic restore of latest snapshot on startup
逐项说明:
- 快照触发条件:配置
snapshot-s3-bucket即启用每日定时快照(实测未配置时日志报Snapshots disabled); - endpoint:不填默认 AWS S3,填 MinIO 等对象存储地址即兼容 S3 协议的私有化备份;
- 凭据:支持完整 AWS 凭据链(环境变量/IAM 角色/凭据文件),flag 仅作覆盖——生产推荐用
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY/AWS_REGION环境变量注入而非写进启动命令; - auto-restore:默认启动时自动恢复最新快照——灾难恢复友好,但注意「空数据目录 + 有快照」会自动回填;做迁移演练时要意识到该行为(需要干净启动时显式
--no-auto-restore); - snapshot-time:每日快照时刻,默认凌晨 01:00,按业务低峰调整。
5.5 NATS 与集群域
--nats-host STRING NATS server host (default: 0.0.0.0)
-p, --nats-port INT NATS server port. If not specified, NATS will not listen on any port. (default: 0)
-t, --nats-token STRING NATS authentication token
--nats-servers STRING Use external NATS servers, specify as comma separated list
--nats-max-store STRING Maximum storage in bytes, set to 0 for unlimited (default: 0)
--nats-js-key STRING JetStream encryption key
--nats-dir STRING Override JetStream storage directory (default: [--dir]/nats)
--node-id-file STRING File to store and lookup node ID (default: [--dir]/node-id.txt)
--stream-prefix STRING Prefix for NATS stream and KV bucket names
--subject-prefix STRING prefix for NATS subjects. Should probably end with a dot.
逐项说明:
- nats-port:默认 0 = 内嵌 NATS 只服务于本进程不对外监听(实测
ss -ltn见不到 NATS 端口);需要外部程序直接推流/多实例组网时才显式开端口,并配nats-token鉴权; - nats-servers:单机/集群的分水岭——填外部 NATS 地址列表后,本实例不再内嵌 NATS,多个 Shaper 实例共享流与 KV(多节点水平扩展的基础);
- nats-max-store / nats-js-key:JetStream 存储上限(0 不限,生产建议按磁盘余量设上限防打满)与静态加密密钥;
- stream-prefix / subject-prefix / 各 stream 名:多套 Shaper 共用同一 NATS 集群时用前缀隔离命名空间(ingest/state/tasks/snapshots 四条流 + config/tmp-dashboards/downloads 三个 KV 桶均有独立命名参数,默认值见
shaper --help); - node-id-file:节点身份持久化文件,多节点部署时每节点需独立且稳定,勿放在共享存储上。
5.6 功能开关域与 TTL 域
--no-edit Disable editing dashboards via the UI
--no-tasks Disable task functionality
--no-public-sharing Disable public sharing of dashboards
--no-password-protected-sharing Disable sharing dashboards protected with a password
--no-ingest Disable data ingestion
--no-chrome-sandbox Disable Chrome sandbox for PDF/PNG generation
--ingest-max-age DURATION Maximum age of messages in the ingest stream. Set to 0 for indefinite retention (default: 0s)
--state-max-age DURATION Maximum age of messages in the state stream (default: 0s)
--task-results-max-age DURATION Maximum age of messages in the task-results stream (default: 0s)
--tmp-dashboards-ttl DURATION TTL for temporary dashboards (default: 24h0m0s)
--downloads-ttl DURATION TTL for download intents (default: 10m0s)
逐项说明:
- 生产加固组合:纯展示型生产环境推荐
--no-edit(冻结 UI 编辑、发布走 Git deploy)+ 按需--no-public-sharing/--no-password-protected-sharing(关闭对外分享面)+--no-ingest(不用摄取功能时关闭); - no-chrome-sandbox:关闭 headless Chrome 沙箱。官方说明:容器/无沙箱权限环境会自动设置(隔离层已存在);裸机 root 运行导致 Chrome 起不来时是首查项;
- TTL 域:
ingest/state/task-results-max-age默认 0 = 消息永久保留——高吞吐摄取场景必须设上限防 JetStream 无限膨胀;tmp-dashboards-ttl 24h控制 API 创建的临时仪表盘(POST /api/dashboards)存活期,downloads-ttl 10m控制下载意图的时效。
5.7 TLS 域(已弃用)
--tls-domain STRING DEPRECATED: Domain name for TLS certificate
--tls-email STRING DEPRECATED: Email address for Let's Encrypt registration
--tls-cache STRING DEPRECATED: Path to Let's Encrypt cache directory (default: [--dir]/letsencrypt-cache)
--https-port STRING DEPRECATED: Overwrite https hostname to not listen on all interfaces
四个 TLS 参数均已标注 DEPRECATED(内建 Let's Encrypt 路线被官方弃置),且设置后 --addr 失效。生产方案:Nginx/Caddy 反代终止 TLS,Shaper 保持 HTTP 监听内网——证书续期、密钥管理全部留在代理层,参数面更干净。
六、生产配置模板
适用规模:16GB 内存 / 200GB SSD / 单机 50 人以内内部用户 / 日摄取百万行级的中型内部数据门户场景。使用纯文本配置文件承载基线(/etc/shaper/shaper.conf,每行一个 flag、空格分隔):
# /etc/shaper/shaper.conf —— Shaper 0.26.4 单机生产基线(16GB 内存 / 200GB SSD)
# —— 服务器基础 ——
addr 0.0.0.0:5454
log-level info
cors-domains dashboard.example.com
pdf-date-format 2006-01-02
# —— 存储与数据 ——
dir /var/lib/shaper
allowed-duckdb-extensions httpfs,parquet,json,postgres
no-duckdb-community-extensions
# —— 认证与会话 ——
jwt-secret q1w2e3r4
sso-login-url https://sso.example.com/shaper-login
sessionexp 24h
# —— 功能开关(纯展示型生产) ——
no-edit
no-tasks
# —— 消息保留(高吞吐摄取防膨胀) ——
ingest-max-age 168h
task-results-max-age 72h
# —— 快照(MinIO 兼容对象存储,凭据经环境变量注入) ——
snapshot-s3-bucket shaper-snapshots
snapshot-s3-endpoint http://10.89.56.10:9000
snapshot-time 02:30
配套 systemd 单元(/etc/systemd/system/shaper.service)注入凭据环境变量与配置文件:
[Service]
Type=simple
Environment=AWS_ACCESS_KEY_ID=shaperbackup
Environment=AWS_SECRET_ACCESS_KEY=q1w2e3r4
Environment=AWS_REGION=us-east-1
ExecStart=/usr/local/bin/shaper --config-file /etc/shaper/shaper.conf
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
模板要点解读:
- 凭据分离:S3 备份密钥走 systemd
Environment=(对应 AWS 凭据链),配置文件里不落密钥;演示值仅为模板占位,生产替换为强随机并收敛文件权限(chmod 640 /etc/shaper/shaper.conf); - 扩展白名单 + 关社区扩展:把
INSTALL/LOAD面收窄到业务必需四件套,是 DuckDB 引擎层最重要的安全项; --no-edit+ Git 发布流:仪表盘改动经shaper validate/shaper deploy(见《Shaper 0.26.4 常用 CLI 命令与运维实操》)进入生产,杜绝 UI 手改导致的环境漂移;- TTL 上限:摄取流 7 天、任务结果 3 天,防 JetStream 存储慢性打满(
nats/目录在数据盘内); - 资源占用参照:该规模下进程常驻内存约 100~300MB(含内嵌 NATS 与 DuckDB 缓冲),SSD 预留 50GB 给数据目录即可支撑日摄取百万行级。
七、常见问题(FAQ)
Q1:设了参数但好像没生效?
按优先级排查三通道覆盖关系:命令行 flag > 环境变量(SHAPER_*)> 配置文件。systemctl show shaper -p ExecStart 确认实际启动命令;进程环境用 systemctl show shaper -p Environment 核对;必要时 --log-level debug 重启观察参数加载日志。
Q2:环境变量名怎么从 flag 推导?
规则:前缀 SHAPER_ + flag 名大写 + - 换 _(官方 help 自述)。例:--snapshot-s3-bucket → SHAPER_SNAPSHOT_S3_BUCKET、--nats-token → SHAPER_NATS_TOKEN、-d/--dir → SHAPER_DIR。
Q3:配置文件里能写带连字符的长 flag 吗?
能。纯文本每行一条,flag 名与值以空格分隔(如 snapshot-s3-bucket shaper-snapshots),布尔开关只写名字不写值(如 no-edit 独占一行)。注意该文件由 --config-file 显式指定;CLI 子命令用的 ./shaper.json(JSON 格式,存 url/watch 目录)是另一套,不要把服务端参数写进 shaper.json。
Q4:--addr 设了 0.0.0.0 仍然外部打不开?
依次排查:进程实际参数(Q1 方法)→ ss -ltn | grep 5454 确认监听 0.0.0.0:5454 → 防火墙/安全组放行 → 是否误设了 --tls-domain(设置后 addr 失效,服务改听 80/443)。
Q5:多节点部署最小参数集是什么?
各节点指向同一外部 NATS(--nats-servers nats://10.89.56.10:4222)+ 共同的 --stream-prefix(隔离命名空间)+ 各自独立的 --dir 与 --node-id-file(节点身份不可共享)。数据目录若在共享存储上,DuckDB 单写者锁决定同一时刻只有一个实例可写库——多节点共享库场景请改用外部 NATS + 单写实例 + 其余只读消费的架构,或等待官方多写能力。
Q6:快照没按时间跑?
确认三件事:snapshot-s3-bucket 已配置(否则日志报 Snapshots disabled,实测如此)→ 凭据链可用(查日志 S3 认证错误)→ snapshot-time 与服务器时区一致(格式 HH:MM 按本地时区解析)。
八、参考链接
- 官方配置选项文档:https://taleshape.com/shaper/docs/configuration-options/
- 官方 System Architecture 文档:https://taleshape.com/shaper/docs/system-architecture/
- 官方 Deploy to Production 文档:https://taleshape.com/shaper/docs/deploy-to-production/
- 本专栏篇章:《Shaper 介绍与选型指南》 、《Shaper 0.26.4 裸机安装指南》 、《Shaper 0.26.4 常用 CLI 命令与运维实操》
- 数据引擎纵深:《DuckDB 配置与 PRAGMA 详解》 、《PostgreSQL 18 配置参数详解》(通过 postgres 扩展 ATTACH 外接 PG 时的参照)