news 2026/9/13 17:02:52

如何用 config.toml 配置 SpacetimeDB Standalone 的日志级别、提交日志与 JWT 签名密钥

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用 config.toml 配置 SpacetimeDB Standalone 的日志级别、提交日志与 JWT 签名密钥

如何用 config.toml 配置 SpacetimeDB Standalone 的日志级别、提交日志与 JWT 签名密钥

【免费下载链接】SpacetimeDBDevelopment at the speed of light项目地址: https://gitcode.com/GitHub_Trending/sp/SpacetimeDB

spacetime start启动的本地 Standalone 数据库实例,其运行行为可以通过数据库数据目录下的config.toml来调整。这篇文章解决一个具体任务:在已安装 SpacetimeDB CLI 的环境中,通过修改config.toml设置三组配置——日志级别([logs])、本地持久化的提交日志行为([commitlog])、以及数据库签发身份令牌所用的 JWT 签名密钥([certificate-authority])——然后重启实例并验证配置生效。适用对象是运行 Standalone 版本做本地开发或自托管的开发者;前提是已安装spacetimeCLI 并能执行spacetime start

配置参考文档是 Standalone Configuration,密钥生成与轮换流程可参考 Azure Self-Hosted VMs + Key Rotation。

先找到 config.toml 的位置

配置文件位于{data-dir}/config.toml{data-dir}是数据库的数据目录。运行spacetime start时,启动输出会直接打印这个目录,文档示例(示例结果):

spacetimedb-standalone version: 1.0.0 spacetimedb-standalone path: /home/user/.local/share/spacetime/bin/1.0.0/spacetimedb-standalone database running in data directory /home/user/.local/share/spacetime/data

各平台的数据目录默认位置:

  • Linux / macOS:~/.local/share/spacetime/data
  • Windows:%LOCALAPPDATA%\SpacetimeDB\data

修改配置后需要重启spacetime start进程才能生效,Standalone 模式默认在前台运行。如果数据目录中还没有config.toml,首次启动会写入一份内置的默认模板,即仓库中的 crates/standalone/config.toml,可以打开它对照各节注释进行修改。

配置日志级别:[logs]

[logs]表控制服务器日志的输出量,文档给出的完整示例:

[logs] level = "error" directives = [ "spacetimedb=warn", "spacetimedb_standalone=info", ]
  • level可取"error""warn""info""debug""trace""off",不区分大小写。语义是“只输出该级别及以上的消息”,例如设为warn时只会记录errorwarn级别的日志。
  • directives是一组过滤指令,可以覆盖全局level,按 tracing-subscriber 的 EnvFilter directives 语法书写,用目标=级别的格式按模块单独控制日志量,例如上面的配置中spacetimedb模块按warn过滤、spacetimedb_standalone模块按info过滤。

需要留意文档中的原话限制:directives主要设计为调试工具,日志消息的字段和 target不视为稳定接口,升级后可能需要重新核对指令内容。

配置提交日志:[commitlog]

[commitlog]表配置本地持久化(local durability)。文档明确说明这些设置属于进阶项,可能影响恢复行为、磁盘占用、内存占用和写吞吐;省略的字段会使用服务器内置默认值,所以只调整你关心的字段即可。示例(数值取自文档):

[commitlog] log-format-version = 1 max-segment-size = 1073741824 # 1GiB offset-index-interval-bytes = 4096 offset-index-require-segment-fsync = true preallocate-segments = false write-buffer-size = 131072 # 128KiB

各字段含义以文档为准:

字段含义与限制
log-format-version支持的最大 commitlog 格式版本,写入时也使用它。文档特别提示:正常情况下不应改动该值;改动的理由是让服务器接受一份更旧的、不兼容的 commitlog。
max-segment-sizecommitlog 分段允许增长到的最大字节数。
offset-index-interval-bytes每写入多少字节后,向 offset index 追加一条索引条目。
offset-index-require-segment-fsynctrue时,要求分段先同步到磁盘后才追加索引条目;false时即使 commitlog 未同步也会按offset-index-interval-bytes更新索引,意味着崩溃后索引中可能包含并不存在的条目。两种取值下 commitlog 都能正确工作,但选择会影响性能。
preallocate-segmentstrue时为分段预分配磁盘空间直至max-segment-size;仅在 commitlog 的 fallocate 支持启用时有效。
write-buffer-size提交数据刷入存储前的内存缓冲区字节数。

配置 JWT 签名密钥:[certificate-authority]

[certificate-authority]表配置数据库用于签发身份令牌的一对公钥/私钥:

[certificate-authority] jwt-priv-key-path = "/path/to/id_ecdsa" jwt-pub-key-path = "/path/to/id_ecdsa.pub"

上面的路径是占位写法,需替换为你实际存放密钥的文件绝对路径。crates/standalone/config.toml 中同样给出了注释形式的示例,使用~/.config/spacetime/id_ecdsa(私钥)与~/.config/spacetime/id_ecdsa.pub(公钥),取消注释并改成你的路径即可。

生成兼容密钥对的规范命令在 Key Rotation 指南 中:SpacetimeDB 用 EC 密钥对(ES256,P-256)给本地身份令牌签名,用 OpenSSL 生成:

