利用 Docker 搭建 IPFS 私有網絡
下載項目
環境
兩台 Linux 設備,分別配置他們的ip地址為 192.168.1.244 和 192.168.1.246
步驟
- 修改掛載目錄
- 通過 docker 創建 IPFS 容器
- 確保配置 IPFS API 以允許跨源(CORS)請求
- 生成並分發一個共享 key
- 移除默認的 boostrap 節點
- 添加節點創建網絡
- 重啟服務
- 查看鄰居
修改掛載目錄
該步驟可跳過,默認掛載目錄為 項目目錄下的
data
和staging
文件夾
version: "3"
services:
ipfs_host:
container_name: ipfs_host
image: docker.io/ipfs/go-ipfs:latest
restart: always
volumes:
- ./staging:/export # (可不修改)修改 掛載目錄 ./staging
- ./data:/data/ipfs # (可不修改)修改 掛載目錄 ./data
ports:
- 4001:4001
- 0.0.0.0:8080:8080
- 0.0.0.0:5001:5001
通過 docker 創建 IPFS 容器
192.168.1.244 和 192.168.1.246 節點 創建 IPFS 容器
運行 make 命令
make up
登陸網頁:http://192.168.1.244:5001/webui
登陸網頁:http://192.168.1.246:5001/webui
創建容器到正常訪問頁面所要等待時間大約 3-5
分鍾
確保配置 IPFS API 以允許跨源(CORS)請求
192.168.1.244 和 192.168.1.246 節點 配置跨源(CORS)請求
運行以下命令:
docker exec ipfs_host ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
docker exec ipfs_host ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST"]'
生成並分發一個共享 key
192.168.1.244 和 192.168.1.246 節點 配置跨源(CORS)請求
注:每個節點的 key 文件
內容保持一致
- 生成key
go get -u github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen
./ipfs-swarm-key-gen > swarm.key
- 分發 key 到每個節點
目標路徑: 掛載目錄的 data
文件夾內
cp swarm.key data/
移除默認的 boostrap 節點
192.168.1.244 和 192.168.1.246 節點 配置跨源(CORS)請求
docker exec ipfs_host ipfs bootstrap rm --all
添加節點創建網絡
- 獲取 192.168.1.244 節點 信息
docker exec ipfs_host ipfs id
{
"ID": "QmNtnCQiqMezQiwPfRwf7KE8BoM8mBmUYYm3XsXNfh8DL7",
"PublicKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGwu8A5Xw4okQmkpufHLIjIO5ZhQGnCGzqD/OgcGE5MNfPe6pSurRQTI9AgQWtODJOGWqj7GBe1PgZXHIVkIhVjPIQftpcJJ/D6STJIzH9gGApc7SA8iIh2i9TaTontnvLuDswRj2hce2vWXQhh3DZ8ttv9rrPYfMcuM0tWs7klMQgt3C67prxgTd0esXm5DevtgJeHazimJcjNMBsAc9niKBgV0KFwxZPGouBBFibzF9jTWOC0qk52c33a4LcvKohLWnJbJGJ8mQj1oI9Srmo2SV37UbAVECxRvCDa0HhJkUUzkzpyCFUncZ03Mz0D6VTTCEoFKMBcahHM7ZuCKezAgMBAAE=",
"Addresses": [
"/ip4/127.0.0.1/tcp/4001/ipfs/QmNtnCQiqMezQiwPfRwf7KE8BoM8mBmUYYm3XsXNfh8DL7",
"/ip4/172.19.0.2/tcp/4001/ipfs/QmNtnCQiqMezQiwPfRwf7KE8BoM8mBmUYYm3XsXNfh8DL7",
"/ip6/::1/tcp/4001/ipfs/QmNtnCQiqMezQiwPfRwf7KE8BoM8mBmUYYm3XsXNfh8DL7"
],
"AgentVersion": "go-ipfs/0.4.19/52776a7",
"ProtocolVersion": "ipfs/0.1.0"
}
- 192.168.1.246 節點添加 192.168.1.244
docker exec ipfs_host ipfs bootstrap add /ip4/192.168.1.244/tcp/4001/ipfs/QmNtnCQiqMezQiwPfRwf7KE8BoM8mBmUYYm3XsXNfh8DL7
重啟服務
192.168.1.244 和 192.168.1.246 節點 服務重啟
docker restart ipfs_host
查看鄰居
192.168.1.244 查看鄰居
docker exec ipfs_host ipfs swarm peers
/ip4/192.168.1.246/tcp/4001/ipfs/QmVUF31gtrV9H3V1ndDCEGfKLahBNi8E9PT4AHj6m2zpjj
192.168.1.246 查看鄰居
docker exec ipfs_host ipfs swarm peers
/ip4/192.168.1.244/tcp/4001/ipfs/QmNtnCQiqMezQiwPfRwf7KE8BoM8mBmUYYm3XsXNfh8DL7
測試
- 在 192.168.1.244 節點 添加文件
docker exec ipfs_host ipfs add /data/ipfs/version
2 B / 2 B 100.00%added QmaHbbushv2gYBUyofdm853cy1HTcNuinqagCfMjMdGmNw version
- 在 192.168.1.246 節點 用哈希值讀取該文件
docker exec ipfs_host ipfs cat QmaHbbushv2gYBUyofdm853cy1HTcNuinqagCfMjMdGmNw
7
搭建的私有網絡可以正常使用。
附錄
查看運行日志
docker logs -f ipfs_host
停止容器
docker stop ipfs_host
刪除容器
docker rm ipfs_host
重啟容器
docker restart ipfs_host
運行 IPFS 命令
docker exec ipfs_host <ipfs cmd>