
今天也根據(jù)官網(wǎng)的文檔開始一步步搭建ipfs運行環(huán)境,我們先來看一下IPFS的簡介:
IPFS(InterPlanetary File System)是一個點對點的分布式超媒體分發(fā)協(xié)議,它整合了過去幾年最好的分布式系統(tǒng)思路,為所有人提供全球統(tǒng)一的可尋址空間,包括Git、自證明文件系統(tǒng)SFS、BitTorrent和DHT,同時也被認為是最有可能取代HTTP的新一代互聯(lián)網(wǎng)協(xié)議。
IPFS用基于內(nèi)容的尋址替代傳統(tǒng)的基于域名的尋址,用戶不需要關(guān)心服務(wù)器的位置,不用考慮文件存儲的名字和路徑。我們將一個文件放到IPFS節(jié)點中,將會得到基于其內(nèi)容計算出的唯一加密哈希值。哈希值直接反映文件的內(nèi)容,哪怕只修改1比特,哈希值也會完全不同。當IPFS被請求一個文件哈希時,它會使用一個分布式哈希表找到文件所在的節(jié)點,取回文件并驗證文件數(shù)據(jù)。
IPFS是通用目的的基礎(chǔ)架構(gòu),基本沒有存儲上的限制。大文件會被切分成小的分塊,下載的時候可以從多個服務(wù)器同時獲取。IPFS的網(wǎng)絡(luò)是不固定的、細粒度的、分布式的網(wǎng)絡(luò),可以很好的適應(yīng)內(nèi)容分發(fā)網(wǎng)絡(luò)的要求。這樣的設(shè)計可以很好的共享各類數(shù)據(jù),包括圖像、視頻流、分布式數(shù)據(jù)庫、整個操作系統(tǒng)、模塊鏈、8英寸軟盤的備份,還有靜態(tài)網(wǎng)站。
1、下載IPFS
打開官網(wǎng)https://ipfs.io/ ,點擊【Try it】

點擊 【Install IPFS now】


點擊【Download go-ipfs】, 下載對應(yīng)版本的IPFS安裝文件

下載完之后,將文件解壓到你想要存放的目錄,如:E:\Workplace\BlockChain\go-ipfs

2、安裝IPFS
打開CMD,進入ipfs文件目錄
E:
cd E:\Workplace\BlockChain\go-ipfs

輸入 dir 查看目錄信息,然后輸入ipfs init 開始初始化 ipfs網(wǎng)絡(luò)環(huán)境,并且系統(tǒng)會分配一個屬于你自己的IPFS網(wǎng)絡(luò)哈希值(類似你在IPFS網(wǎng)絡(luò)中的一張身份證ID)。有了這個ID,別人就可以訪問到你的節(jié)點
~>dir // 查看目錄信息
~>ipfs init // 初始化 ipfs網(wǎng)絡(luò)環(huán)境

輸入上面獲取的內(nèi)容 ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme,
出現(xiàn) Hello and Welcome to IPFS!
那恭喜你!說明你的電腦已經(jīng)成功安裝IPFS并已經(jīng)加入到IPFS網(wǎng)絡(luò)了。

3、IPFS環(huán)境配置
IPFS安裝的默認配置將存放到你的用戶文件夾根目錄下(C:\Users\abc\.ipfs)文件夾名.ipfs,接下來打開config,里面的是ipfs的一些基礎(chǔ)配置數(shù)據(jù),可以根據(jù)自己的需求修改里面的配置


配置修改請參考官網(wǎng)文檔
4、運行測試
輸入 ipfs daemon 啟動IPFS服務(wù)監(jiān)聽,目的是用于監(jiān)聽IPFS網(wǎng)絡(luò)通信數(shù)據(jù),使用的監(jiān)聽端口是5001。注意要并保持開啟狀態(tài),才能守護監(jiān)聽的進程

另開一個cmd,同樣進入ipfs目錄,試著執(zhí)行一些基礎(chǔ)命令
輸入 ipfs help,獲取一些常用的命令

輸入 ipfs id,可以查看你的通信ID信息

查看配置信息

輸入 ipfs swarm peers 可以查看附近也在使用IPFS網(wǎng)絡(luò)節(jié)點伙伴,如果列出有數(shù)據(jù)說明你并不是一個人在使用IPFS網(wǎng)絡(luò)

