#at-proto #protocols #personal #com #file #account

bin+lib 腺苷-pds

简单的非正式个人数据服务器 (PDS) 用于 AT 协议和 bsky.app

6 个版本 (3 个破坏性更新)

0.4.0 2023 年 8 月 21 日
0.3.0 2023 年 3 月 5 日
0.2.0 2022 年 12 月 20 日
0.1.2 2022 年 11 月 22 日

#4#atproto

每月 21 次下载

AGPL-3.0 或更高版本

210KB
5K SLoC

腺苷-pds: atproto.com 小世界个人数据服务器

这是一个简单的、爱好者级别的 AT 协议 (atproto.com) 个人数据服务器 ("PDS") 实现。它针对协议的“小世界”用例,例如个人或组织自托管。

有一个 手册页,其中包含使用和配置详细信息。

功能

  • com.atproto 词典实现(未验证)
  • 粗糙的仓库 CAR 文件导出(完整历史记录)
  • 部分 app.bsky 词典实现(帖子、关注者)
  • 粗糙的内部 did:plc 生成
  • 粗糙的仓库存储和处理
  • 自托管 did:web 配置
  • 小世界注册和 did:plc 主机配置
  • 服务器之间的交互,全都有(仓库同步等)
  • 远程 DID 解析(did:plc、did:web 等)
  • 记录/请求的 Lexicon 架构验证
  • 仓库 CAR 文件导入:验证和应用数据库更新
  • did:plc 服务器交互和链验证
  • 完整的 app.bsky 词典实现(通知、点赞、参与者等)

支持两种主要的部署配置

  • "固定 did:web 账户":账户只能通过 CLI 注册,并使用 did:web 而不是 did:plc。为匹配域名提供 did:web DID 文档,并在域名匹配时从主页提供个人资料/源
  • "域名通配符注册":账户可以通过 XRPC 注册,限制在特定托管域下的处理,可能需要秘密邀请码。本地生成 did:plc 标识符。从任何域提供网页视图,已注册处理域是个人资料/源视图

快速入门

待办事项

  • 生成一个 PDS 全局密钥,并存储为环境配置变量
  • 设置其他配置变量(参见 --help 或手册页)

部署

待办事项:重写此内容

  • 生成一个 PDS 全局密钥,并存储为环境配置变量
  • 设置其他配置变量(参见 --help 或手册页)
  • 设置带有 SSL 的反向代理(例如 caddy 或 nginx 或 haproxy)
  • 从适当的本地工作目录运行命令(例如数据库)
  • 可能设置一个 systemd 单元文件
  • adenosine-pds serve-vv

实现细节

这是一个Rust编程语言项目。

当前使用 rouille 作为(阻塞)Web框架;rusqlite 用于(阻塞)直接sqlite数据库交互;ipfs-sqlite-block-store 作为(阻塞)IPLD块存储。

进行一些清理和重构将非常有用

  • 更清晰的拥有权和引用(减少浪费的分配)
  • 错误处理(减少 unwrap() 诡计)
  • 避免互斥锁中毒
  • 切换到异步/await并发(替换或包装阻塞数据存储)(例如,axumsqlxiroh 块存储)

第三方代码

尚未发布到crates.io的iroh-car crate,已从iroh项目中提取出来,成为此crate的子模块。这基本上是逐字复制,并且原始版权和许可证适用于该代码。

在此crate中实现了对p256密钥类型的ucan支持。希望将其集成到上游。

开发和贡献

最低支持的Rust版本(MSRV)目前为1.61,使用2021年Rust版。

欢迎贡献、对话、错误报告和手写信件。这是一个低成本的业余项目,因此可能不会提供高触点的支持、功能请求、增长策略等。

源代码许可证是AGPLv3。请在任何初始贡献中承认此点,并说明您是否以及如何希望作为贡献者获得认可(例如,姓名和可选的URL)。

依赖项

~68MB
~1.5M SLoC