aws s3 獲取所有文件_操作指南 | 在AWS上托管IPFS节点

本文提供在AWS S3上托管IPFS节点的详细步骤,包括设置IPFS节点、配置S3数据存储和启用TLS安全Websocket。通过这个指南,你可以学习如何在AWS EC2实例上安装IPFS,将S3作为数据存储,并设置HTTPS和安全Websocket连接。
摘要由CSDN通过智能技术生成

777dbd7d8c7d79cc5fc878d4eb2d2d0b.gif

本文由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

32ac910223b180ba7da02906d0cce032.png

【IPFS原力区】

价值观:价值 共建 共享 荣耀

总部位于上海,聚集基于分布式网络&存储的众多技术大咖和爱好者,深耕基于 IPFS 的商业生态建设和社区发展。

每周二举办“分布式存储网络”主题沙龙,聚集了众多技术大咖和 IPFS 爱好者,通过持续输出全面、精细、优质的IPFS咨询和技术支持,将生态中的爱好者转化为IPFS支持者和参与者,共建IPFS生态的健康发展。

98454e058d0ed5a9f69104d8da4af177.png

c5a482f26eb64de54dca6c2a689e820a.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值