手把手教你搭建 IPFS 私有網路

買賣虛擬貨幣

原文標題:《ipfs 搭建私有網路與使用》
撰文:六天

在聯盟鏈的場景下,ipfs 作為去中心化儲存的首選方案,本文將介紹如何使用 go-ipfs 搭建一個私有網路並進行簡單使用。

我的環境

由於資源限制,我這裡使用 docker 來搭建一個兩個節點的 ipfs 私有網路。如果有條件可以直接在多臺機器或者多個虛擬機器上安裝。

開始搭建

1、生成 swarm.key

swarm.key 是一個共享金鑰,只有擁有相同金鑰的節點才能互相通訊,組成一個私鑰網路。swarm.key 可以使用 工具 生成,工具的安裝命令是:

    go get -u github.com/kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen  

安裝完成後,生成 swarm.key,命令是:

    ipfs-swarm-key-gen > /users/sixdays/tmp/ipfs/swarm.key  

其中

  • /users/sixdays/tmp/ipfs/ 目錄是我 ipfs 目錄。
  • /users/sixdays/tmp/ipfs/node1 是我 ipfs 節點 1 目錄。
  • /users/sixdays/tmp/ipfs/node2 是我 ipfs 節點 2 目錄。

2、啟動節點

執行節點 1 和節點 2

 // 執行節點 1
docker run -d --name ipfs_node_1 -e ipfs_swarm_key_file=/users/sixdays/tmp/ipfs/swarm.key -v /users/sixdays/tmp/ipfs/node1/staging:/export -v /users/sixdays/tmp/ipfs/node1/data:/data/ipfs -p 4001:4001 -p 4001:4001/udp -p 127.0.0.1:8080:8080 -p 127.0.0.1:5001:5001 ipfs/go-ipfs:latest

// 執行節點 2
docker run -d --name ipfs_node_2  -e ipfs_swarm_key_file=/users/sixdays/tmp/ipfs/swarm.key -v /users/sixdays/tmp/ipfs/node2/staging:/export -v /users/sixdays/tmp/ipfs/node2/data:/data/ipfs -p 4002:4001 -p 4002:4001/udp -p 127.0.0.1:8081:8080 -p 127.0.0.1:5002:5001 ipfs/go-ipfs:latest

清除所有預設啟動節點 bootstrap

    docker exec ipfs_node_1 ipfs bootstrap rm all  
    docker exec ipfs_node_2 ipfs bootstrap rm all  

檢視節點 id

    docker exec ipfs_node_1 ipfs id  
    docker exec ipfs_node_2 ipfs id  

這裡,我節點 1 的 id 是 :
12d3koowevo8fqh8yut1noxvca5hgsrwbrcdqomecfy2zxwa7dbw
節點 1 的 address 是:
/ip4/172.17.0.3/tcp/4001/p2p/12d3koowevo8fqh8yut1noxvca5hgsrwbrcdqomecfy2zxwa7dbw

節點 2 的 id 是
12d3koowrcx6gpbsbvb6yinsdpjgnmnhfcgciumvf42o4zn2w5pj
節點 2 的 address 是
/ip4/172.17.0.4/tcp/4001/p2p/12d3koowrcx6gpbsbvb6yinsdpjgnmnhfcgciumvf42o4zn2w5pj

節點的 address 我用的是 docker 給分配的 ip 地址。

新增節點 id

在節點 1 中新增節點 2 地址

docker exec ipfs_node_1 ipfs bootstrap add  /ip4/172.17.0.4/tcp/4001/p2p/12d3koowrcx6gpbsbvb6yinsdpjgnmnhfcgciumvf42o4zn2w5pj

在節點 2 中新增節點 1 地址

docker exec ipfs_node_1 ipfs bootstrap add  /ip4/172.17.0.3/tcp/4001/p2p/12d3koowevo8fqh8yut1noxvca5hgsrwbrcdqomecfy2zxwa7dbw

至此,我們 2 個節點的 ipfs 私有網路已搭建完成。

用一下

使用命令

    docker exec ipfs_node_1 ipfs -h  

可以看到 ipfs 的基礎命令。

新增檔案 add

    $ docker exec ipfs_node_1 ipfs add /data/ipfs/swarm.key                                                                                                                    
    added qmritsemhfjtnhlytwgrjvhdrttt4gqljulepzjo9c8a2x swarm.key  

其中 :

  • /data/ipfs/swarm.key 為 ipfs_node_1 容器的目錄。

  • qmritsemhfjtnhlytwgrjvhdrttt4gqljulepzjo9c8a2x 為檔案 hash

檢視檔案 cat

    $ docker exec ipfs_node_2 ipfs cat qmritsemhfjtnhlytwgrjvhdrttt4gqljulepzjo9c8a2x   
    /key/swarm/psk/1.0.0/  
    /base16/  
    5b9941085678c502b44cc98e2614dd648cb801115dcb6acee8e83d9bf8cf454c  

可以看到我們可以在 node2 中檢視到 node1 上傳的檔案內容。

下載檔案 get

    $ docker exec ipfs_node_2 ipfs get qmritsemhfjtnhlytwgrjvhdrttt4gqljulepzjo9c8a2x -o /data/ipfs/test.key  
    saving file(s) to /data/ipfs/test.key  
     95 b / 95 b  100.00% 0s  

其中 -o 表示輸出目錄,docker 容器中的 /data/ipfs 對應我們主機目錄為 /users/sixdays/tmp/ipfs/node2/data

檢視檔案列表 ls

    $ docker exec ipfs_node_2 ipfs pin ls  
    qmq5vhrl7uv6tuon9kevbwd4pwfqkxdvvmdluzutnxqgvm indirect  
    qmu5k7ter3rdjzxu3shghsga1uqtrztnqxmtl22npnsu3g indirect  
    qmycvbfnbcwfr45hinp45rwjgvatpiw38d961l5qahum5y indirect  
    qmejvepop4d7yuadegqywmzxhhlc4jbuczjjhwmzdcme2y indirect  
    qmpz9gccepqkto6aq61g2nxguhm4icl3ewb6ldxzctioeb indirect  
    qmqgiylvadshjqkyfrtjzmg4bxbhqkperaztykgmcrlmsf indirect  
    qmqpensjpyvwpfdvhb77w8g42fvo15z4bg2x8d2ghfbsxc recursive  
    qmqy6xmjhrcc5qlboacgfcae1tc8crwdvkrhdeyjklscrq indirect  
    qmunllspaccz1vlxqvkxqqlx5r1x345qqfhbsf67hva3nn recursive  

其中 recursive 表示資料夾,indirect 表示檔案

參考

  • go-ipfs:https://github.com/ipfs/go-ipfs

  • ipfs-swarm-key-gen:https://github.com/kubuxu/go-ipfs-swarm-key-gen

  • ipfs 文件:https://www.jianshu.com/p/e38d5f733c81

來源連結:mp.weixin.qq.com

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;