IPFS - alx696/share GitHub Wiki

IPNS DNSLink

https://dnslink.io/

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

文档 https://docs.ipfs.io/reference/api/cli/#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开发以编译交互使用.

开机启动

  1. 开启rc-local服务
  2. 编辑 /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

  1. 使用go-ipfs-swarm-key-gen生成swarm.key;
  2. 每个IPFS节点在init后, 将swarm.key放入库文件夹中(~/.ipfs);
  3. 启动信任节点(只作为其它节点的参考);
  4. 其它节点执行下面命令, 然后启动:
$ 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)!