IPFS實踐之初體驗


更多我的博客請關注:https://kekbin.com/

概述

IPFS的全稱是InterPlanetary File System(星際文件系統),從名稱上看,這是一個很炫酷、很有野心的項目。簡單地說它就是一個點對點的分布式文件系統。官網github都可以找到所有的相關資料。建議從它的白皮書,和直譯中文版本開始了解,后面我們會慢慢地認識它。白皮書上指出了多個應用場景:

  1. As a mounted global filesystem, under /ipfs and /ipns.
  2. As a mounted personal sync folder that automatically
    versions, publishes, and backs up any writes.
  3. As an encrypted file or data sharing system.
  4. As a versioned package manager for all software.
  5. As the root filesystem of a Virtual Machine.
  6. As the boot filesystem of a VM (under a hypervisor).
  7. As a database: applications can write directly to the
    Merkle DAG data model and get all the versioning,
    caching, and distribution IPFS provides.
  8. As a linked (and encrypted) communications platform.
  9. As an integrity checked CDN for large files (without
    SSL).
  10. As an encrypted CDN.
  11. On webpages, as a web CDN.
  12. As a new Permanent Web where links do not die.

體驗

我想從第一個應用場景開始,開啟我們的應用旅程。

這個場景可以把它想象成一個特別的"雲盤",這個"雲盤"不依賴任何雲存儲商,不依賴任何平台賬號,不用擔心雲盤提供商的內容審核,不用擔心個人隱私的泄密,不用擔心內容丟失或被篡改。這些特性希望通過后面的介紹,大家能夠自己體會到。可以先試想下,平常我們使用雲盤的幾個基本需求:

  • 上傳文件
  • 下載文件
  • 分享文件

下面我們看IPFS如何作為一個“雲盤”,來滿足這些基本需求的。參考官方的get-start.

下載Daemon

首先下載官方提供了IPFS的Demo,比較完整的版本是Go實現的,目前最新版本是0.4.15,包含多個平台的版本,以windows 64bit系統為例,下載go-ipfs_v0.4.15_windows-amd64\go-ipfs,由於網絡限制,可能有些同學無法下載,我這邊上傳了一個到IPFS網絡上,有需要的同學可以直接下載

這個demo中提供了Node/Cli/Http api/Http Gateway/Library/webUi功能,本文中暫使用CLI的來體驗IPFS的基本功能,為了方便在cmd直接執行IPFS命令,可以將Go-ipfs加入環境變量path中。

初始化

> ipfs init

執行初始化之后,user路徑下會多了一個.ipfs的文件夾,其中有一個config文件,記錄的是IPFS的配置,配置內容后續的講述中會慢慢涉及,此刻我們先了解的是IPFS節點的身份標識Identity,其中peerid,是本機IPFS的地址,下文中IPNS的使用中會涉及到peerid。當然,peerid可以通過命令行直接查看:

> ipfs id

啟動Deamon

執行

> ipfs daemon

開啟deamon之后,會啟動demo中包含的IPFS服務,至此,本機就可以作為一個"個人雲盤"來使用了。

上傳文件

> ipfs add <filePath> //添加文件
> ipfs add -r <dirPath> //添加文件

文件添加時,大文件會按照256KB的大小去分塊,分塊內容存儲在.ipfs repo下的blocks文件夾下,每一個塊都對應一個hash。文件添加完成之后,會返回一個文件hash,文件夾是遞歸添加的,會將每一個文件的hash返回,最后一個返回文件夾hash。由於IPFS中,文件都是基於內容尋址的,用戶不需要關心這些文件放在哪,這些hash就是用來查找和得到文件的索引。

下載文件

想要拿到一個IPFS上的文件,只需要知道文件的hash即可。
下載命令:

> ipfs get <hash> -o <output_path>

或者查看命令:

> ipfs cat <hash>

IPFS 的所有文件都是在本地的,Pin add可以將遠端節點的文件長期保留在本地,不被垃圾回收。通過 add 添加的文件默認就是pin過的。

pin還有一個作用,pin add之后,這個節點就可以同add這個文件的節點一樣,作為整個文件的服務節點。其他節點在get或pin add的時候理論上可以從這2個節點的任何一個節點拿去這個文件的塊。當有很多個節點都pin add這個文件時,就會增加這個文件的獲取速度,也降低了文件被刪除的可能。

> ipfs pin add <hash>
> ipfs pin ls //查看哪些文件在本地是持久化的。

分享文件

現實中,用戶習慣獲取內容的方式都通過http的方式,讓用戶去敲get命令去或取文件恐怕只有極客們會嘗試吧。回想一下,雲盤分享文件的做法,生成一個http url,把鏈接分享給需要的人。

IPFS demo也提供了一個http gateway,官方(公網)用的是 http://ipfs.io ,所以分享的鏈接可以是:

http://ipfs.io/ipfs/<file hash>

由於某些已知原因,ipfs.io這個網關在國內是沒法正常使用的,因此有條件的可以在自己的服務器上部署一個IPFS gateway(Ipfs 私網),這樣,分享的鏈接可以是

http://<gateway_host>/ipfs/<file hash>

IPNS

到現在,我們分享文件還是不斷地發送一個個hash組成的url,每分享一個文件就會重新生成一個url,那么可以有一固定的"網址”給我們來看你的分享呢?當然可以。這就需要借助IPNS。具體做法是

> ipfs name publish <file_hash>

這條命令相當於把文件的hash和IPFS的節點綁定,這樣就可以通過一個不變的地址來訪問publish的文件

http://<gateway>/ipns/<peerid>

peerid即之前介紹的本節點的唯一標識。
這樣做的有一個很大的缺陷,就是每次這個鏈接指向的都是最后一條publish的內容。但是有解決方法,大家可以查看我的博客的關於頁,我的IPFS主頁。實現方式其實很簡單,就是將將分享文件url的列表publish到ipns上。后續可能會再寫一篇博文介紹做法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM