
如何用 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),僅供參考