5、嘗試調(diào)用一個ipfs網(wǎng)絡(luò)中的文件:
打開官網(wǎng)點擊 右上角 Docs -> 選擇目錄 Getting Started
找到Going online,復(fù)制代碼 ipfs cat /ipfs/QmW2WQi7j6c7UgJTarActp7tDNikE4B2qXtFCfLPdsgaTQ/cat.jpg >cat.jpg

粘貼到CMD,回車確認即可獲得ipfs網(wǎng)絡(luò)的的一個貓的圖片資源,也說明我們的ipfs環(huán)境可以訪問網(wǎng)絡(luò)中的文件了。

6、可視化界面
IPFS網(wǎng)絡(luò)狀態(tài)保持開啟,此時瀏覽器輸入http://localhost:5001/webui 你可以看到一個漂亮的可視化IPFS管理界面,里面可以做一些基礎(chǔ)的資源獲取查看操作

7、上傳一個文件以及在ipfs獲取自己上傳的文件
將自己的文件放在ipfs配置目錄(E:\Workplace\BlockChain\go-ipfs),如我的test.txt這個文檔

執(zhí)行命令 ipfs add test.txt,顯示如下,說明我的文件已經(jīng)加入了我的ipfs網(wǎng)絡(luò)節(jié)點中,并且生成了一個test.txt這個文件的唯一哈希值 QmPAUBJmKa1KTeSo7qn4q2N9DT3yhBxPWf1ELHku3nMbci,
輸入命令 ipfs cat QmPAUBJmKa1KTeSo7qn4q2N9DT3yhBxPWf1ELHku3nMbci 獲得文件信息

此時我們可以通過上面返回的文件哈希值 QmPAUBJmKa1KTeSo7qn4q2N9DT3yhBxPWf1ELHku3nMbci,
獲取我們上傳的文件,在剛才的可視化界面把哈希值粘貼到搜索欄即可得到我們上傳的文件信息

注意:我們剛才的文件獲取操作都是只在我們本機內(nèi)網(wǎng)建立的ipfs環(huán)境中,我們嘗試使用https://ipfs.io/ipfs/QmPAUBJmKa1KTeSo7qn4q2N9DT3yhBxPWf1ELHku3nMbci 查看信息,出現(xiàn)沒有找到資源的提示,說明我們上傳的文件還沒有同步到ipfs外網(wǎng),所以訪問不了。
接下來執(zhí)行下面的命令同步節(jié)點數(shù)據(jù)到IPFS網(wǎng)絡(luò):
先把剛在運行的 ipfs daemon服務(wù)停止(Ctrl + c),然后重新啟動 ipfs daemon
再次在瀏覽器訪問,可以看到我們上傳的文件,說明我們現(xiàn)在已經(jīng)成功把文件上傳到ipfs網(wǎng)絡(luò)節(jié)點了。

