SpacetimeDB Maincloud 部署指南:从 CLI 发布到云端托管与客户端连接 📅 发布时间:2026/9/14 0:31:30 👁 浏览次数: SpacetimeDB Maincloud 部署指南从 CLI 发布到云端托管与客户端连接【免费下载链接】SpacetimeDBDevelopment at the speed of light项目地址: https://gitcode.com/GitHub_Trending/sp/SpacetimeDBMaincloud 是 SpacetimeDB 官方提供的托管云服务开发者无需自行维护服务器环境即可将 SpacetimeDB 模块一键发布到云端。本文将完整讲解使用 CLI 完成登录、发布、身份绑定的全流程并结合当前仓库源码版本 1.12.0深入剖析publish命令的底层实现与配置细节最后给出 TypeScript、C#、Rust 三种客户端连接云端数据库的接入方式帮助读者从本地运行平滑过渡到云端托管。Maincloud 是什么Maincloud 是一个托管式云服务managed cloud service它为开发者提供了把 SpacetimeDB 应用发布到云端的便捷途径。与本地自建standalone服务不同Maincloud 由服务商统一负责运行环境的维护、扩容与安全开发者只需要专注于模块本身的开发与发布。在 CLI 的默认配置中maincloud已经被预置为一个内建服务器条目。在 crates/cli/src/config.rs 中可以看到CLI 初始化配置时会同时创建local127.0.0.1:3000http与maincloud两个服务器配置且maincloud就是默认服务器let maincloud ServerConfig { host: maincloud.spacetimedb.com.to_string(), protocol: https.to_string(), nickname: Some(maincloud.to_string()), ecdsa_public_key: None, }; RawConfig { default_server: maincloud.nickname.clone(), server_configs: vec![maincloud, local], ... }也就是说在你全新安装 CLI 后-s maincloud或直接省略-s即可命中这条预置配置无需手工添加任何服务器信息。通过 CLI 发布到 Maincloud发布过程共三步与原文档一致并补充了可运行的细节第 1 步安装 SpacetimeDB CLI前往官方安装页面下载并安装对应平台的 CLIWindows / macOS / Linux 均支持。安装完成后可以用如下命令验证 CLI 可用spacetime --version第 2 步创建你的模块参考 Getting Started快速上手 创建一个模块工程。工程内应包含服务端模块源码如 Rust 的src/lib.rs、TypeScript 的src/index.ts或 C# 的Lib.cs模块工程通常位于项目的spacetimedb/子目录下或直接位于项目根目录。第 3 步发布到 Maincloudspacetime publish -s maincloud my-cool-module其中-s maincloud指定目标服务器为 Maincloud对应主机maincloud.spacetimedb.com走https协议my-cool-module是你为数据库起的名称也是后续在 Web 控制台和客户端中使用的数据库域名。发布成功后CLI 会打印出数据库的域名与 identity例如Created new database with name: my-cool-module, identity: 0x...如果目标主机是 MaincloudCLI 内部通过 is_maincloud_host 对maincloud.spacetimedb.com做大小写不敏感匹配还会额外打印控制台入口Dashboard: https://spacetimedb.com/my-cool-module深入publish命令参数、校验与发布链路数据库命名规则publish命令对数据库名称有严格校验。在 crates/cli/src/subcommands/publish.rs 中数据库名称必须匹配正则/^[a-z0-9](-[a-z0-9])*$/即仅允许小写 ASCII 字母与数字多个单词之间用单个连字符-分隔不能以连字符开头或结尾不能出现连续连字符不能为空也不能是 identity。底层实现在 crates/client-api-messages/src/name.rs 的parse_database_name中逐字符校验并区分了Empty空名、Hyphen连字符非法、Invalid非法字符、Identityidentity 不能当作数据库名四种错误类型。此外名称中还可使用parent/child形式指定父域或通过--parent/--organization参数把数据库挂到既有团队或组织之下父域与组织只能在创建数据库时设置更新时不可修改。常用发布参数publish命令支持丰富的参数以下为发布到 Maincloud 时最常用的几项定义见 publish.rs参数说明-s, --server server目标服务器传昵称如maincloud、域名或 URL-p, --module-path path模块工程路径绝对或相对。默认先找当前目录下的spacetimedb/子目录找不到则用当前目录-b, --bin-path path直接发布已编译好的 wasm 二进制跳过本地构建与--module-path、--build-options互斥-j, --js-path path直接发布 JavaScript 文件不稳定特性同上互斥--build-options opts透传给构建命令的额外选项--clear-database发布前清空目标数据库会先弹出销毁确认可配合--yes跳过--break-clients允许对已有数据库进行破坏性变更跳过将破坏现有客户端的确认--parent parent指定父数据库的域或 identity新库继承父库的团队权限--organization org将数据库创建到指定组织名下--anon-identity使用匿名身份发布不绑定登录账号-y, --yes[values]跳过确认提示。可选值all、remote、migrate、break-clients、skip-login、delete-data可逗号分隔或重复传入。注意值必须用连接如--yesmigrate,break-clients发布时的内部调用链发布并非简单的上传文件CLI 会先经过一段发布前检查流程相关逻辑集中在 execute_publish_configs 与 apply_pre_publish_if_needed 中解析配置优先读取spacetime.json中的多目标配置可用 glob 匹配数据库名未找到则回退到纯 CLI 参数可通过--no-config强制忽略配置文件。身份认证调用get_auth_header获取认证头。若未登录且未指定匿名身份会引导用户登录。构建/读取程序若指定--bin-path/--js-path则跳过构建直接读取产物否则调用build::exec_with_argstring构建模块最终读取程序字节。远端发布确认当目标主机不是localhost/127.0.0.1时会提示 You are about to publish to a non-local server需确认后继续可用--yesremote跳过。Pre-publish 检查向/v1/database/{domain}/pre_publish发送程序字节检查是否存在破坏性变更breaking changes或需要手动迁移manual migration。对于已有数据库若变更会破坏现有客户端会要求确认若涉及主版本升级如 1.0 → 2.0会要求输入upgrade确认且发布后不可回退若需要删除数据但未指定--delete-data发布会直接中止。正式上传新数据库用POST /v1/database带名称的用PUT /v1/database/{domain}将程序字节作为请求体上传最终解析PublishResult返回Created new或Updated的结果。这套流程保证了云端发布的安全性防止误操作覆盖数据、防止无意中破坏现有客户端、防止未授权账号抢占数据库域名。将 CLI 身份绑定到 Web 控制台通过spacetimedb.com登录 CLI 后即可在 Web 控制台上查看你发布的所有模块。如果你在发布模块时没有使用spacetimedb.com账号登录例如使用了匿名身份可以随时补登方法就是先退出再重新登录spacetime logout spacetime login登录流程说明login命令的默认认证服务器是https://spacetimedb.com见 crates/cli/src/subcommands/login.rs 中的DEFAULT_AUTH_HOST。整个登录流程由源码 web_login 驱动CLI 向https://spacetimedb.com/api/auth/cli/login/request-token请求一个一次性登录 token自动打开浏览器若失败会打印 URL 提示手动打开跳转到https://spacetimedb.com/login/cli?token...CLI 每秒轮询api/auth/cli/status直到用户在网页上授权完成拿到会话令牌再以会话令牌换取 SpacetimeDB 令牌并写入本地配置随后显示登录身份。login还支持以下实用选项--token token直接用已有登录令牌认证跳过网页流程适合 CI 等无浏览器环境--no-browser不自动打开浏览器仅打印授权链接login show查看当前登录身份加--token可同时显示令牌注意不要泄露若同时配置了--auth-host host可对接自建的认证服务器如本地 dev 环境。对应的logout命令见 crates/cli/src/subcommands/logout.rs会尽力向认证服务器发送会话注销请求并清除本地保存的会话令牌与 SpacetimeDB 令牌若未登录会直接提示 You are not logged in.。在 Web 控制台查看模块打开 SpacetimeDB 官网并使用GitHub 账号登录登录后即可在个人主页https://spacetimedb.com/profile看到你发布的所有模块也可以直接通过数据库域名直达控制台例如https://spacetimedb.com/my-cool-module。这样CLI 身份与 Web 控制台就完成了绑定后续所有通过该账号发布的模块都会同步出现在控制台中方便查看运行状态、指标与配置。Maincloud 带来的核心收益按原文档及项目定位使用 Maincloud 托管可以获得三方面收益自动伸缩automatic scaling无需预先规划容量云端会根据负载自动调整资源稳健的安全保障robust security托管环境由平台统一加固与维护避免自建服务器的安全隐患免运维no hosting environment management不再需要操心部署、升级、备份等基础设施运维工作让开发者把精力集中在模块逻辑上。这些收益正好与 CLI 中maincloud作为默认服务器的设计相互印证开箱即用、零配置上云是 SpacetimeDB Development at the speed of light 理念在托管部署侧的落地。在客户端代码中连接已部署的模块要连接部署在 Maincloud 上的数据库客户端只需使用统一的主机地址https://maincloud.spacetimedb.com作为连接 URI再配合数据库名称即发布时的模块名如my-cool-module即可。三种主流 SDK 的写法如下TypeScriptDbConnection.builder().withUri(https://maincloud.spacetimedb.com);C#DbConnection.Builder() .WithUri(https://maincloud.spacetimedb.com)RustDbConnection::builder() .with_uri(https://maincloud.spacetimedb.com)连接建立后客户端即通过订阅subscription机制接收数据库中表数据的增量更新与本地部署的体验完全一致——唯一的区别只是连接地址指向云端。总结通过本文你已经掌握了从 CLI 登录、构建模块、发布到 Maincloud到 Web 控制台查看模块、再到客户端接入的完整闭环。关键要点回顾maincloud是 CLI 预置的默认服务器主机为https://maincloud.spacetimedb.com直接spacetime publish -s maincloud name即可上云发布前务必确认数据库命名符合^[a-z0-9](-[a-z0-9])*$规则并留意 CLI 的破坏性变更/数据删除/主版本升级三重确认使用 GitHub 账号登录spacetimedb.com后所有发布记录都会同步到 Web 控制台客户端统一以https://maincloud.spacetimedb.com为连接 URISDK 用法与本地开发一致。想要深入了解模块开发的更多细节可以参考 Getting Started 快速上手文档若需要查看 CLI 各子命令的完整参数可在安装后运行spacetime help publish、spacetime help login获取内建帮助。【免费下载链接】SpacetimeDBDevelopment at the speed of light项目地址: https://gitcode.com/GitHub_Trending/sp/SpacetimeDB创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考