温馨提示:这篇文章已超过845天没有更新,请注意相关的内容是否还可用!
本文由IPFS原力区收集译制,版权所属原作者
前言
我们已经在ipfs.runfiliation.com上启动了一个ipfs节点,可以试一试:
- 在网关上查看对象:https: //ipfs.runfission.com/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv
- 通过TCP连接,地址为:/ip4/3.215.160.238/tcp/4001/ipfs/QmVLEz2SxoNiFnuyLpbXsH6SvjPTrHNMU88vCQZyhgBzgw
- 通过安全的Websocket连接:/dns4/ipfs.runfission.com/tcp/4003/wss/ipfs/QmVLEz2SxoNiFnuyLpbXsH6SvjPTrHNMU88vCQZyhgBzgw
- 设置IPFS节点
- 将s3设置为数据存储
- 设置TLS +(安全)Websocket
正文
一、设置IPFS节点 设置EC2
- 启动实例
- 我们使用了Ubuntu 18.04 64位(x86)
- t2.large(t2.micro免费版)
- 添加安全组
- 称它为 ipfs-node
- 您现在可以打开所有流量
- 稍后您将需要一个限制性更强的防火墙
- 端口22上的所有SSH流量
- 端口80/443上的所有HTTP / HTTPS流量
- 端口8080(网关)上的所有TCP通信量(网关)
- 端口4001-4003(ipfs连接端口)上的所有TCP通信量
- 创建新的密钥对
- 命名: aws-ipfs-node
- cd ~/下载
- 使文件对当前用户只读: sudo chmod 400 aws-ipfs-node.pem
- 移至ssh keys文件夹:mv aws-ipfs-node.pem ~/.ssh
SSH实例
- ssh -i ~/.ssh/aws-ipfs-node.pem ubuntu@$PUBLIC_DNS
- 在我们的例子中:ssh -i ~/.ssh/aws-ipfs-node.pem ubuntu@ec2-3-215-160-238.compute-1.amazonaws.com
安装IPFS:
- 下载ipfs :wget https://dist.ipfs.io/go-ipfs/v0.4.22/go-ipfs_v0.4.22_linux-amd64.tar.gz(或最新版本)
- 解压: tar xvfz go-ipfs_v0.4.22_linux-amd64.tar.gz
- 将二进制文件移至$ PATH:sudo mv go-ipfs/ipfs /usr/local/bin
- 清理: rm go-ipfs_v0.4.22_linux-amd64.tar.gz
- 清理: rm -rf go-ipfs
检查点:
ipfs version should print ipfs version 0.4.22(或您下载的任何版本)
初始化回购
- 编辑用于设置环境变量的用户配置文件:(sudo vim ~/.profile或您使用的任何文本编辑器)
- 添加 export IPFS_PATH=/data/ipfs(或您希望在任何地方安装ipfs的地方)
- 源 ~/.profile
- sudo mkdir -p $IPFS_PATH
- 允许当前用户访问ipfs数据 sudo chown ubuntu:ubuntu $IPFS_PATH
- 使用server配置初始化ipfs repo :ipfs init -p server
- 更改配置:
- 使用ipfs配置数据存储设置最大存储空间。StorageMax XXGB(如果连接到s3,则将其提升很多
- 启用网关: ipfs配置地址。网关/ip4/0.0.0/tcp/8080
- 或者,可以通过/data/ipfs/config直接编辑来更改它们
运行后台程序
- 创建systemctl服务
- 创建/lib/systemd/system/ipfs.service包含内容的文件
Description=ipfs daemon
[Service]
ExecStart=/usr/local/bin/ipfs daemon–enable-gc
estart=always
User=ubuntu
Group=ubuntu
Environment=”IPFS_PATH=/data/ipfs”
[Install]
WantedBy=multi-user.target
- 重新启动systemctl daemon以便找到新服务:sudo systemctl daemon-reload
- 告诉systemctl ipfs应在启动时启动:sudo systemctl enable ipfs
- 启动ipfs:sudo systemctl start ipfs
- 检查状态: sudo systemctl status ipfs
- 应该会看到
Loaded: loaded (/lib/systemd/system/ipfs.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2019-08-28 20:38:04 UTC; 4s ago
Main PID: 30133 (ipfs)
Tasks: 9 (limit: 4915)
CGroup: /system.slice/ipfs.service
└─30133 /usr/local/bin/ipfs daemon –enable-gc
ipfs[30133]: Swarm listening on /ip4/127.0.0.1/tcp/4001
ipfs[30133]: Swarm listening on /ip4/172.31.43.10/tcp/4001
ipfs[30133]: Swarm listening on /ip6/::1/tcp/4001
ipfs[30133]: Swarm listening on /p2p-circuit
ipfs[30133]: Swarm announcing /ip4/127.0.0.1/tcp/4001
ipfs[30133]: Swarm announcing /ip6/::1/tcp/4001
ipfs[30133]: API server listening on /ip4/127.0.0.1/tcp/5001
ipfs[30133]: WebUI: http://127.0.0.1:5001/webui
ipfs[30133]: Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/80
ipfs[30133]: 后台程序已就绪
检查点:
在浏览器中加载$public_dns:8080/ipfs/qms4ustl54uo8fzr9455qaxzwumiuhyvmcx9ba8nuh4uvv,您应该会看到docs目录
在我们的例子中:
http://ec2-3-215-160-238.compute-1.amazonaws.com:8080/ipfs/qms4ustl54uo8fzr9455qaxzwumiuhyvmcx9ba8nuh4uvv
二、将s3设置为数据存储
注意:在将数据添加到ipfs节点之前执行此操作。这将破坏任何已经添加的数据。
创建s3 bucket
- 我们将调用我们的ipfs-node
- 确保它与ec2实例位于相同的区域
- 保留公共访问权限(只有我们的节点才能访问这些对象)
- 获取节点的访问密钥
- 转到我的aws安全证书
- 用户在侧边栏
- 添加用户
- 我们将调用我们的ipfs-node访问类型:程序访问
- 目前:s3完全访问权限,以后可以定制
- 记下访问密钥和秘密访问密钥(请注意:由于您无法再次访问秘密密钥,请立即执行此操作)
构建工具
- 安装 go
- 必须与用于构建ipfs的版本相同
- ipfs version –all
- wget https://dl.google.com/go/go$VERSION.linux-amd64.tar.gz
- in our case:获取https:// dl.google.com / go / go1.12.7.linux-amd64.tar.gz`
- tar xvfz go1.12.7.linux-amd64.tar.gz
- sudo mv go /usr/local
- rm go1.12.7.linux-amd64.tar.gz
- 安装构建工具
- sudo apt update
- sudo apt install make
- sudo apt install build-essential
- 设置环境量
- 编辑~/.profile:vim ~/.profile
- export PATH=$PATH:/usr/local/go/bin在底部添加
- export GOPATH=/home/ubuntu/go在底部添加
- source ~/.profile
构建并安装s3插件
- git clone https://github.com/ipfs/go-ds-s3.git
- cd go-ds-s3
- 构建插件: make build
- 如果不针对最新版本的IPFS构建,请设置环境变量IPFS_VERSION = vXYZ
- 输出是 go-ds-s3.so
- 安装插件: make install
- 移动go-ds-s3.so到data/ipfs/plugins
配置ipfs以使用插件
- 编辑配置: vim /ipfs/data/config
- 在Datastore.Spec.mounts下应该有2个项目
- 将第一个替换为
“child”: {
“type”: “s3ds”,
“region”: “us-east-1”,
“bucket”: “$bucketname”,
“accessKey”: “”,
“secretKey”: “”
},
“mountpoint”: “/blocks”,
“prefix”: “s3.datastore”,
“type”: “measure”
}
- 确保将该区域和bucket设置为s3 bucket的区域和bucket名称
- 使用这里前面生成accessKey和secretKey
- 编辑datastore_spec以匹配新的数据存储
- vim /ipf/data/datastore_spec
- 改成:
- 再次确保该区域和bucket匹配实际的s3 bucket
- 重启ipfs: sudo systemctl重启ipfs
- 确保没有systemctl状态ipfs错误
检查点:
将文件上传到ipfs,然后检查s3以确保在其中添加了ipfs dag对象
例:
- 下载一些图片 wget https://fission.codes/assets/images/fission-1200×400.png
- 添加到ipfs ipfs add fission-1200×400.png
- 去检查s3并确保它具有ipfs对象
三、设置TLS +(安全)Websocket
安装 nginx
- sudo apt update
- sudo apt install nginx
- 检查状态: systemctl status nginx
- 应该看到类似
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2019-08-28 21:23:08 UTC; 32s ago
Docs: man:nginx(8)
Process: 31246 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCES
Process: 31234 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status
Main PID: 31248 (nginx)
Tasks: 3 (limit: 4915)
CGroup: /system.slice/nginx.service
├─31248 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
├─31251 nginx: worker process
└─31252 nginx: worker process
检查点:
$PUBLIC_DNS在浏览器中加载,您应该会看到nginx homepage
设置域+ TLS
- 将域名指向您实例的公共DNS
- 在我们的例子中是ipfs.runfission.com
- 将证书和密钥添加到 nginx
- 简易模式:
- 有一些工具可以帮助您解决这个问题。例如,请参见certbot。可以生成证书+自动创建nginx配置
- 手动:
- 导入密钥+证书到实例
- /etc/ssl/ipfs.runfission.com.key
- /etc/ssl/ipfs.runfission.com.pem
- 在/etc/nginx/site -available/default编辑nginx配置
- 从2台服务器开始
- 首先是一个简单的服务器,将http流量重定向到https
if ($host = ipfs.runfission.com) { return 301 https://$host$request_uri; } listen 80; listen [::]:80; server_name ipfs.runfission.com; return 404;
- 将https流量重定向443到ipfs网关,地址为8080
server_name ipfs.runfission.com;
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
ssl_certificate /etc/ssl/ipfs.runfission.com.pem; ssl_certificate_key /etc/ssl/ipfs.runfission.com.key;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
检查点:
加载
https://$DOMAIN_NAME/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv
您应该会看到通过https提供的ipfs文档。
添加安全的websocket
- 告诉ipfs在ws端口上监听
- 编辑 /data/ipfs/config
- 添加“/ip4/0.0.0.0/tcp/4002/ws”到Address.Swarm
- 推荐:通过设置Swarm.EnableRelayHop为允许中继跳true
- 重启ipfs sudo systemctl restart ipfs
- 使用Nginx设置安全代理
- 在以下位置编辑nginx配置 /etc/nging/sites-available/default
- 加:
server_name ipfs.runfission.com;
listen [::]:4003 ssl ipv6only=on;
listen 4003 ssl;
ssl_certificate /etc/ssl/ipfs.runfission.com.pem;
ssl_certificate_key /etc/ssl/ipfs.runfission.com.key;
location / { proxy_pass http://127.0.0.1:4002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
}
}
- 重新启动nginx sudo systemctl restart nginx
检查点:
转到websocket.org并测试您的连接wss://$DOMAIN_NAME:4003
真正的考验:
启动一个js ipfs节点(使用我们的awesome get ipfs包)并通过执行ipfs.swarm.connect或将multiaddr添加到节点引导列表来连接到/dns4/$domain_name/tcp/4003/wss/ipfs/$peer_ID。
请稍等(等待连接),打印对等方列表并确保包含托管节点:
setTimeout(async ()=> {
const peers = (await ipfs.swarm.peers()).map(p => p.peer._idB58String);
console.log(peers);
}, 1000)
—END—
本文由IPFS原力区编译,原文链接:https://talk.fission.codes/t/a-loosely-written-guide-to-hosting-an-ipfs-node-on-aws/234
【IPFS原力区】 价值观:价值 共建 共享 荣耀
总部位于上海,聚集基于分布式网络&存储的众多技术大咖和爱好者,深耕基于 IPFS 的商业生态建设和社区发展。
每周二举办“分布式存储网络”主题沙龙,聚集了众多技术大咖和 IPFS 爱好者,通过持续输出全面、精细、优质的 IPFS 咨询和技术支持,将生态中的爱好者转化为 IPFS 支持者和参与者,共建 IPFS 生态的健康发展。