Bluesky,我为之激动的真Web3.0应用
本文在人工智障帮助下写作完成
Bluesky简介
Bluesky 是一个不同于传统社交媒体的平台,我也是最近几天在新闻中了解到的,刚开始粗略看了一下它的底层协议(atproto)就震惊了,这不就是万维网发明人的solid思想的具体体现吗?
讲到这里不免要踩一下币圈那些二货,天天自我标榜Web3圈钱割韭菜,我都对这个词过敏了,但我现在仍然要激动的说一句Bluesky是真Web3.0应用!
Bluesky解决了什么问题?
相比于传统社交平台(facebook/weibo/zhihu/douyin etc.),Bluesky 解决了以下几个主要问题:
-
去中心化:整个平台不受单个实体控制,传统平台想删帖就删帖,想封号就可以为所欲为的封号,说一句独裁者都不过分。
-
数据控制和隐私:atproto协议中身份id服务,数据服务和应用视图是相互独立解耦的,Bluesky允许用户或第三方托管身份id服务和数据服务。什么意思?夸张的说,你可以用Facebook的服务发帖,在微博上能够实时看到!如果哪一天微博不好好为你服务了,你可以选择将数据传输到其他平台,改换门庭。至此,你有了跟微博扳手腕的能力。
-
自定义信息流:这个跟信息茧房可以一起说一下,目前大多数应用都有推荐系统,就是系统只推跟你的兴趣相关的东西,于是宅男就越来越宅,渣男就越来越渣。Bluesky 允许用户自己定制信息流的算法,这个功能叫资讯源,比如我可以关注一个中文用户资讯源,这个资讯源的算法会实时生成最近24小时内中文用户发的帖子,类比于茧房,这就是一个大广场,说什么的都会有,自然就没有藩篱。当然这个功能也能实现一个类似传统平台的推荐算法,它是一个超集。
-
内容审查:发过贴的朋友都知道有很多关键词是不允许出现的,比如“法轮功”,我们也都明白这不是一个值得传播的科学的东西。传统平台通常有一个黑名单,触发黑名单的所有言论都被禁止,直接捂住人的嘴巴。Bluesky由于数据服务是解耦的,理论上讲就做不到禁止用户产生这样的内容,事实上这应该是第一个言论自由的平台。每个用户都能获取到网络中的所有信息,平台不再负责内容审查,而是把选择权交还给了用户,我们可以主动配置规则选择是否捂住耳朵不去接收那些刺耳的信息。
小结
单凭数据控制和隐私这一项,Bluesky就已经超神了,大家能理解我为什么这么亢奋、激动了吧?
怎么注册一起玩起来?
先安装Bluesky手机客户端,也可以免安装直接在网页中使用,打开 https://bsky.app/
经过我前两天的深度试用,我可以负责任的告诉大家,一共有三种注册方式。
A. 由Bluesky托管身份id服务和数据服务(默认)
直接跟着官方注册流程走就是
B. 由自己或第三方托管数据服务
这种方式下你的身份id(did.json文件)仍然是由Bluesky托管的,官方采用的是did:plc身份协议,有一个中心化的plc目录服务支持:https://web.plc.directory/
注册时只需要填入自己或第三方的数据服务地址和邀请码
C. 由自己或第三方同时托管身份id服务和数据服务
这种方式下你需要先创建身份id,目前只支持did:web身份协议
然后通过curl调用数据服务API的方式进行注册并激活账号
对于普通人,你可以选A或者B;对于有编程能力的开发者,三种方式随便选,我选择的是C。
我的身份id服务:*.hukoubook.com
我的数据服务:network.hukoubook.com
注册好了欢迎关注我的新号: @smitechow.com
想用我的数据服务?(陌生人勿扰)
直接找我,我给你邀请码。
以下内容普通人可能看不懂,开发者请继续
想用我的身份id服务?(允许陌生人)
前提条件你必须是开发者,如果你不是的话直接找我吧。
-
选择一个id,格式为:
xxx.hukoubook.com
-
生成你的身份id
我预编译了一个工具可以使用,具体请访问:https://github.com/DistPub/bsky-did-web
-
将你生成好的
did.json
文件上传到我的身份id服务中服务的代码仓库是:https://github.com/DistPub/did-on-hukoubook.com
请fork,在didweb
目录中按照已有组织形式存放文件并发起PR
通知我(admin#hukoubook.com
),由我来合并PR
cloudflare持续集成系统会在PR合并后自动部署上线你的身份id后续账户创建成功后还要更新
did.json
文件,请重复这一步如果你创建账户时用户标识符(handle)与身份id的域名(
xxx.hukoubook.com
)相同,你还需要上传atproto-did
文件
想同时用我的身份id服务和数据服务?(陌生人勿扰)
前提条件你必须是开发者,如果你不是的话直接找我吧。
-
先按照上面说的搞定
did.json
文件 -
找我,我给你一个邀请码
-
仿照如下执行shell命令
(base) ➜ pds TOKEN=$(./didweb sign --privkey $PRIVKEY --iss did:web:smite.hukoubook.com --aud did:web:network.hukoubook.com --exp 1800) (base) ➜ pds curl --request POST --header "Authorization: Bearer $TOKEN" --header "Content-Type: application/json" --data "{\"email\":\"your-email@domain.tld\", \"handle\":\"smite.hukoubook.com\", \"did\":\"did:web:smite.hukoubook.com\", \"password\":\"your-password\", \"inviteCode\":\"THE-INVITE-CODE\"}" "https://network.hukoubook.com/xrpc/com.atproto.server.createAccount" {"accessJwt":"XXX", ...}% (base) ➜ pds TOKEN="the-reponse-accessJwt-value" (base) ➜ pds curl --header "Authorization: Bearer $TOKEN" https://network.hukoubook.com/xrpc/com.atproto.identity.getRecommendedDidCredentials {"verificationMethods":{"atproto":"did:key:zQ3shcuEGrxWaEpjApMCVHQ6EhEa45sWWnp2kayV3s13mNWXY"},...}%
-
更新
did.json
文件 -
激活账户
(base) ➜ pds curl --request POST --header "Authorization: Bearer $TOKEN" https://network.hukoubook.com/xrpc/com.atproto.server.activateAccount
动手能力强,想要服务部署教程
没问题,只要你是开发者,官方文档非常详细。
- 部署自托管PDS(数据服务)wiki
- 部署自托管DID(身份id服务)wiki1 wiki2
只需要在相关域名下提供如下两个文件
https://yourdomain.com/.well-known/did.json
https://yourdomain.com/.well-known/atproto-did
想了解我的部署方式
我部署的方式与官方文档介绍的有很大不同,主要是我的基础设施严重依赖于cloudflare平台。如果你有cloudflare产品的背景知识,不妨理解看看。
我是这么部署数据服务的
官方提供的安装脚本中用到了caddy,它的作用是自动配置SSL证书,反向代理PDS服务,我的域名是直接在cf中管理的,所以我并不需要caddy,于是我修改了docker的compose文件去掉了caddy。
我的服务器所有进程都是通过cf tunnel对外服务,所以我并不需要修改PDS的默认端口(3000),tunnel支持非80/443端口的代理。
配置tunnel添加两个公共域名:
network.hukoubook.com
*.network.hukoubook.com
(PDS默认的用户标识符)
我是这么部署身份id服务的
使用cf pages功能,自动部署代码仓库中的内容,默认发布在did-on-hukoubook-com.pages.dev
。
使用cf worker功能,将*.hukoubook.com/.well-known/*
的流量路由到worker中,worker转发到did-on-hukoubook-com.pages.dev
网站。
额外添加一条路由规则,禁止将*network.hukoubook.com/.well-known/*
的流量路由到所有worker中。
号外
目前发现bluesky还存在一个显著问题就是cdn在国内被墙了。
图片等多媒体url由app view渲染生成,从职责上讲没什么问题,但既然架构规划PDS是接入点,所有流量通过PDS进出,那么多媒体的流量也应该能被PDS控制,而不仅仅只控制API流量。
我已经在github上创建了沟通issue:atproto#3018 目前还没有官方回复。
总的来讲这不是一个大问题,改起来并不困难,期待解决吧。
另外后期我打算开发一个基于atproto的博客平台,评论系统直接集成bluesky,期待smitechow.com的新生吧😁
(完)