ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

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

如何用 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/dataWindows%LOCALAPPDATA%\SpacetimeDB\data修改配置后需要重启spacetime start进程才能生效Standalone 模式默认在前台运行。如果数据目录中还没有config.toml首次启动会写入一份内置的默认模板即仓库中的 crates/standalone/config.toml可以打开它对照各节注释进行修改。配置日志级别[logs][logs]表控制服务器日志的输出量文档给出的完整示例[logs] level error directives [ spacetimedbwarn, spacetimedb_standaloneinfo, ]level可取error、warn、info、debug、trace、off不区分大小写。语义是“只输出该级别及以上的消息”例如设为warn时只会记录error和warn级别的日志。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 密钥对ES256P-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。验证配置是否生效按下面的顺序核对每一步都对应文档中明确描述的行为确认配置的是对的文件重新运行spacetime start观察启动输出中database running in data directory ...一行打印的目录确认你编辑的正是该目录下的config.toml。日志级别观察前台输出Standalone 模式在前台运行。按level的语义设为error后应只剩error及以上日志如果你用directives单独放开了某个模块如spacetimedbdebug该模块的debug日志应恢复出现。JWT 密钥重启后对数据库执行一次spacetime publish再检查日志中指南给出的标记关键字docker compose -f ./.generated/docker-compose.yaml logs --no-color --tail200 spacetimedb | rg PUBLISH_SUCCESS|PUBLISH_FAILED|InvalidSignature|not authorized该命令来自 Docker 自托管场景非容器部署下用spacetime start的前台输出或你的日志查看方式对照相同的关键字判断出现PUBLISH_SUCCESS表示发布链路正常InvalidSignature或not 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),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表