前言
項目中需要使用ipfs,所以自己搭建一個。
1. 準備機器
準備幾臺虛擬機,不分主從,我用的是centos7,下面的教程也是基於centos7.
4臺虛擬機
主機名 | ip | 說明 |
---|---|---|
centos-11 | *.*.*.11 |
不分主從 01 |
centos-12 | *.*.*.12 |
不分主從 02 |
centos-13 | *.*.*.13 |
不分主從 03 |
centos-14 | *.*.*.14 |
不分主從 04 |
2. 下載與安裝
//各節點都要執行
1.到ipfs官網下載安裝包 (直接使用已編譯版本,也可以自己編譯)
https://ipfs.io/ipns/dist.ipfs.io/go-ipfs/v0.4.22/go-ipfs_v0.4.22_linux-amd64.tar.gz
2.解壓
tar xvfz go-ipfs_v0.4.22_linux-amd64.tar.gz
3.安裝
cd go-ipfs
./install.sh
4.測試
ipfs help
如果測試失敗,檢查/usr/local/bin路徑是否處於PATH中。如無則添加到/etc/profile中
3. 初始化節點
各節點都要執行
- 初始化
ipfs init
//生成的結果如下:
initializing IPFS node at /root/.ipfs
generating 2048-bit RSA keypair...done
peer identity: QmPMo2L*************zDCGScNN
to get started, enter:
ipfs cat /ipfs/QmS4ustL54*******a8nUH4uVv/readme
- 記下節點id:
01:Qmee3b4p*********************YniPJynb
02:QmZfJxkA*********************gkm7hzFE
03:QmPaid8k*********************cBBTuU6k
04:QmPMo2LV*********************DfCGScNN
在各個節點的home目錄新增了ipfs的文件夾.ipfs:
cd ~/.ipfs
- 修改存儲容量
修改~/.ipfs/config中"StorageMax"字段即可(目前默認爲10GB) - 修改訪問路徑
IPFS的API和GATEWAY默認訪問路徑爲127.0.0.1.如需要其他機器訪問,需要修改~/.ipfs/config中API和GATEWAY字段,將127.0.0.1替換爲0.0.0.0 - http corps問題
非本地訪問會產生跨域問題,需要在設置中註明。
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Credentials '["true"]'
注意: 開發環境設置中“*”意爲允許所有域名訪問,生產環境下應該將跨域設置爲指定域名或關閉跨域
- 查看節點ID
如果忘記了id,可以通過ipfs id命令查看
4. 創建共享密鑰
私有網絡內所有節點需要共享一套密鑰
在任意一個虛擬機上執行
1.下載密鑰工具
go get -u github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen
2.生成密鑰
ipfs-swarm-key-gen > ~/.ipfs/swarm.key
3.將密鑰分發到各個節點
scp ~/.ipfs/swarm.key root@*.*.*.11:~/.ipfs/
scp ~/.ipfs/swarm.key root@*.*.*.12:~/.ipfs/
scp ~/.ipfs/swarm.key root@*.*.*.13:~/.ipfs/
上面省略的是ip地址
5. 添加啓動節點
所有節點執行
1.刪除默認啓動節點(刪除公網節點)
ipfs bootstrap rm all
2.各節點分別將其他節點添加到bootstrap列表
ipfs bootstrap add /ip4/被添加節點的ip地址/tcp/4001/ipfs/被添加節點的ID值
//11服務器:
ipfs bootstrap add /ip4/*.*.*.12/tcp/4001/ipfs/QmZfJ********gkm7hzE
ipfs bootstrap add /ip4/*.*.*.13/tcp/4001/ipfs/QmPai********BBTuU6k
ipfs bootstrap add /ip4/*.*.*.14/tcp/4001/ipfs/QmPMo********zDCScNN
//12服務器:
ipfs bootstrap add /ip4/*.*.*.11/tcp/4001/ipfs/Qmee3********niPJynb
ipfs bootstrap add /ip4/*.*.*.13/tcp/4001/ipfs/QmPai********GcBuU6k
ipfs bootstrap add /ip4/*.*.*.14/tcp/4001/ipfs/QmPMo********DCGScNN
//13服務器:
ipfs bootstrap add /ip4/*.*.*.11/tcp/4001/ipfs/Qmee3********niPJynb
ipfs bootstrap add /ip4/*.*.*.12/tcp/4001/ipfs/QmZfJ********iP7hzFE
ipfs bootstrap add /ip4/*.*.*.14/tcp/4001/ipfs/QmPMo********zFGScNN
//14服務器:
ipfs bootstrap add /ip4/*.*.*.11/tcp/4001/ipfs/Qmee3********niPJynb
ipfs bootstrap add /ip4/*.*.*.12/tcp/4001/ipfs/QmZfJ********km7hzFE
ipfs bootstrap add /ip4/*.*.*.13/tcp/4001/ipfs/QmPai********GBTuU6k
3.啓動節點
ipfs deamon
//後臺啓動 nohup ipfs daemon &
4.測試
在14機器上傳文件:
ipfs add a.tar.gz
//輸出:
//added QmUct****************nwwXQQ a.tar.gz
//5.10 MiB / 5.10 MiB [=============================] 100.00%
在其他機器下載:
ipfs get QmUct***************nwwXQQ
//輸出:
//Saving file(s) to QmUct********************nwwXQQ
//5.10 MiB / 5.10 MiB [=============================] 100.00% 0s
注意:
- daemon守護進程如果直接運行,關閉會話窗口後就會失效
- daemon守護進程前臺運行狀態下,使用CTRL+C退出
- daemon後臺啓動後需要使用kill -9命令殺死才能停止
- 每一次修改config後都需要重啓daemon
6. 設置ipfs服務
關閉所有daemon後所有節點都需要執行:
cd /lib/systemd/system/
vim ipfs.service
[Unit]
Description=IPFS
[Service]
ExecStart=/usr/local/bin/ipfs daemon
Restart=always
User=root
Group=root
[Install]
WantedBy=multi-user.target
:wq
service ipfs start
7.安裝可視化管理頁面WEBUI
在11服務器內的任意位置執行以下命令:
git clone https://github.com/ipfs/webui
cd webui
npm install
npm start
成功後訪問 http://*.*.*.11:3000
即可打開頁面
如果頁面顯示 Failed to connect to the API. 需要在頁面下方的API ADDRESS處配置API地址:
/ip4/*.*.*.11/tcp/5001
8.API
所有命令行支持的命令都有對應的Restful api實現,官方文檔:
https://docs.ipfs.io/reference/api/http/
中文參考:
https://blog.csdn.net/weixin_43132569/article/details/82628570
SDK
有GO語言實現的SDK:
https://github.com/ipfs/go-ipfs-api
錯誤
ipfs id報錯
Error: cannot connect to the api. Is the deamon running? To run as a standalone CLI command remove the api file in $IPFS_PATH/api
解決方法:刪除~/.ipfs/api重試即可