IPFS+IPNS搭建简单网页及更新内容

1. 如何在IPFS新增一个文件

1.1 新建file.txt文件

打开终端,切换到桌面,新建一个文件夹test,切换到test中,通过vi新建一个文件file.txt,文件里面随便输入yuyangray保存并且退出。

yuyangdeMacBook-Pro:~ yuyang$ cd /Users/yuyang/Desktop
yuyangdeMacBook-Pro:Desktop yuyang$ mkdir test
yuyangdeMacBook-Pro:Desktop yuyang$ cd test
yuyangdeMacBook-Pro:test yuyang$ vi file.txt

1.2 查看ipfs相关命令

yuyangdeMacBook-Pro:test yuyang$ 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> ...

SUBCOMMANDS
  BASIC COMMANDS
    init          Initialize ipfs local configuration
    add <path>    Add a file to IPFS
    cat <ref>     Show IPFS object data
    get <ref>     Download IPFS objects
    ls <ref>      List links from an object
    refs <ref>    List hashes of links from an object
  
  DATA STRUCTURE COMMANDS
    block         Interact with raw blocks in the datastore
    object        Interact with raw dag nodes
    files         Interact with objects as if they were a unix filesystem
    dag           Interact with IPLD documents (experimental)
  
  ADVANCED COMMANDS
    daemon        Start a long-running daemon process
    mount         Mount an IPFS read-only mountpoint
    resolve       Resolve any type of name
    name          Publish and resolve IPNS names
    key           Create and list IPNS name keypairs
    dns           Resolve DNS links
    pin           Pin objects to local storage
    repo          Manipulate the IPFS repository
    stats         Various operational stats
    p2p           Libp2p stream mounting
    filestore     Manage the filestore (experimental)
  
  NETWORK COMMANDS
    id            Show info about IPFS peers
    bootstrap     Add or remove bootstrap peers
    swarm         Manage connections to the p2p network
    dht           Query the DHT for values or peers
    ping          Measure the latency of a connection
    diag          Print diagnostics
  
  TOOL COMMANDS
    config        Manage configuration
    version       Show ipfs version information
    update        Download and apply go-ipfs updates
    commands      List all available commands
  
  Use 'ipfs <command> --help' to learn more about each command.
  
  ipfs uses a repository in the local file system. By default, the repo is
  located at ~/.ipfs. To change the repo location, set the $IPFS_PATH
  environment variable:
  
    export IPFS_PATH=/path/to/ipfsrepo
  
  EXIT STATUS
  
  The CLI will exit with one of the following values:
  
  0     Successful execution.
  1     Failed executions.

1.3 将file.txt添加到ipfs节点

yuyangdeMacBook-Pro:test yuyang$ ls
file.txt
yuyangdeMacBook-Pro:test yuyang$ ipfs add file.txt 
added QmWGCG977fHt4Cgf8HxnbX52wB2GGW2T5yqLMiVETvTdEB file.txt
yuyangdeMacBook-Pro:test yuyang$ cat file.txt
yuyangray
yuyangdeMacBook-Pro:test yuyang$ ipfs cat QmWGCG977fHt4Cgf8HxnbX52wB2GGW2T5yqLMiVETvTdEB
yuyangray

当执行完ipfs add file.txt这个命令以后,会将file.txt添加到ipfs当前的节点中,并且会对file.txt文件生成一个唯一的hashQmWGCG977fHt4Cgf8HxnbX52wB2GGW2T5yqLMiVETvTdEB,如果想查看本地ipfs节点的数据,可以通过ipfs cat QmWGCG977fHt4Cgf8HxnbX52wB2GGW2T5yqLMiVETvTdEB进行查看。

  • 当我试图通过http://ipfs.io/ipfs/QmWGCG977fHt4Cgf8HxnbX52wB2GGW2T5yqLMiVETvTdEB进行数据访问时,却无法访问。

  • 虽然数据已经添加到当前的你自己的IPFS节点中,但是并没有同步到IPFS网络,所以暂时在网络上无法访问。

  • 接下来执行下面的命令同步节点数据到IPFS网络,再试图在网络上查看数据。

新建一个终端,执行ipfs daemon

yuyangdeMacBook-Pro:~ yuyang$ ipfs daemon
Initializing daemon...
Successfully raised file descriptor limit to 2048.
Swarm listening on /ip4/10.1.0.73/tcp/4001
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip4/192.168.0.4/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
Swarm listening on /p2p-circuit/ipfs/QmVhF9zg4qcrVTw8jkkCGvTJGXJjvwX6CvRuxzUErEyx97
Swarm announcing /ip4/10.1.0.73/tcp/4001
Swarm announcing /ip4/127.0.0.1/tcp/4001
Swarm announcing /ip4/192.168.0.4/tcp/4001
Swarm announcing /ip6/::1/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

IPFS网络查看数据

浏览器访问https://ipfs.io/ipfs/QmWGCG977fHt4Cgf8HxnbX52wB2GGW2T5yqLMiVETvTdEB

