IPFS - alx696/share GitHub Wiki
IPNS DNSLink
IPNS用于给IPFS内容提供一个稳定的地址, 这里以libp2p网站的IPFS内容 /ipfs/Qmc2o4ZNtbinEmRF9UGouBYTuiHbtCSShMFRbBY5ZiZDmU
为例说明配置方法. 配置后可以通过域名 http://libp2p.dev.lilu.red/
访问 /ipfs/Qmc2o4ZNtbinEmRF9UGouBYTuiHbtCSShMFRbBY5ZiZDmU
.
为域名添加DNSLink的TXT记录
在域名控制台添加名称为_dnslink.libp2p.dev.lilu.red
, 类型为TXT
, 数据为dnslink=/ipfs/Qmc2o4ZNtbinEmRF9UGouBYTuiHbtCSShMFRbBY5ZiZDmU
的记录, TTL为1分钟.
添加完毕待DNS解析生效后即可通过 https://ipfs.io/ipns/libp2p.dev.lilu.red/ 访问IPFS内容.
为域名添加IPFS网关的CNAME记录
此时通过libp2p.dev.lilu.red
无法访问IPFS内容, 需要添加一个指向IPFS网关的CNAME记录.
在域名控制台添加名称为libp2p.dev.lilu.red
, 类型为CNAME
, 目标为gateway.ipfs.io
的记录, TTL为1分钟.
添加完毕待DNS解析生效后即可通过 http://libp2p.dev.lilu.red/ 访问IPFS内容.
安装
go程序安装简单,直接将其移动到 /usr/local/bin/
中即可.
初始化
$ ipfs init
设置IPFS_PATH变量可以设置ipfs目录,例如:
$ IPFS_PATH=~/hd ipfs init
。IPFS_PATH变量设置应该放到.profile中,这样所有ipfs命令都能使用。
启动
$ ipfs daemon
启动后可以通过 127.0.0.1:5001/webui
打开一个基本的界面.
初始化并启动
$ ipfs daemon --init
挂载IPFS(ipfs,ipns)到文件系统
# 只需执行一次
$ sudo mkdir /ipfs /ipns && \
sudo chown `whoami` /ipfs /ipns
$ ipfs daemon --mount
挂载后文件系统中会存在 /ipfs /ipns
两个路径, 直接打开文件夹里面没有内容(虚拟只读). 但是如果读取此路径, 是有内容的. 比如用ipfs add一个txt文件(哈希为QmPkjZAPW3yHBcNu9XYY8bs3DfpY3KsYjH7KxTr5BQChFS), 然后通过浏览器访问 file:///ipfs/QmPkjZAPW3yHBcNu9XYY8bs3DfpY3KsYjH7KxTr5BQChFS
, 或者 nano /ipfs/QmPkjZAPW3yHBcNu9XYY8bs3DfpY3KsYjH7KxTr5BQChFS
都是可以显示内容的.
设置
通过设置修改端口等配置, 还可以启用一些特性.
文档 https://docs.ipfs.io/reference/api/cli/#ipfs-config 修改设置后需要重启才能生效.
基本配置
ipfs config --json Datastore.StorageMax '"300GB"' ;\
ipfs config --json Datastore.GCPeriod '"12h"' ;\
\
ipfs config --json Experimental.FilestoreEnabled 'true' ;\
ipfs config --json Experimental.UrlstoreEnabled 'true' ;\
ipfs config --json Experimental.ShardingEnabled 'true' ;\
ipfs config --json Experimental.Libp2pStreamMounting 'true' ;\
ipfs config --json Experimental.P2pHttpProxy 'true' ;\
ipfs config --json Experimental.QUIC 'true' ;\
ipfs config --json Experimental.PreferTLS 'true' ;\
\
ipfs config --json Addresses.API '"/ip4/0.0.0.0/tcp/4002"' ;\
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["GET", "POST","PUT"]' ;\
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["http://127.0.0.1:4002","http://192.168.0.2:4002"]' ;\
ipfs config --json Addresses.Gateway '"/ip4/0.0.0.0/tcp/4003"' ;\
ipfs config --json Addresses.Announce '["/dns4/xm.lilu.red/tcp/4001"]'
默认设置网关及API只允许127.0.0.1访问, 网关可以对外开放, API可以对内网IP开发以编译交互使用.
开机启动
- 开启rc-local服务
- 编辑
/etc/rc.local
, 在exit 0
行前添加启动脚本:
su - s -c "ipfs daemon &"
注意:
s
为执行ipfs init
的用户名称. su后面的-
意为将环境变变量也切换为用户s的.
私有化
文档 https://github.com/ipfs/go-ipfs/blob/master/docs/experimental-features.md#private-networks
- 使用go-ipfs-swarm-key-gen生成swarm.key;
- 每个IPFS节点在init后, 将swarm.key放入库文件夹中(~/.ipfs);
- 启动信任节点(只作为其它节点的参考);
- 其它节点执行下面命令, 然后启动:
$ ipfs bootstrap rm --all && \
ipfs bootstrap add /ip4/信任节点IP/tcp/4001/ipfs/信任节点PeerId
注意: 放置swarm.key后成为了私有节点swarm, 5001/webui会无法打开(好像说是webui的内容需要从公开网络中获取, 见 https://github.com/ipfs/go-ipfs/issues/5210#issuecomment-403817998)!