Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第 8 章 发布第一个 Walrus Site

Walrus Sites 把静态网站发布成一个 Sui 对象:HTML、CSS、JavaScript、图片等文件存储在 Walrus,站点对象在 Sui 上保存资源索引和所有权。浏览器不会直接访问 Walrus 节点,而是通过 portal 把普通 HTTP 请求解析为 Sui 查询和 Walrus 读取。

本章目标是发布一个最小静态站点,并学会用同一条命令更新它。

准备工作

本书以 2026-05-06 核对到的稳定版本为准:Walrus Mainnet / Testnet release 均为 v1.47.1,Devnet v1.48.0 是预发布版本。除非你明确在测试预发布功能,本章建议使用 testnet-v1.47.1mainnet-v1.47.1 对应的工具链。

你需要已经完成:

sui client active-env
sui client active-address
walrus --version
site-builder --help

Testnet 发布还需要测试网 SUI 和 WAL。Mainnet 发布需要真实资产,并且通过 https://wal.app 访问 Mainnet 站点时需要 SuiNS 名称,第 10 章会展开。

最小站点目录

本仓库提供一个可直接部署的例子:

examples/sites/minimal-static-site/
├── assets/
│   └── site.css
├── about.html
├── index.html
└── ws-resources.json

Walrus Site 的入口文件必须是站点根目录下的 index.html。先本地预览:

cd examples/sites/minimal-static-site
python3 -m http.server 8080

浏览器打开 http://127.0.0.1:8080。这个本地服务器只用于预览;发布到 Walrus Sites 后不需要源站服务器。

第一次部署

从仓库根目录运行:

site-builder --context testnet deploy --epochs 1 examples/sites/minimal-static-site

deploy 会做两件事:

  1. 把目录中的静态资源打包上传到 Walrus。
  2. 在 Sui 上创建一个 Walrus Site 对象,保存每个路径到 Walrus 资源的索引。

第一次部署成功后,site-builder 会把新建站点对象 ID 写回 examples/sites/minimal-static-site/ws-resources.jsonobject_id 字段。这个文件应该提交到代码库,因为后续部署要靠它判断“更新已有站点”,而不是“创建新站点”。

如果你不想污染示例文件,可以先复制一份:

cp -R examples/sites/minimal-static-site /tmp/my-walrus-site
site-builder --context testnet deploy --epochs 1 /tmp/my-walrus-site

查看部署结果

部署输出会列出资源路径和站点对象 ID。常用检查命令:

site-builder sitemap --id 0xYOUR_SITE_OBJECT_ID
site-builder convert 0xYOUR_SITE_OBJECT_ID

sitemap 查看站点对象里登记了哪些资源。convert 把十六进制对象 ID 转成 Base36,用于部分 portal 的子域名解析。

访问方式取决于网络和 portal:

网络访问方式
Testnet使用本地或自托管 portal。官方文档当前不提供公共 Testnet portal。
Mainnet使用 https://wal.app,但需要先把 SuiNS 名称指向 Walrus Site 对象。
自托管 portal可使用 Base36 对象 ID 或把 portal 固定到某个站点。

更新站点

修改 index.htmlassets/site.css 后,再运行同一条命令:

site-builder --context testnet deploy --epochs 1 examples/sites/minimal-static-site

只要 ws-resources.json 中已有 object_iddeploy 就会更新对应站点。签名钱包必须是该 Walrus Site 对象的 owner,否则交易会失败。

如果你要显式更新另一个站点:

site-builder --context testnet deploy \
  --object-id 0xYOUR_SITE_OBJECT_ID \
  --epochs 1 \
  examples/sites/minimal-static-site

不要部署源码根目录

对 Vite、Next.js 静态导出、Astro、Docusaurus、mdBook 等项目,site-builder 的目录参数应该指向构建产物,而不是项目根目录:

npm run build
site-builder --context testnet deploy --epochs 3 dist

错误示例:

site-builder --context testnet deploy --epochs 3 .

这样会把 node_modules、源码、临时文件甚至密钥误上传,增加费用,也扩大泄露风险。生产项目应在构建输出目录中保留 index.html、静态资源和 ws-resources.json,只发布浏览器真正需要的文件。