1. 程式人生 > >MAC上搭建私有IPFS網路

MAC上搭建私有IPFS網路

工作中需要搭建一個私有的IPFS網路,步驟比較簡單,但還是要總結一下,希望能對其他人有點幫助。整個流程大概分4步:

  1. 搭建一個公網IPFS節點
  2. 搭建私有IPFS節點
  3. 新增新的節點到私有IPFS網路
  4. 測試IPFS網路

要執行自動化指令碼一鍵部署IPFS的話,請參照下一篇部落格:https://blog.csdn.net/weixin_41459401/article/details/84582125

1. 搭建一個IPFS節點

搭建IPFS最方便快捷的方式之一是使用docker,可以拉取go版本的ipfs映象來啟動IPFS節點。

1.1 啟動IPFS單節點

開啟terminal,執行下列命令,一個IPFS節點就跑起來了。

【執行命令】

# 拉取go-ipfs映象
docker pull ipfs/go-ipfs:latest

# 配置staging和data的volume對映檔案
ipfs_staging=/tmp/ipfs_staging
mkdir -p $ipfs_staging
ipfs_data=/tmp/ipfs_data
mkdir -p $ipfs_data

# 啟動ipfs節點
docker run -d --name ipfs_host \
-v $ipfs_staging:/export \
-v $ipfs_data
:/data/ipfs \ -p 4001:4001 \ -p 127.0.0.1:8080:8080 \ -p 127.0.0.1:5001:5001 \ ipfs/go-ipfs:latest

【檢視結果】方法1: 檢視log檔案
在terminal中敲命令列

# 檢視ipfs執行的log內容
docker logs -f ipfs_host

如果log打印出下面的內容就說明IPFS起來了。

...
Gateway (readonly) server listening on /ip4/0.0.0.0/tcp/8080
Daemon is ready

【檢視結果】方法2: 在瀏覽器中檢視ipfs
在瀏覽器位址列輸入這個地址

http://localhost:5001/webui ,會自動跳轉到ipfs的explorer的web ui介面。
在這裡插入圖片描述

1.2 檢視已連線的其他IPFS節點

開一個新terminal視窗或者Ctrl + C退出docker log程序,執行這個命令檢視一下剛才搭建的節點有沒有connect到其他節點。
【執行命令】

# 在ipfs_host容器中執行‘ipfs swarm peers’命令,檢視已連線的其他ipfs節點
docker exec ipfs_host ipfs swarm peers

【檢視結果】
如果你的電腦是聯網了的,一般都會看到一個長長的列表,裡面列出了你的節點連線了的其他IPFS節點。

/ip4/101.164.57.166/tcp/24125/ipfs/QmY9JiYESBDCU2s1SQyMCadpYYA2nmiZ4rFHwVuiTFk4Vn
/ip4/101.251.230.213/tcp/4001/ipfs/QmZEvpGZfGqNFtAVGgF2ntJnsLiWhzB2C9Kiccr5Wzb2hk
/ip4/101.251.230.214/tcp/4001/ipfs/QmPj31HZujPhhkjM4nFm4sxB3tRLsAwUtVoi6FoLbazijo
/ip4/103.205.97.78/tcp/4001/ipfs/QmXPbFGQDLeatcWEJr6f3XEoiLcX6uoZqujYk44GM6t629
…

如果發現列表是空的,則需要檢查:1)網路連線情況;2)埠對映。

如果你是要建立一個節點加入全球的IPFS網路,那麼IPFS節點的搭建工作就完成了,可以直接去測試上傳和下載檔案了;如果你是要搭建私有的IPFS網路,還要再做下面的步驟。

2. 搭建單節點的私有IPFS網路

前面是啟動了一個IPFS節點加入了公有IPFS網路,如果你想搭建自己私有的IPFS網路,需要為自己的節點設定swarm key金鑰。

2.1 生成私有網路swarm key

要生成私有網路的話,必須使用ipfs-swarm-key-gen建立私有網路的swarm key。私有網路的所有的節點都要使用這個key,否則無法加入這個私有網路。

# 關閉前面啟動的ipfa節點
docker stop ipfs_host
docker rm -f ipfs_host
# 配置staging和data的volume對映檔案
ipfs_staging=/tmp/ipfs_staging
mkdir -p $ipfs_staging
ipfs_data=/tmp/ipfs_data
mkdir -p $ipfs_data

# 拉取ipfs swarm key工具
go get github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen
# 生成swarm key
$GOPATH/bin/ipfs-swarm-key-gen > $ipfs_data/swarm.key

