【IPFS + 区块链 系列】 入门篇 - IPFS+IPNS+个人博客搭建
81 | Oct 30, 2017 82 | 83 | 84 | 85 |86 |94 | 95 |孔壹学院:国内区块链职业教育引领品牌。
87 | 88 |作者:黎跃春,孔壹学院创始人,区块链、高可用架构师
89 | 90 |微信:liyc1215
91 | 92 |区块链博客:http://liyuechun.org
93 |
在阅读这篇文章之前,你需要先学习【IPFS + 区块链 系列】 入门篇 - IPFS环境配置这篇文章。
96 | 97 |目录
98 | 99 |-
100 |
- 1. 如何在IPFS新增一个文件
101 |
102 |
-
103 |
- 1.1 新建file.txt文件 104 |
- 1.2 查看ipfs相关命令 105 |
- 1.3 将file.txt添加到ipfs节点 106 |
107 | - 2. 通过ipfs创建目录存储文件 108 |
- 3. 如何在IPFS新增一个目录
109 |
110 |
-
111 |
- 3.1 使用ipfs add -r可以上传一整个目录 112 |
- 3.2 通过路径访问contactme.txt文件数据 113 |
- 3.3 通过Hash查看数据IPFS网络数据 114 |
115 | - 4. 创建简易的网页发布到IPFS
116 |
117 |
-
118 |
- 4.1 创建一个index.html文件 119 |
- 4.2 创建一个style.css文件 120 |
- 4.3 添加到ipfs 121 |
- 4.4 网络同步 122 |
- 4.5 访问网站 123 |
- 4.6 发布到IPNS 124 |
125 | - 5. 发布个人博客
126 |
127 |
-
128 |
- 5.1 搭建静态博客 129 |
- 5.2 节点ID替换 130 |
- 5.3 浏览博客 131 |
132 | - 6. 下篇预报
133 |
134 |
-
135 |
- 6.1
ipfs + ethereum
Dapp
开发入门
136 |
137 | - 6.1
1. 如何在IPFS新增一个文件
140 | 141 |1.1 新建file.txt文件
142 | 143 |打开终端,切换到桌面,新建一个文件夹1121
,切换到1121
中,通过vi
新建一个文件file.txt
,文件里面输入春哥微信号liyc1215
保存并且退出。
localhost:Desktop yuechunli$ pwd
146 | /Users/liyuechun/Desktop
147 | localhost:Desktop yuechunli$ mkdir 1121
148 | localhost:Desktop yuechunli$ cd 1121/
149 | localhost:1121 yuechunli$ vi file.txt
150 | localhost:1121 yuechunli$ cat file.txt
151 | liyc1215
152 | localhost:1121 yuechunli$
153 |
154 |
155 | 1.2 查看ipfs相关命令
156 | 157 |localhost:1121 yuechunli$ ipfs help
158 | USAGE
159 | ipfs - Global p2p merkle-dag filesystem.
160 |
161 | ipfs [--config=<config> | -c] [--debug=<debug> | -D] [--help=<help>] [-h=<h>] [--local=<local> | -L] [--api=<api>] <command> ...
162 |
163 | SUBCOMMANDS
164 | BASIC COMMANDS
165 | init Initialize ipfs local configuration
166 | add <path> Add a file to IPFS
167 | cat <ref> Show IPFS object data
168 | get <ref> Download IPFS objects
169 | ls <ref> List links from an object
170 | refs <ref> List hashes of links from an object
171 |
172 | DATA STRUCTURE COMMANDS
173 | block Interact with raw blocks in the datastore
174 | object Interact with raw dag nodes
175 | files Interact with objects as if they were a unix filesystem
176 | dag Interact with IPLD documents (experimental)
177 |
178 | ADVANCED COMMANDS
179 | daemon Start a long-running daemon process
180 | mount Mount an IPFS read-only mountpoint
181 | resolve Resolve any type of name
182 | name Publish and resolve IPNS names
183 | key Create and list IPNS name keypairs
184 | dns Resolve DNS links
185 | pin Pin objects to local storage
186 | repo Manipulate the IPFS repository
187 | stats Various operational stats
188 | p2p Libp2p stream mounting
189 | filestore Manage the filestore (experimental)
190 |
191 | NETWORK COMMANDS
192 | id Show info about IPFS peers
193 | bootstrap Add or remove bootstrap peers
194 | swarm Manage connections to the p2p network
195 | dht Query the DHT for values or peers
196 | ping Measure the latency of a connection
197 | diag Print diagnostics
198 |
199 | TOOL COMMANDS
200 | config Manage configuration
201 | version Show ipfs version information
202 | update Download and apply go-ipfs updates
203 | commands List all available commands
204 |
205 |
206 | 1.3 将file.txt添加到ipfs节点
207 | 208 |localhost:1121 yuechunli$ ls
209 | file.txt
210 | localhost:1121 yuechunli$ ipfs add file.txt
211 | added QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T file.txt
212 | localhost:1121 yuechunli$ cat file.txt
213 | liyc1215
214 | localhost:1121 yuechunli$ ipfs cat QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
215 | liyc1215
216 | localhost:1121 yuechunli$
217 |
218 |
219 | 当执行完ipfs add file.txt
这个命令以后,会将file.txt
添加到ipfs
当前的节点中,并且会对file.txt
文件生成一个唯一的hash
QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
,如果想查看本地ipfs
节点的数据,可以通过ipfs cat QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
进行查看。
⚠️:当我试图通过http://ipfs.io/ipfs/QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
进行数据访问时,无法访问,如下图所示:
⚠️:虽然数据已经添加到当前的你自己的IPFS
节点中,但是并没有同步到IPFS
网络,所以暂时在网络上无法访问。
⚠️:重要:接下来执行下面的命令同步节点数据到IPFS
网络,再试图在网络上查看数据。
-
230 |
- 同步节点 231 |
新建一个终端,执行ipfs daemon
。
localhost:.ipfs yuechunli$ ipfs daemon
236 | Initializing daemon...
237 | Adjusting current ulimit to 2048...
238 | Successfully raised file descriptor limit to 2048.
239 | Swarm listening on /ip4/111.196.246.151/tcp/3637
240 | Swarm listening on /ip4/127.0.0.1/tcp/4001
241 | Swarm listening on /ip4/169.254.170.167/tcp/4001
242 | Swarm listening on /ip4/192.168.0.107/tcp/4001
243 | Swarm listening on /ip6/::1/tcp/4001
244 | API server listening on /ip4/127.0.0.1/tcp/5001
245 | Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
246 | Daemon is ready
247 |
248 |
249 | -
250 |
- 从
IPFS
网络查看数据
251 |
浏览器访问https://ipfs.io/ipfs/QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
254 | 255 |2. 通过ipfs创建目录存储文件
258 | 259 |在着上面的步骤走,我们可以通过ipfs cat QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
260 | liyc1215
查看添加到ipfs
网络的file.txt
文件的内容,如下:
localhost:1121 yuechunli$ ipfs cat QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
263 | liyc1215
264 | localhost:1121 yuechunli$
265 |
266 |
267 | 当然,我们也可以通过ipfs
的相关命令在ipfs
的根目录下面创建文件夹,并且将file.txt
文件移动或者拷贝到我们创建的文件夹中。
⚠️:cp不会改变文件hash,mv会改变hash寻址。
270 | 271 |localhost:1121 yuechunli$ ipfs cat QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T
272 | liyc1215
273 | localhost:1121 yuechunli$ ipfs files mkdir /LiYueChun
274 | localhost:1121 yuechunli$ ipfs files cp /ipfs/QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T /LiYueChun/file.txt
275 | localhost:1121 yuechunli$ ipfs files ls /
276 | LiYueChun
277 | localhost:1121 yuechunli$ ipfs files ls /LiYueChun/
278 | file.txt
279 | localhost:1121 yuechunli$ ipfs files read /LiYueChun/file.txt
280 | liyc1215
281 | localhost:1121 yuechunli$
282 |
283 |
284 | 3. 如何在IPFS新增一个目录
285 | 286 |3.1 使用ipfs add -r可以上传一整个目录
287 | 288 |localhost:1121 yuechunli$ ipfs add -r ipfs-tutorial/
289 | added QmYx4BnhnLXeMWF5mKu16fJgUBiVP7ECXh7qcsUZnXiRxc ipfs-tutorial/contactme.txt
290 | added QmfKdWsguobA3aDPvSxLB3Bq4HMKyqKSgFr2NFUuVH8n31 ipfs-tutorial/eth-fabric.png
291 | added QmXe8jTxTh5MZP6BK5cnj19mXNTKVMzNyUJZUHuYyr5dk1 ipfs-tutorial/gongzhonghao.png
292 | added QmSsjQDVw1fvmG5RsZMgp2GjihiXn2zDv64mfHZN3AREek ipfs-tutorial
293 |
294 |
295 | 3.2 通过路径访问contactme.txt文件数据
296 | 297 |如果我们上传的是目录,那么可以通过下面几种方式访问到contactme.txt
文件的数据。
localhost:1121 yuechunli$ ipfs cat QmYx4BnhnLXeMWF5mKu16fJgUBiVP7ECXh7qcsUZnXiRxc
300 | 微信:liyc1215
301 | 区块链技术交流群:348924182
302 | 公众号:区块链部落
303 | localhost:1121 yuechunli$ ipfs cat /ipfs/QmYx4BnhnLXeMWF5mKu16fJgUBiVP7ECXh7qcsUZnXiRxc
304 | 微信:liyc1215
305 | 区块链技术交流群:348924182
306 | 公众号:区块链部落
307 | localhost:1121 yuechunli$ ipfs cat /ipfs/QmSsjQDVw1fvmG5RsZMgp2GjihiXn2zDv64mfHZN3AREek/contactme.txt
308 | 微信:liyc1215
309 | 区块链技术交流群:348924182
310 | 公众号:区块链部落
311 | localhost:1121 yuechunli$
312 |
313 |
314 | 3.3 通过Hash查看数据IPFS网络数据
315 | 316 |-
317 |
- 访问目录:https://ipfs.io/ipfs/QmSsjQDVw1fvmG5RsZMgp2GjihiXn2zDv64mfHZN3AREek 318 |
-
323 |
通过目录访问文件:https://ipfs.io/ipfs/QmSsjQDVw1fvmG5RsZMgp2GjihiXn2zDv64mfHZN3AREek/contactme.txt 324 |
325 |
326 | 通过文件hash直接访问:https://ipfs.io/ipfs/QmYx4BnhnLXeMWF5mKu16fJgUBiVP7ECXh7qcsUZnXiRxc
327 |
4. 创建简易的网页发布到IPFS
332 | 333 |在这里我先自己写一个简单的网页给大家演示,先在桌面新建一个site
文件夹,然后按照下面的步骤在site
文件夹中建立index.html
和style.css
文件。
4.1 创建一个index.html文件
336 | 337 |<!DOCTYPE html>
338 | <html lang="en">
339 | <head>
340 | <meta charset="UTF-8">
341 | <title>Hello IPFS!</title>
342 | <link rel="stylesheet" href="./style.css" />
343 | </head>
344 | <body>
345 | <h1>Hello IPFS!</h1>
346 | </body>
347 | </html>
348 |
349 |
350 | 4.2 创建一个style.css文件
351 | 352 |h1 {
353 | color: green;
354 | }
355 |
356 |
357 | 4.3 添加到ipfs
358 | 359 |localhost:Desktop yuechunli$ ipfs add -r site/
360 | added QmWG5rbgT9H77TGq49RXNoqN8M7DNKMnMX425nkmCB6BjS site/index.html
361 | added QmfGLJ3mryLvicQqzdsghq4QRhptKJtBAPe7yDJxsBGSuy site/style.css
362 | added QmdVEGkT5u7LtzzatTrn8JGNEF3fpuMPVs2rPCfvqRykRp site
363 |
364 |
365 | 最后一行是项目根目录的hash
,你先通过ipfs daemon
同步网络,然后可以通过https://ipfs.io/ipfs/<你的项目根目录hash>
,即https://ipfs.io/ipfs/QmdVEGkT5u7LtzzatTrn8JGNEF3fpuMPVs2rPCfvqRykRp
访问项目。
4.4 网络同步
368 | 369 |localhost:Desktop yuechunli$ ipfs daemon
370 |
371 |
372 | 4.5 访问网站
373 | 374 |浏览器打开https://ipfs.io/ipfs/QmdVEGkT5u7LtzzatTrn8JGNEF3fpuMPVs2rPCfvqRykRp,效果图如下:
375 | 376 |4.6 发布到IPNS
379 | 380 |当我们修改网站内容重新添加到ipfs
时,hash
会发生变化,当我们网站更新时,我们可以将网站发布到IPNS,在IPNS中,允许我们节点的域名空间中引用一个IPFS hash
,也就是说我们可以通过节点ID
对项目根目录的IPFS HASH
进行绑定,以后我们访问网站时直接通过节点·ID访问即可,当我们更新博客时,重新发布到
IPNS`即可。
localhost:~ yuechunli$ ipfs name publish QmdVEGkT5u7LtzzatTrn8JGNEF3fpuMPVs2rPCfvqRykRp
383 | Published to QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP: /ipfs/QmdVEGkT5u7LtzzatTrn8JGNEF3fpuMPVs2rPCfvqRykRp
384 | localhost:~ yuechunli$ ipfs id
385 | {
386 | "ID": "QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP"
387 | }
388 |
389 |
390 | 当我们执行ipfs name publish
命令时,会返回我们的节点ID
,你可以通过ipfs id
进行查看验证是否是你的节点ID
。
⚠️:验证
393 | 394 |$ ipfs name resolve <peerId>
395 |
396 |
397 | localhost:~ yuechunli$ ipfs name resolve QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP
398 | /ipfs/QmdVEGkT5u7LtzzatTrn8JGNEF3fpuMPVs2rPCfvqRykRp
399 | localhost:~ yuechunli$
400 |
401 |
402 | ⚠️:当然我们现在就可以通过IPNS
进行访问了。
https://ipfs.io/ipns/QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP
405 |
406 |
407 | ⚠️⚠️⚠️:注意上面是ipns而不是ipfs。
408 | 409 |⚠️:如果你网站数据修改,需要重新发布到IPNS。
412 | 413 |5. 发布个人博客
414 | 415 |你可以通过Hugo
按照官方文档创建一个漂亮的静态博客Hugo官方网站,当然你也可以自己编写,或者使用其他开源项目搭建。
5.1 搭建静态博客
418 | 419 |大家可以自己搭建,也可以直接下载我的博客源码直接搭建。
420 | 421 |源码地址:http://github.com/liyuechun/ipfs_blogger
422 | 423 |5.2 节点ID替换
424 | 425 |-
426 |
- 查看你的节点ID 427 |
localhost:ipfs_pin yuechunli$ ipfs id
430 | {
431 | "ID": "《your peer id》"
432 | }
433 | localhost:ipfs_pin yuechunli$
434 |
435 |
436 | 在上面的源码中全局搜索将源码里面的QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP
替换成你自己的ID
。
接下来重复4. 创建简易的网页发布到IPFS的操作步骤即可。
439 | 440 |5.3 浏览博客
441 | 442 |浏览器打开https://ipfs.io/ipns/QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP/查看项目效果。
443 | 444 |6. 下篇预报
447 | 448 |6.1 ipfs + ethereum
Dapp
开发入门
449 |
450 | 7. 技术交流
451 | 452 |-
453 |
- 区块链技术交流QQ群:
348924182
454 | - 进微信群请加微信:
liyc1215
455 | - 「区块链部落」官方公众号 456 |