本文由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
本指南包括3个部分:
设置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包含内容的文件
[Unit]
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
应该会看到
ipfs.service - ipfs daemon
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
改成:
{"mounts":[{"bucket":"$bucketname","mountpoint":"/blocks","region":"us-east-1","rootDirectory":""},{"mountpoint":"/","path":"datastore","type":"levelds"}],"type":"mount"}
再次确保该区域和bucket匹配实际的s3 bucket
重启ipfs: sudo systemctl重启ipfs
确保没有systemctl状态ipfs错误
检查点:
将文件上传到ipfs,然后检查s3以确保在其中添加了ipfs dag对象
例:
下载一些图片 wget https://fission.codes/assets/images/fission-1200x400.png
添加到ipfs ipfs add fission-1200x400.png
去检查s3并确保它具有ipfs对象
三、设置TLS +(安全)Websocket
安装 nginx
sudo apt update
sudo apt install nginx
检查状态: systemctl status nginx
应该看到类似
nginx.service - A high performance web server and a reverse proxy server
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
server {
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 {
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 {
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生态的健康发展。
![c5a482f26eb64de54dca6c2a689e820a.gif](https://i-blog.csdnimg.cn/blog_migrate/18abe202bb056b90258666f431e7b366.gif)