8、發(fā)布到PNS,創(chuàng)建簡易的網(wǎng)頁發(fā)布到IPFS
在這里我先自己寫一個簡單的網(wǎng)頁給大家演示,先在桌面新建一個site文件夾,然后按照下面的步驟在site文件夾中建立index.html和style.css文件。
8.1 創(chuàng)建一個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>
8.2 創(chuàng)建一個style.css文件
h1 {
color: green;
}
8.3 添加到ipfs
> ipfs add -r site/
added QmS4a85WLxie6Zy6Tntg6CccyGHyV4823Vo1vkjGBYhetP site/index.html
added QmZL2UBTwnhcLv66fARL9UV8W8a9ZA4iwTLcaUCsB1u1yW site/style.css
added QmPAygbESghBjPbLhGJAda5rA9GCBMHMGfgwLoB61DfnxX site
最后一行是項目根目錄的hash,你先通過ipfs daemon同步網(wǎng)絡(luò),然后可以通過https://ipfs.io/ipfs/<你的項目根目錄hash>,即https://ipfs.io/ipfs/QmPAygbESghBjPbLhGJAda5rA9GCBMHMGfgwLoB61DfnxX訪問項目。
8.4 訪問網(wǎng)站
瀏覽器打開https://ipfs.io/ipfs/QmPAygbESghBjPbLhGJAda5rA9GCBMHMGfgwLoB61DfnxX,效果圖如下:

]
8.5 發(fā)布到IPNS
當我們修改網(wǎng)站內(nèi)容重新添加到ipfs時,hash會發(fā)生變化,當我們網(wǎng)站更新時,我們可以將網(wǎng)站發(fā)布到IPNS,在IPNS中,允許我們節(jié)點的域名空間中引用一個IPFS hash,也就是說我們可以通過節(jié)點ID對項目根目錄的IPFS HASH進行綁定,以后我們訪問網(wǎng)站時直接通過節(jié)點·ID訪問即可,當我們更新網(wǎng)站時,重新發(fā)布到IPNS即可。
> ipfs name publish QmPAygbESghBjPbLhGJAda5rA9GCBMHMGfgwLoB61DfnxX
Published to QmVhF9zg4qcrVTw8jkkCGvTJGXJjvwX6CvRuxzUErEyx97: /ipfs/QmPAygbESghBjPbLhGJAda5rA9GCBMHMGfgwLoB61DfnxX
當我們執(zhí)行ipfs name publish命令時,會返回我們的節(jié)點ID,你可以通過ipfs id進行查看驗證是否是你的節(jié)點ID。
驗證id:
> 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綁定的網(wǎng)站hash:
> ipfs name resolve <peerId>
> ipfs name resolve QmVhF9zg4qcrVTw8jkkCGvTJGXJjvwX6CvRuxzUErEyx97
/ipfs/QmPAygbESghBjPbLhGJAda5rA9GCBMHMGfgwLoB61DfnxX
我們現(xiàn)在就可以根據(jù)節(jié)點id,通過IPNS進行訪問了:
https://ipfs.io/ipns/QmVhF9zg4qcrVTw8jkkCGvTJGXJjvwX6CvRuxzUErEyx97

注意上面是ipns而不是ipfs。
8.6 修改網(wǎng)站內(nèi)容,重新發(fā)布到IPNS
現(xiàn)在去style.css中修改字體顏色:
h1 {
color: red;
}
重新添加site文件夾到ipfs:
> ipfs add -r site/
added QmS4a85WLxie6Zy6Tntg6CccyGHyV4823Vo1vkjGBYhetP site/index.html
added QmUTwP64HnrQp3GJuVeuvwaQ79rxa8waQL5yj3qkCswqvk site/style.css
added QmWhEUU1ksDShPTqhPEEXohfnhBvpwaCHtxhnbf3Fi1piH site
可以看到除了index.html文件的hash值沒變外,style.css和site文件夾的hash值都不是之前的hash值了。
瀏覽器打開https://ipfs.io/ipfs/QmWhEUU1ksDShPTqhPEEXohfnhBvpwaCHtxhnbf3Fi1piH,效果圖如下:

重新發(fā)布到IPNS:
> ipfs name publish QmWhEUU1ksDShPTqhPEEXohfnhBvpwaCHtxhnbf3Fi1piH
Published to QmVhF9zg4qcrVTw8jkkCGvTJGXJjvwX6CvRuxzUErEyx97: /ipfs/QmWhEUU1ksDShPTqhPEEXohfnhBvpwaCHtxhnbf3Fi1piH
再次根據(jù)節(jié)點id,通過IPNS進行訪問:
https://ipfs.io/ipns/QmVhF9zg4qcrVTw8jkkCGvTJGXJjvwX6CvRuxzUErEyx97

可以看到,由于網(wǎng)站的內(nèi)容發(fā)生了變化,對應(yīng)的hash值也發(fā)生了變化,這會導致其他人通過舊的網(wǎng)站hash值,訪問不到更新后的網(wǎng)站。而使用IPNS,將每次更新后的網(wǎng)站hash值綁定到我們的節(jié)點id,他人只需要記住你的節(jié)點id,通過IPNS,就可以一直訪問最新的網(wǎng)站內(nèi)容。
以上簡介的IPFS的環(huán)境搭建和基礎(chǔ)的幾個命令操作
參考文章
http://www.itdecent.cn/p/9e7fb59d2bb5
https://steemit.com/ipfs/@daxiang/ipfs-windows