2. 通过ipfs创建目录存储文件

我们也可以通过ipfs的相关命令在ipfs的根目录下面创建文件夹,并且将file.txt文件移动或者拷贝到我们创建的文件夹中。

  • cp不会改变文件hash,mv会改变hash寻址。

创建文件夹

yuyangdeMacBook-Pro:test yuyang$ ipfs files mkdir /yuyang

拷贝文件

yuyangdeMacBook-Pro:test yuyang$ ipfs files cp /ipfs/QmWGCG977fHt4Cgf8HxnbX52wB2GGW2T5yqLMiVETvTdEB /yuyang/file.txt

查看文件目录

yuyangdeMacBook-Pro:test yuyang$ ipfs files ls /
yuyang
yuyangdeMacBook-Pro:test yuyang$ ipfs files ls /yuyang/
file.txt

读取内容

yuyangdeMacBook-Pro:test yuyang$ ipfs files read /yuyang/file.txt
yuyangray

3. 如何在IPFS新增一个目录

3.1 使用ipfs add -r可以上传一整个目录

在桌面新建文件夹ipfs_yuyang,其中有一个txt文件contactme.txt和一张图片ripndip.png

yuyangdeMacBook-Pro:test yuyang$ cd /Users/yuyang/Desktop
yuyangdeMacBook-Pro:Desktop yuyang$ ipfs add -r ipfs_yuyang/
added QmP3HhazUp27KRG4i5eHPkGNW6AMHEARQ1MafMjWykavLN ipfs_yuyang/contactme.txt
added QmSLnchQXh9gJrDKvQ5UFLZAj5f7icb2yWsWmcUKUYY3gj ipfs_yuyang/ripndip.png
added QmcKhzuT2rBMSNfYa1tSQv7sQzdYSQ4XRisy5f9oD9387s ipfs_yuyang

3.2 通过路径访问contactme.txt文件数据

如果我们上传的是目录,那么可以通过下面几种方式访问到contactme.txt文件的数据。

yuyangdeMacBook-Pro:Desktop yuyang$ ipfs cat QmP3HhazUp27KRG4i5eHPkGNW6AMHEARQ1MafMjWykavLN
contact yuyang
yuyangdeMacBook-Pro:Desktop yuyang$ ipfs cat /ipfs/QmP3HhazUp27KRG4i5eHPkGNW6AMHEARQ1MafMjWykavLN
contact yuyang
yuyangdeMacBook-Pro:Desktop yuyang$ ipfs cat /ipfs/QmcKhzuT2rBMSNfYa1tSQv7sQzdYSQ4XRisy5f9oD9387s/contactme.txt
contact yuyang

3.3 通过Hash查看数据IPFS网络数据

4. 创建简易的网页发布到IPFS

在这里我先自己写一个简单的网页给大家演示,先在桌面新建一个site文件夹,然后按照下面的步骤在site文件夹中建立index.htmlstyle.css文件。

4.1 创建一个index.html文件

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Hello IPFS!</title>
  <link rel="stylesheet" href="./style.css" />
</head>
<body>
  <h1>Hello IPFS!</h1>
</body>
</html>

4.2 创建一个style.css文件

h1 {
  color: green;
}

4.3 添加到ipfs

yuyangdeMacBook-Pro:Desktop yuyang$ ipfs add -r site/
added QmS4a85WLxie6Zy6Tntg6CccyGHyV4823Vo1vkjGBYhetP site/index.html
added QmZL2UBTwnhcLv66fARL9UV8W8a9ZA4iwTLcaUCsB1u1yW site/style.css
added QmPAygbESghBjPbLhGJAda5rA9GCBMHMGfgwLoB61DfnxX site

最后一行是项目根目录的hash,你先通过ipfs daemon同步网络,然后可以通过https://ipfs.io/ipfs/<你的项目根目录hash>,即https://ipfs.io/ipfs/QmPAygbESghBjPbLhGJAda5rA9GCBMHMGfgwLoB61DfnxX访问项目。

4.4 访问网站

浏览器打开https://ipfs.io/ipfs/QmPAygbESghBjPbLhGJAda5rA9GCBMHMGfgwLoB61DfnxX,效果图如下:

4.5 发布到IPNS

当我们修改网站内容重新添加到ipfs时,hash会发生变化,当我们网站更新时,我们可以将网站发布到IPNS,在IPNS中,允许我们节点的域名空间中引用一个IPFS hash,也就是说我们可以通过节点ID对项目根目录的IPFS HASH进行绑定,以后我们访问网站时直接通过节点·ID访问即可,当我们更新网站时,重新发布到IPNS即可。

yuyangdeMacBook-Pro:Desktop yuyang$ ipfs name publish QmPAygbESghBjPbLhGJAda5rA9GCBMHMGfgwLoB61DfnxX
Published to QmVhF9zg4qcrVTw8jkkCGvTJGXJjvwX6CvRuxzUErEyx97: /ipfs/QmPAygbESghBjPbLhGJAda5rA9GCBMHMGfgwLoB61DfnxX

