区块广播:

操作指南 | 在AWS上托管IPFS节点

IPFS原力区版主发布在 技术交流
 1982  0

本文由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-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
应该看到类似
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 生态的健康发展。

  • 正序
  • 最新
沙发,很寂寞......
登录 账号发表你的看法,还没有账号?立即免费 注册
帖子数 294 获赞数 3
总部位于上海,深耕 IPFS / Filecoin 社区发展与商业生态建设。秉持价值、共建、共享、荣耀的文化理念,以分布式存储服务成为行业的基石为使命,构建和成为Web 3.0 的基础设施。
推荐节点
热帖榜
热门跟帖