180314|基于IPFS搭建去中心化博客


IPFS(InterPlanetary File System)是一个点对点的分布式超媒体分发协议,它整合了过去几年最好的分布式系统思路,为所有人提供全球统一的可寻址空间,包括Git、自证明文件系统SFS、BitTorrent和DHT,同时也被认为是最有可能取代HTTP的新一代互联网协议。

IPFS用基于内容的寻址替代传统的基于域名的寻址,用户不需要关心服务器的位置,不用考虑文件存储的名字和路径。我们将一个文件放到IPFS节点中,将会得到基于其内容计算出的唯一加密哈希值。哈希值直接反映文件的内容,哪怕只修改1比特,哈希值也会完全不同。当IPFS被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据。

IPFS是通用目的的基础架构,基本没有存储上的限制。大文件会被切分成小的分块,下载的时候可以从多个服务器同时获取。IPFS的网络是不固定的、细粒度的、分布式的网络,可以很好的适应内容分发网络的要求。这样的设计可以很好的共享各类数据,包括图像、视频流、分布式数据库、整个操作系统、模块链、8英寸软盘的备份,还有静态网站。

环境配置

下载ipfs安装包

Mac: go-ipfs_v0.4.13_darwin-amd64.tar.gz
Linux: linux-amd64.tar.gz / linux-386.tar.gz
Window: go-ipfs_v0.4.13_windows-amd64.zip

其他平台,请从https://dist.ipfs.io/#go-ipfs进行下载

安装

解压文件

> tar -xvf go-ipfs_v0.4.13_darwin-amd64.tar.gz
>  cd go-ipfs
>  ./install.sh

验证安装

> ipfs help
USAGE
  ipfs - Global p2p merkle-dag filesystem.

  ipfs [--config=<config> | -c] [--debug=<debug> | -D] [--help=<help>] [-h=<h>] [--local=<local> | -L] [--api=<api>] <command> ...

显示以上代码, 则表明安装成功

操作步骤

启动运行结点

初始化节点

> ipfs init
initializing IPFS node at /Users/nolan/.ipfs
generating 2048-bit RSA keypair...done
peer identity: QmZRPgCwgXceaGbSM6fbfwZb4qcBVUzZ4CuGnCo6xmxxqg
to get started, enter:

    ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

启动服务

> ipfs daemon&
Initializing daemon...
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip4/192.168.10.120/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
Swarm listening on /ip6/fd71:89d0:d88a:7dc:ce2:b56a:117d:a99c/tcp/4001
Swarm listening on /p2p-circuit/ipfs/QmZRPgCwgXceaGbSM6fbfwZb4qcBVUzZ4CuGnCo6xmxxqg
Swarm announcing /ip4/127.0.0.1/tcp/4001
Swarm announcing /ip4/192.168.10.120/tcp/4001
Swarm announcing /ip6/::1/tcp/4001
Swarm announcing /ip6/fd71:89d0:d88a:7dc:ce2:b56a:117d:a99c/tcp/4001
API server listening on /ip4/127.0.0.1/tcp/5001
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready

验证服务

浏览器中输入http://localhost:5001/webui

如正常显示以上界面,则表明服务启动成功。

文件上传

上传文本/图片

> ipfs add 120670.jpg
added QmPw6AAqF2PKqk13qQUy84PWK2MefC5dKhmxh3zG5DSbk8 120670.jpg 

文件访问

命令访问

> ipfs cat QmPw6AAqF2PKqk13qQUy84PWK2MefC5dKhmxh3zG5DSbk8

或者

> ipfs cat QmPw6AAqF2PKqk13qQUy84PWK2MefC5dKhmxh3zG5DSbk8 > show.jpg

浏览器访问

以上两种方式均可正常访问图片,不过进行访问时可能会慢一些,因为需要本地节点与远程结点需要进行数据同步。

案例: 快速搭建基于ipfs的去中心化博客

新建博客页面

1. 创建站点目录

> mkdir mysite && cd "$_"

2. 创建并编辑博客页面

> touch index.html
> vim index.html

在index.html页面加以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>30分钟带你玩转IPFS(星际存储)</title>
<style>
h1 {
text-align:center;
}
</style>
</head>
<body>
<h1>欢迎访问数字世界</h1>
</body>
</html>

发布页面至ipfs

> ipfs add -r mysite
added QmZ4q1WXMCo1CcQHScXP7wVDWcwqs2u7fqvn4b98Y5j2tv mysite/index.html
added QmQrbGivgddu5PV3eHGS1Z7AQW7rJaNL1DBzqgthPyMqTL mysite

绑定站空间

> ipfs name publish /ipfs/QmQrbGivgddu5PV3eHGS1Z7AQW7rJaNL1DBzqgthPyMqTL
Published to QmZRPgCwgXceaGbSM6fbfwZb4qcBVUzZ4CuGnCo6xmxxqg: /ipfs/QmQrbGivgddu5PV3eHGS1Z7AQW7rJaNL1DBzqgthPyMqTL

当博客内容发生变化时,需执行以下命令进行同步 :

> ipfs add -r mysite
> ipfs name publish /ipfs/站目录文件hash值

在线访问


官网: ipfs.io
官方文档: https://ipfs.io/docs/
代码示例: https://ipfs.io/docs/examples/
命令手册: https://ipfs.io/docs/commands/

“思考长远,耐心验证,小心总结提炼”, 方为曲线向上人生。

多谢各位捧场!~