# 啟動ipfs節點
docker run -d --name ipfs_host \
-v $ipfs_staging:/export \
-v $ipfs_data:/data/ipfs \
-p 4001:4001 \
-p 127.0.0.1:8080:8080 \
-p 127.0.0.1:5001:5001 \
ipfs/go-ipfs:latest

2.2 移除預設的bootstrap節點

預設配置的節點都是加入全球IPFS網路的,需要刪除所有bootstrap節點資訊。
【執行命令】

docker exec ipfs_host ipfs bootstrap rm --all

【檢查結果】
檢視swarm peers,如果打印出的列表為空就對了。

# 在ipfs_host容器中執行‘ipfs swarm peers’命令,檢視已連線的其他ipfs節點
docker exec ipfs_host ipfs swarm peers

3. 為私有IPFS網路新增節點

搭建的IPFS如果只有一個節點,可以用作除錯環境,但要用於生產環境的話就沒有意義了。生產環境最好還是搭建多節點的IPFS網路。
在第2步中,第一個私有節點啟動後,可以再新增若干個新的節點,這樣一個多節點的IPFS私有網路就搭好了。新增新節點時要注意:1)在新增新節點的之前,要把前面生成的swarm key複製到ipfs_data目錄下;2)在新節點啟動後,要指定bootstrap資訊。

啟動第二個IPFS節點(同一臺物理機)

在測試環境和生產環境,建議在不同物理機上建立IPFS多節點。在本地除錯環境,可以在一臺物理機上建立多個IPFS節點。在建立新節點的時候要注意:1)不同節點對映的volume不要重合;2)容器名不要重合;3)對外埠不要重合;4)要記得把前面生產的swarm key複製到新建立的節點的ipfs_data資料夾下。例如:

new_peer_suffix=_1
ipfs_staging=/tmp/ipfs_staging$new_peer_suffix
mkdir -p $ipfs_staging
ipfs_data=/tmp/ipfs_data$new_peer_suffix
mkdir -p $ipfs_data

cp /tmp/ipfs_data/swarm.key $ipfs_data/swarm.key

# 啟動ipfs節點
docker run -d --name ipfs_host$new_peer_suffix \
-v $ipfs_staging:/export \
-v $ipfs_data:/data/ipfs \
-p 4101:4001 \
-p 127.0.0.1:8180:8080 \
-p 127.0.0.1:5101:5001 \
ipfs/go-ipfs:latest

在一臺物理機上可以啟動多個IPFS節點(我自己在macbook pro上建立了3個peer,經測試兩兩彼此都是聯通的),只要注意前面4個注意事項就好了。

指定bootstrap資訊(Optional)

ipfs bootstrap add /ip4/x.x.x.x/tcp/4001/ipfs/QmbvgDGNmKRoTiB16g1qn82pTupQdPznZPwVo9zvrCPEJv

4. 測試IPFS節點(上傳/下載檔案)

測試IPFS節點比較簡單

上傳檔案

【執行命令】

# 登陸到ipfs_host container
docker exec -it ipfs_host /bin/sh
# 上傳檔案
# 注:測試的時候不建議上傳特別大的檔案,尤其如果你是連了全球網路的話,也不要上傳私密檔案.
# 下面的所有命令列都是跑在ipfs_host container裡面的
# 建立hello world測試檔案
echo "hello world" > hello.txt
ipfs add hello.txt

【檢視結果】方法1: 檢視上傳進度
上傳檔案的add命令會打印出上傳的進度,如果看到100.00%就是上傳完畢了。

/ # ipfs add /data/ipfs/version 
added QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o hello.txt
 12 B / 12 B [===================================================================================================================================] 100.00%

【檢視結果】方法2: ipfs cat命令檢視檔案內容

docker exec ipfs_host ipfs cat /ipfs/QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o

一切正常的話應該能看到hello.txt的檔案內容:

/ # ipfs cat QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
hello world

【檢視結果】方法3: 瀏覽器檢視
前面啟動ipfs節點的時候把ipfs_host容器的8080埠對映到了物理機,可以通過該埠直接在瀏覽器中檢視剛剛上傳的檔案內容,直接在瀏覽器中敲地址http://localhost:8080/ipfs/------IPFS_URL------就可以檢視檔案了。
例如,剛剛上傳的檔案hash是QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o,直接在瀏覽器地址視窗輸入
http://localhost:8080/ipfs/QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
就可以看到檔案內容了
在這裡插入圖片描述
【檢視結果】方法4: curl命令訪問8080埠
新開一個terminal視窗,執行下面這個命令:

curl http://localhost:8080/ipfs/QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o

打印出來hello world就對了~_~

hello world