星星之火可以燎原
星火是一个分布式的内容分享讨论社区,通过点对点超媒体协议让社区更快、更安全也更开放。
- 在中心化的服务下,你的数据并不属于你,服务终止或者账号被封意味着你将失去你的数据
- 中心化服务会通过你的数据进行盈利,但并未从盈利中拿出透明公平的收益回报给你
星火的诞生主要解决第一个问题,即你的数据永远属于你。第二个问题星火会逐步尝试探索。一些细节和感想请浏览写在星火初版发布之际。
- 发布帖子、发布回帖
- 固定的个人主页地址
- 无缝嵌入 IPFS 数据
星火可以用于记录你生活的点点滴滴、和其他志同道合的人开展讨论或者推广你的产品等,可以把星火当做个人博客、社区论坛、自媒体平台来使用,并且所有数据都是永久性的。
首页列表
帖子详情
个人主页
个人设置
IPFS 为星火的实现提供了基础:
- 通过 File 实现帖子、评论内容的存取
- 通过 DAG 实现元数据的存取
- 通过 PubSub 实现节点间的准实时交互
- 通过 IPNS 实现用户个人主页寻址和更新
在目前的技术条件下,仍然存在一个无法实现的中心化“节点”,即星火管理员,因为有一些事情需要特定的人来做:
- 确认代码和版本并进行发布
- 确认恶意节点并更新黑名单
这两项操作我们会通过管理员(QmfQUfpYh2J2jaihvfwsR6ACQnf3iQ551N1dNMfcNTmyjr
)进行。所有管理运维操作都是公开透明的,不存在任何“暗箱操作”,用户可以对我们的管理运维操作进行监督。
请看 IPFS 入门笔记。星火基于 IPFS 技术栈实现,用户可直接使用 IPFS 已有功能和数据。
你的数据在本地磁盘上会存有一份,如果有其他人看过,则在他的节点上会缓存一份;如果有其他人收藏(ipfs pin
)过,则在他的节点上也会保存一份。
本地磁盘数据路径目录路径默认在 ~/.ipfs/
(可通过环境变量 IPFS_PATH
指定该目录路径)。
需要完整备份 .ipfs 目录,里面包含了所有数据、账号和相关配置。
.ipfs/config 文件中的 PrivKey
项保存了你的密钥对,登录和发布内容时需要填写该项。一定要妥善保管密钥对,不要泄露给任何第三方。如果不慎遗失该密钥对,则你的账号将永远丢失,无法恢复。
从技术上讲,只要 IPFS 网络能够运行,星火就不会也不可能停服。这意味着:
- 你发布的内容将会得到永久存储
- 星火的代码永远不会消失
虽然星火不需要实名制使用,但你节点所在 IP 是可以被其他人获取到的,而 IP 使用记录在运营商那里是有记录的,所以从技术上而言,其他人是有办法可以查到你实名身份的。
我们是通过一个全局的黑名单来进行节点的屏蔽。如果发现存在恶意节点,我们会将其列入黑名单中并进行广播,网络中的节点收到黑名单后会和其中所列出的恶意节点进行断开。这样恶意节点就会变成孤岛节点,防止其对网络的进一步干扰破坏。
没有使用,星火是完全基于 IPFS 实现的。另外,星火目前也没有使用到 IPFS 激励层 Filecoin。
https://github.com/b3log/starfire
星火由 B3log 开源社区进行开发和维护。目前我们没有盈利计划,因为除了很少的开发工作量和引导节点架设外,我们并没有付出其他成本。将来如果有机会,我们会和大家一起探索动机
部分提到的问题二。
- 下载并安装 IPFS,配置引导节点
🐋
ipfs bootstrap rm --all ipfs bootstrap add /ip4/47.111.58.76/tcp/4001/ipfs/QmZdWDS3qLbH55knn4hGjH2oq5hGwJz8sUHHz273xzX2rc
docker pull ipfs/go-ipfs docker exec ipfs_host ipfs bootstrap rm --all docker exec ipfs_host ipfs bootstrap add /ip4/47.111.58.76/tcp/4001/ipfs/QmZdWDS3qLbH55knn4hGjH2oq5hGwJz8sUHHz273xzX2rc
- 新建星火私网密钥文件(内容如下或者点此下载),保存路径是 $IPFS_PATH/swarm.key(默认 ~/.ipfs/swarm.key)
/key/swarm/psk/1.0.0/ /base16/ 9c28a3503c28d29bf0085de558cd4326ee08dba738588044e1ccaf6730413d89
- 启动 IPFS
🐋
ipfs daemon --enable-pubsub-experiment
docker run -d --rm --name ipfs_host -v /root/.ipfs:/data/ipfs -p 4001:4001 -p :8080:8080 -p :5001:5001 ipfs/go-ipfs daemon --migrate=true --enable-pubsub-experiment
- 允许接口跨域
- Windows:
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin [\"*\"]
- Linux/Mac:
🐋
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
docker exec ipfs_host ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
- Windows:
- 打开浏览器访问 http://127.0.0.1:8080/ipfs/QmauDX9WwBwVscpyXkHhxDr3AtDTLwHqjQ5MnJNEjWekMw
- 通过密钥对发帖回帖,密钥对是 ~/.ipfs/config 中的
PrivKey
项
- 更新 config.ts 中的
env
项值development
为product
- 打包并发布
npm run build ipfs add -r dist
- 通过 starfire-moderator 更新版本
ipfs daemon --enable-pubsub-experiment
npm run start
npm run scss
- hotkey
- upload file
- update avatar
- starfire
- /starfire/index
- /starfire/users/id
- /starfire/posts/id
- /starfire/blacklist
- /starfire/version