# starfire **Repository Path**: dl88250/starfire ## Basic Information - **Project Name**: starfire - **Description**: 🌟 一个分布式的内容分享讨论社区,星星之火可以燎原。 - **Primary Language**: TypeScript - **License**: MIT - **Default Branch**: master - **Homepage**: http://127.0.0.1:8080/ipfs/QmauDX9WwBwVscpyXkHhxDr3AtDTLwHqjQ5MnJNEjWekMw - **GVP Project**: No ## Statistics - **Stars**: 25 - **Forks**: 2 - **Created**: 2019-06-07 - **Last Updated**: 2025-08-29 ## Categories & Tags **Categories**: bbs **Tags**: None ## README ## 星火 ### 简介 > 星星之火可以燎原 星火是一个分布式的内容分享讨论社区,通过点对点超媒体协议让社区更快、更安全也更开放。 ### 动机 1. 在中心化的服务下,你的数据并不属于你,服务终止或者账号被封意味着你将失去你的数据 2. 中心化服务会通过你的数据进行盈利,但并未从盈利中拿出透明公平的收益回报给你 星火的诞生主要解决第一个问题,即你的数据永远属于你。第二个问题星火会逐步尝试探索。一些细节和感想请浏览[写在星火初版发布之际](https://hacpai.com/article/1559578726531)。 ### 功能 * 发布帖子、发布回帖 * 固定的个人主页地址 * 无缝嵌入 IPFS 数据 星火可以用于记录你生活的点点滴滴、和其他志同道合的人开展讨论或者推广你的产品等,可以把星火当做个人博客、社区论坛、自媒体平台来使用,并且所有数据都是永久性的。 ### 截图 **首页列表** ![首页列表](https://user-images.githubusercontent.com/873584/58921827-fb112a00-876a-11e9-9f13-a74e133a14ba.png) **帖子详情** ![帖子详情](https://user-images.githubusercontent.com/873584/58921826-fb112a00-876a-11e9-873f-ddf76370199c.png) **个人主页** ![个人主页](https://user-images.githubusercontent.com/873584/58921828-fba9c080-876a-11e9-9c81-7500188ffb89.png) **个人设置** ![个人设置](https://user-images.githubusercontent.com/873584/58921901-47f50080-876b-11e9-9eda-cb77d006701c.png) ### 技术 [IPFS](https://ipfs.io) 为星火的实现提供了基础: * 通过 File 实现帖子、评论内容的存取 * 通过 DAG 实现元数据的存取 * 通过 PubSub 实现节点间的准实时交互 * 通过 IPNS 实现用户个人主页寻址和更新 ### 管理 在目前的技术条件下,仍然存在一个无法实现的中心化“节点”,即星火管理员,因为有一些事情需要特定的人来做: 1. 确认代码和版本并进行发布 2. 确认恶意节点并更新黑名单 这两项操作我们会通过管理员(`QmfQUfpYh2J2jaihvfwsR6ACQnf3iQ551N1dNMfcNTmyjr`)进行。所有管理运维操作都是公开透明的,不存在任何“暗箱操作”,用户可以对我们的管理运维操作进行监督。 ### FAQ #### IPFS 是什么? 请看 [IPFS 入门笔记](https://hacpai.com/article/1511015097370)。星火基于 IPFS 技术栈实现,用户可直接使用 IPFS 已有功能和数据。 #### 我的数据存放在哪里? 你的数据在本地磁盘上会存有一份,如果有其他人看过,则在他的节点上会缓存一份;如果有其他人收藏(`ipfs pin`)过,则在他的节点上也会保存一份。 本地磁盘数据路径目录路径默认在 `~/.ipfs/`(可通过环境变量 `IPFS_PATH` 指定该目录路径)。 #### 如何备份数据? 需要完整备份 .ipfs 目录,里面包含了所有数据、账号和相关配置。 #### 忘记密钥怎么办? .ipfs/config 文件中的 `PrivKey` 项保存了你的密钥对,登录和发布内容时需要填写该项。一定要妥善保管密钥对,不要泄露给任何第三方。如果不慎遗失该密钥对,则你的账号将永远丢失,无法恢复。 #### 会停服吗? 从技术上讲,只要 IPFS 网络能够运行,星火就不会也不可能停服。这意味着: * 你发布的内容将会得到永久存储 * 星火的代码永远不会消失 #### 匿名程度如何? 虽然星火不需要实名制使用,但你节点所在 IP 是可以被其他人获取到的,而 IP 使用记录在运营商那里是有记录的,所以从技术上而言,其他人是有办法可以查到你实名身份的。 #### 存在封禁机制吗? 我们是通过一个全局的黑名单来进行节点的屏蔽。如果发现存在恶意节点,我们会将其列入黑名单中并进行广播,网络中的节点收到黑名单后会和其中所列出的恶意节点进行断开。这样恶意节点就会变成孤岛节点,防止其对网络的进一步干扰破坏。 #### 使用到区块链吗? 没有使用,星火是完全基于 IPFS 实现的。另外,星火目前也没有使用到 IPFS 激励层 Filecoin。 #### 开源吗? https://github.com/b3log/starfire #### 由谁开发,如何实现盈利? 星火由 B3log 开源社区进行开发和维护。目前我们没有盈利计划,因为除了很少的开发工作量和引导节点架设外,我们并没有付出其他成本。将来如果有机会,我们会和大家一起探索`动机`部分提到的问题二。 --- ## 安装 1. 下载并安装 IPFS,配置引导节点 ```shell ipfs bootstrap rm --all ipfs bootstrap add /ip4/47.111.58.76/tcp/4001/ipfs/QmZdWDS3qLbH55knn4hGjH2oq5hGwJz8sUHHz273xzX2rc ``` 🐋 ```shell 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 ``` 2. 新建星火私网密钥文件(内容如下或者[点此](https://github.com/b3log/starfire/files/3319136/swarm.zip)下载),保存路径是 $IPFS_PATH/swarm.key(默认 ~/.ipfs/swarm.key) ```txt /key/swarm/psk/1.0.0/ /base16/ 9c28a3503c28d29bf0085de558cd4326ee08dba738588044e1ccaf6730413d89 ``` 3. 启动 IPFS ```shell ipfs daemon --enable-pubsub-experiment ``` 🐋 ```shell 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 ``` 4. 允许接口跨域 * Windows: ```shell ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin [\"*\"] ``` * Linux/Mac: ```shell ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]' ``` 🐋 ```shell docker exec ipfs_host ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]' ``` 5. 打开浏览器访问 http://127.0.0.1:8080/ipfs/QmauDX9WwBwVscpyXkHhxDr3AtDTLwHqjQ5MnJNEjWekMw 6. 通过密钥对发帖回帖,密钥对是 ~/.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 ``` ### TODO * hotkey * upload file * update avatar ### PubSub Topic * starfire ### File Paths * /starfire/index * /starfire/users/id * /starfire/posts/id * /starfire/blacklist * /starfire/version ### Theme https://material.io/tools/color/#!/?view.left=0&view.right=1&primary.color=24282d&secondary.color=d93025