当我们执行ipfs name publish命令时,会返回我们的节点ID,你可以通过ipfs id进行查看验证是否是你的节点ID

验证id:

yuyangdeMacBook-Pro:Desktop yuyang$ ipfs id
{
    "ID": "QmVhF9zg4qcrVTw8jkkCGvTJGXJjvwX6CvRuxzUErEyx97",
    "PublicKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6fMRFRKKg7rn7fJVVENsmSp/qftAV0FApEEFi0LNJOW9oYENCNykCc6Vpwg0/9oXjfkywAJqENgEycUV1ZdK75Ef9NJlY5vy62e2aitF83ock89zAeXXLU4GhXifW/foT5DsHHSe0rseBmybZDHjAOJtfhaN4K4yusw23wzvt9Fg8S3qNszEaImYtWUlS08piiR0tWdz+24I/oWiSnWB855KVCdLnYnwy6M3OLgeuJvXB2XGwnbtj4Q1jvp9rf/KGjHtb0KB9DwfowZ/ypvrDUNakbjNGYfn3I+AvRl1Qz4++o57VtbRmZYThygWnz9vTjqj0NDX2ftYh6MrZkSg5AgMBAAE=",
    "Addresses": [
        "/ip4/127.0.0.1/tcp/4001/ipfs/QmVhF9zg4qcrVTw8jkkCGvTJGXJjvwX6CvRuxzUErEyx97",
        "/ip4/192.168.0.4/tcp/4001/ipfs/QmVhF9zg4qcrVTw8jkkCGvTJGXJjvwX6CvRuxzUErEyx97",
        "/ip4/169.254.187.113/tcp/4001/ipfs/QmVhF9zg4qcrVTw8jkkCGvTJGXJjvwX6CvRuxzUErEyx97",
        "/ip6/::1/tcp/4001/ipfs/QmVhF9zg4qcrVTw8jkkCGvTJGXJjvwX6CvRuxzUErEyx97",
        "/ip4/182.139.92.248/tcp/32065/ipfs/QmVhF9zg4qcrVTw8jkkCGvTJGXJjvwX6CvRuxzUErEyx97"
    ],
    "AgentVersion": "go-ipfs/0.4.14/",
    "ProtocolVersion": "ipfs/0.1.0"
}

验证id绑定的网站hash:

ipfs name resolve <peerId>
yuyangdeMacBook-Pro:Desktop yuyang$ ipfs name resolve QmVhF9zg4qcrVTw8jkkCGvTJGXJjvwX6CvRuxzUErEyx97
/ipfs/QmPAygbESghBjPbLhGJAda5rA9GCBMHMGfgwLoB61DfnxX

我们现在就可以根据节点id,通过IPNS进行访问了:
https://ipfs.io/ipns/QmVhF9zg4qcrVTw8jkkCGvTJGXJjvwX6CvRuxzUErEyx97

注意上面是ipns而不是ipfs。

4.6 修改网站内容,重新发布到IPNS

现在去style.css中修改字体颜色:

h1 {
  color: red;
}

重新添加site文件夹到ipfs:

yuyangdeMacBook-Pro:Desktop yuyang$ ipfs add -r site/
added QmS4a85WLxie6Zy6Tntg6CccyGHyV4823Vo1vkjGBYhetP site/index.html
added QmUTwP64HnrQp3GJuVeuvwaQ79rxa8waQL5yj3qkCswqvk site/style.css
added QmWhEUU1ksDShPTqhPEEXohfnhBvpwaCHtxhnbf3Fi1piH site

可以看到除了index.html文件的hash值没变外,style.csssite文件夹的hash值都不是之前的hash值了。

浏览器打开https://ipfs.io/ipfs/QmWhEUU1ksDShPTqhPEEXohfnhBvpwaCHtxhnbf3Fi1piH,效果图如下:

重新发布到IPNS:

yuyangdeMacBook-Pro:Desktop yuyang$ ipfs name publish QmWhEUU1ksDShPTqhPEEXohfnhBvpwaCHtxhnbf3Fi1piH
Published to QmVhF9zg4qcrVTw8jkkCGvTJGXJjvwX6CvRuxzUErEyx97: /ipfs/QmWhEUU1ksDShPTqhPEEXohfnhBvpwaCHtxhnbf3Fi1piH

再次根据节点id,通过IPNS进行访问:
https://ipfs.io/ipns/QmVhF9zg4qcrVTw8jkkCGvTJGXJjvwX6CvRuxzUErEyx97

可以看到,由于网站的内容发生了变化,对应的hash值也发生了变化,这会导致其他人通过旧的网站hash值,访问不到更新后的网站。而使用IPNS,将每次更新后的网站hash值绑定到我们的节点id,他人只需要记住你的节点id,通过IPNS,就可以一直访问最新的网站内容。

参考:【IPFS + 区块链 系列】 入门篇 - IPFS+IPNS+个人博客搭建
作者:黎跃春

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容