- 后端
- 密码学
【免费下载链接】upspin
Upspin: A framework for naming everyone's everything.
导读
本文是 doc/server_setup.md(upspinserver通用部署手册)的配套专题,专门讲解如何将 Upspin 的 StoreServer 存储层切换到 Google Drive,使用户数据不再保存在服务器本地磁盘,而是存放在你的 Google Drive 空间内。读完本文,你将掌握:构建upspinserver-drive与upspin-setupstorage-drive两个变体二进制、通过 OAuth2 授权码将服务器与 Google Drive 账户绑定、以及如何衔接upspin setupserver完成整个部署闭环;同时你会从源码层面理解 Upspin 的存储后端抽象机制(cloud/storage注册与拨号模型)。
定位与前置条件:这是server_setup主流程的存储环节
本指南是 Setting upupspinserver手册的一部分,请先阅读该文档。在 Upspin 的部署流程中,搭建一个完整安装需要依次经历五个步骤:
- signup:为管理员账户注册公共密钥;
- configure your domain:配置域名并为服务器创建 Upspin 用户;
- setup storage(即本文场景):若选择云存储,则配置云端存储服务;
- deploy:将
upspinserver部署到 Linux 服务器; - configure:运行
upspin setupserver完成服务器配置。
其中除了部署之外,每一步都有对应的upspin子命令辅助完成。按 setupstorage.go 中帮助文本的定义,整个流程是"setupdomain第一步、setupstorage第二步、setupserver最终步"——本文要做的正是中间的第二步,并且是针对Google Drive这个特定存储位置的变体。
在动手之前,你需要备好主文档 Prerequisites 中要求的三个值:
- 一个可添加 DNS 记录的互联网域名(下文沿用文档示例
example.com); - 你的 Upspin 用户名(一个邮箱地址,例如
you@gmail.com),它将成为安装的管理员; upspinserver将要运行的主机名(例如upspin.example.com)。
此外请注意主文档中的命令约定:local$前缀表示在本地机器执行,server%前缀表示在服务器上执行。
构建upspinserver-drive与upspin-setupstorage-drive
Upspin 有多种upspinserver变体,每种变体对应一种存储位置(服务器本地磁盘或某个云存储提供商)。使用云存储的二进制都带有一个标识提供商的后缀,例如 GCP 对应upspinserver-gcp;这些二进制也存放在各自独立的仓库中。Google Drive 对应的就是upspinserver-drive与upspin-setupstorage-drive,存放在drive.upspin.io仓库。
要使用 Google Drive 存储,先获取drive.upspin.io仓库并安装两个变体命令:
local$ go get drive.upspin.io/cmd/...该命令会同时安装upspin-setupstorage-drive和upspinserver-drive两个命令。
从仓库源码可以理解为什么需要"变体":通用版 cmd/upspinserver/main.go 只通过空导入_ "upspin.io/cloud/storage/disk"注册了本地磁盘后端,而upspinserver本身是 DirServer 与 StoreServer 的组合体(详见 serverutil/upspinserver/main.go)。drive 变体则在通用实现之上额外注册 Google Drive 存储后端,从而让 StoreServer 把数据对象写入你的 Drive 空间,而不是$HOME/upspin/storage。仓库的 serverutil/frontend/frontend.go 中也保留了"drive.upspin.io": ...的映射记录,印证该仓库确实是独立的 drive 实现。
另外,按照主文档 Set up storage 的说明,你需要为服务器构建对应操作系统与处理器架构的二进制,主文档假设 64 位 Linux,即:
local$ GOOS=linux GOARCH=amd64 go build <drive 仓库中的 upspinserver 入口包>对比:如果选择服务器本地磁盘,则构建
upspin.io/cmd/upspinserver,数据默认存于$HOME/upspin/storage;但本地磁盘方案在磁盘故障时所有 Upspin 数据都会丢失。使用 Google Drive 这类云存储则可以规避单机磁盘损坏的风险。
授权你的 Google Drive 账户(OAuth2 授权码流程)
为了让 Upspin 服务器能在你的 Google Drive 空间中存储数据,需要向它提供OAuth2 授权码以完成账户授权。运行以下命令,并把example.com替换为你的域名:
local$ upspin setupstorage-drive -domain=example.com命令执行后会输出一个 URL 供你访问。操作流程为:
- 在浏览器中打开该 URL;
- 在 Google 页面中授权 Upspin 访问你的 Drive;
- 复制页面显示的授权码;
- 将授权码粘贴到运行命令的终端窗口中,按回车。
授权成功后,终端应显示如下提示:
You should now deploy the upspinserver binary and run 'upspin setupserver'.这句话说明存储环节配置完成,可以进入主文档的部署(deploy)与配置(configure)阶段了。
这条命令在底层做了什么?
setupstorage系列命令的实际作用可以从仓库内同名实现推断。虽然 drive 专属代码位于外部仓库drive.upspin.io,但本地磁盘版本 cmd/upspin-setupstorage/setupstorage.go 揭示了通用机制:
- 命令读取
-where(默认$HOME/upspin/deploy)与-domain拼出的部署目录,并通过ReadServerConfig读取该目录下的serverconfig.json(JSON 编码的 ServerConfig); - 随后写入
StoreConfig字段(本地版写入backend=Disk、basePath=...),并用WriteServerConfig持久化; - 最后在标准错误输出提示下一步操作。
可以推断,upspin setupstorage-drive -domain=example.com所做的,就是在完成 OAuth2 授权后,把 Drive 后端所需的选项(后端类型、授权凭据等)写入serverconfig.json的StoreConfig字段——这正是随后upspin setupserver需要连同密钥一起推送到服务器、供 StoreServer 拨号使用的关键配置(见 subcmd/server.go 中SetupServerFiles列出的文件清单)。
数据存放位置与管理
关于数据管理,文档给出两条重要说明:
- 所有 Upspin 数据都存放在 Google Drive 的 Application Data 文件夹中,与你的常规个人文件完全隔离。这意味着用户在你的 Drive 主界面中看不到这些数据,它们不会占用"我的文件"视图,也不会被误删或混入日常同步。
- 你可以通过 Google Drive 的"管理应用"(Manage Apps)页面查看并管理 Upspin 所占用的 Drive 存储空间,例如在需要清理或撤销访问权限时进行操作。
这两点与cloud/storage的存储抽象是一脉相承的:Upspin 只把存储后端当作一个"按引用(ref)存取字节块"的接口来使用,后端到底落在本地磁盘还是 Drive 的隐藏应用数据区,对上层逻辑完全透明。
衔接主流程:部署与配置服务器
授权完成后,回到主文档 Set up a server and deploy 继续:
- 部署二进制:把
upspinserver-drive部署到服务器,并配置为开机自启、监听80与443端口。任何有公网 IP、能运行 Go 程序的机器均可(Linux、macOS、Windows 等),主文档建议个人安装至少 1 核 CPU、2GB 内存、20GB 磁盘空间;同时为upspin.example.com创建指向服务器 IP 的 DNSA记录。 - 测试连通性:此时服务器处于"setup mode"(启动日志会出现
Configuration file not found. Running in setup mode.),用浏览器访问https://upspin.example.com/,应看到Unconfigured Upspin Server字样。 - 运行
upspin setupserver:
local$ upspin setupserver -domain=example.com -host=upspin.example.com这一步(实现在 cmd/upspin/setupserver.go)会:把setupdomain创建的服务器用户注册到公共密钥服务器;将$where/$domain下的Writers、public.upspinkey、secret.upspinkey、serverconfig.json通过 HTTPSPOST到服务器的/setupserver端点;重启服务器;并为管理员用户创建根目录。同时它会创建 StoreServer 的Writers组文件(upspin@example.com/Group/Writers),只有列表中的用户才被允许向该服务器写入数据——如需扩容可参阅upspin setupwriters。
- 验证读写:
local$ echo Hello, Upspin | upspin put you@gmail.com/hello local$ upspin get you@gmail.com/hello Hello, Upspin能读到回显即表示整个upspinserver(含 Google Drive 存储后端)已成功打通。
源码视角:存储后端是如何被"插拔"的
理解本专题背后的插件化机制,对排查问题或日后切换后端都很有帮助。核心位于 cloud/storage/storage.go:
Storage接口只要求四个方法:LinkBase(返回引用下载的基础 URL,不支持直链的后端返回upspin.ErrNotSupported)、Download(按引用取字节)、Put(按引用存字节)、Delete(按引用删除),且实现必须支持并发安全;Lister接口(可选)提供带分页令牌的List,供 StoreServer 枚举已有引用;Register(name, fn)注册机制:每个后端(Disk、GCP、Drive 等)在自己的init中调用storage.Register注册构造函数,例如本地磁盘后端在 cloud/storage/disk/disk.go 注册为"Disk";Dial(name, opts...)拨号机制:按名称查找已注册构造器,并通过WithOptions("k1=v1,k2=v2")或WithKeyValue传入后端特有选项——drive 变体的upspin-setupstorage-drive所写入的StoreConfig选项正是最终走这条路径生效的。
因此,无论数据落在本地磁盘还是 Google Drive,StoreServer 侧看到的都是同一个字节存取抽象;差异只体现在"注册了哪个后端"以及"serverconfig.json里的StoreConfig写了什么"。
常见维护场景:重置与重新配置
如果部署过程中出现配置错误,主文档提供了重启流程:删除$HOME/upspin/server后重跑upspin setupserver即可。需要特别注意的是,该目录同时包含目录服务器数据与(本地磁盘方案下的)存储对象,删除即等于清空全部数据;而使用云存储方案时,清理后应一并删除存储桶中的孤立对象,以免继续为废弃数据付费。对于 Google Drive 方案,对应的清理动作即是在"管理应用"页面中移除 Upspin 占用的应用数据。
至此,你已经完成了以 Google Drive 为存储后端的 Upspin 服务器搭建:从构建upspinserver-drive、OAuth2 授权,到部署与配置的完整链路都已打通,接下来即可使用upspin命令行及生态工具正常读写你的 Upspin 树。
- 后端
- 密码学
【免费下载链接】upspin
Upspin: A framework for naming everyone's everything.
相关推荐
circleImageView4cj 圆形图片组件:从 cjpm.toml 到 hvigor 构建,工程结构与打包发布全解析
circleImageView4cj 圆形图片组件:从 cjpm.toml 到 hvigor 构建,工程结构与打包发布全解析 circleImageView4c
后端密码学Upspin 使用 Backblaze B2 云存储:upspinserver-b2cs 服务器搭建实战指南
Upspin 使用 Backblaze B2 云存储:upspinserver b2cs 服务器搭建实战指南 本指南是 Upspin 服务器搭建总纲(doc/s
后端密码学终极指南:在iOS设备上运行Minecraft Java版的完整教程
终极指南:在iOS设备上运行Minecraft Java版的完整教程 PojavLauncher是一个专为iOS和Android设备设计的Minecraft J
游戏开发移动开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考