mkdir -p ./.generated/spacetimedb-keys openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:prime256v1 -out ./.generated/spacetimedb-keys/id_ecdsa openssl pkey -in ./.generated/spacetimedb-keys/id_ecdsa -pubout -out ./.generated/spacetimedb-keys/id_ecdsa.pub chmod 600 ./.generated/spacetimedb-keys/id_ecdsa chmod 644 ./.generated/spacetimedb-keys/id_ecdsa.pub

生成后把config.toml中的两个路径指向这两个文件。关于密钥加载,文档给出的硬性约束:

  • 密钥在服务器启动时加载,没有热重载;更换密钥后必须重启spacetime start进程。
  • 本地签发的令牌只用一个当前生效的公钥来验证;轮换密钥会使旧私钥签发的令牌失效。
  • 密钥路径也可以不走config.toml,而是用--jwt-priv-key-path/--jwt-pub-key-path启动参数传入;config.toml与启动参数是同一份配置的两种来源。若两者都没提供,启动会失败并提示缺少--jwt-{pub,priv}-key-path

验证配置是否生效

按下面的顺序核对,每一步都对应文档中明确描述的行为:

  1. 确认配置的是对的文件:重新运行spacetime start,观察启动输出中database running in data directory ...一行打印的目录,确认你编辑的正是该目录下的config.toml

  2. 日志级别:观察前台输出(Standalone 模式在前台运行)。按level的语义,设为error后应只剩error及以上日志;如果你用directives单独放开了某个模块(如spacetimedb=debug),该模块的debug日志应恢复出现。

  3. JWT 密钥:重启后对数据库执行一次spacetime publish,再检查日志中指南给出的标记关键字:

    docker compose -f ./.generated/docker-compose.yaml logs --no-color --tail=200 spacetimedb | rg "PUBLISH_SUCCESS|PUBLISH_FAILED|InvalidSignature|not authorized"

    该命令来自 Docker 自托管场景;非容器部署下用spacetime start的前台输出或你的日志查看方式,对照相同的关键字判断:出现PUBLISH_SUCCESS表示发布链路正常;InvalidSignaturenot authorized对应令牌签名无效或身份不属于数据库所有者这两种失败模式。注意这条日志过滤命令里的 compose 文件路径属于该指南示例的目录约定,非容器部署不要照抄。

限制与常见坑

  • log-format-version不要随手改:文档将其标注为 cautions 级别的设置,正常场景保持默认;只有要接受旧的、不兼容的 commitlog 时才需要动它。
  • offset-index-require-segment-fsync的取舍:设为false换写性能,代价是崩溃后 offset index 可能包含不存在的条目;设为true时索引条目可能比严格的间隔更少。两者下 commitlog 行为都正确,属性能与恢复行为的权衡。
  • preallocate-segments依赖 fallocate 支持:在未启用 fallocate 的环境里该设置没有效果,文档没有说明启用条件,若不确定就先保持默认。
  • 改配置必须重启:日志、commitlog、密钥都不支持热更新;同一份指南里的module-http.enabled等设置同样要求重启服务器。
  • directives不稳定:日志字段与 target 不承诺兼容,版本升级后建议重新核对指令是否仍然命中目标模块。

下一步

如果需要系统化的自托管部署(Docker 部署、密钥轮换、发布验证的完整脚本),继续看 Key Rotation 指南 中的 Mode A / Mode B 两种部署模式;只想跑通本地开发流程的话,从 Getting Started 的spacetime start出发,再按需回来调整本文的三组配置。

【免费下载链接】SpacetimeDBDevelopment at the speed of light项目地址: https://gitcode.com/GitHub_Trending/sp/SpacetimeDB

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 17:01:46

如何用 SpacetimeDB 计划表让 Reducer 在指定时间或按间隔定时执行

如何用 SpacetimeDB 计划表让 Reducer 在指定时间或按间隔定时执行 【免费下载链接】SpacetimeDB Development at the speed of light 项目地址: https://gitcode.com/GitHub_Trending/sp/SpacetimeDB SpacetimeDB 的模块中,Reducer 是修改数据库状态的唯一途…

作者头像 李华
网站建设 2026/9/13 17:01:28

TMC电机驱动电流精准匹配三步法:从参数表到电流处方单

1. 这不是芯片参数表,而是一份电机驱动系统的“电流处方单”TMC驱动芯片——这三个字母在步进电机控制领域几乎等同于“静音、平滑、高精度”的代名词。但现实里,我见过太多工程师拿着TMC2209的资料兴奋下单,结果装机后电机一转就抖&#xff…

作者头像 李华
网站建设 2026/9/13 17:00:56

Java+Vue垃圾分类小程序开发实战与架构解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 16:58:48

手写User-Based协同过滤推荐系统:从稀疏矩阵到前端展示全链路实现

简介:本资源是一套完整的基于Python的协同过滤推荐算法电影推荐系统,专为计算机相关专业本科生毕业设计、课程设计及项目实战学习者打造,有效解决推荐系统原理理解与工程落地脱节问题。压缩包共1197个文件,含22个核心Python源码文…

作者头像 李华