如果您已经注册了一个不错的ens名称,并希望通过ipfs和以太坊名称服务使您的站点/dapp可用。要使其成为部署脚本的无缝部分,需要执行几个步骤。
在我们开始之前。..
在本指南中,我假设您已经了解如何使用ipfs和ens托管网站的基础知识。重点在于部署自动化和调整ci工作流程。 如果您不熟悉ens和ipfs,可能会出现一些问号:)
node.js版本:在编写本文时,不能将ens-updater安装在12.x或更高版本的节点上,因为某些依赖项需要脚本模块,该脚本模块无法构建。 在https://github.com/triplespeeder/ens-updater/issues/44中跟踪了此问题。 在问题解决之前,请使用节点版本10或更低版本。
要完成的任务
部署分布式的站点需要两个步骤:
1. 将内容发布到ipfs,获取新的cid。
2. 将ens名称的ipfs记录设置为指向新的cid。
对于这两个步骤,都可以使用命令行工具。 首先我们将详细研究每个步骤,然后创建一个travis配置,该配置将完全自动化部署。
第1步-发布到ipfs
对于此任务,我们将使用cli工具ipfs-deploy。 通过npm全局安装:
》 npm install -g ipfs-deploy
这个工具真的很简单。 您只需要提供要部署的构建文件夹,然后选择要使用的ipfs固定服务即可。
假设应用的生产版本位于文件夹版本中,则可以运行以下命令以通过公用的infura ipfs节点进行部署:
》 ipfs-deploy build -p infura
注意ipfs-deploy提供的cid字符串qm…。 这是构建的唯一标识符,需要将其添加到ens名称中。
ipfs部署支持许多不同的ipfspinning服务,其中一些需要身份验证。
这就是第一步的全部内容-您的构建现已发布!
步骤2 —设置您的ens名称的contenthash记录
对于此步骤,我们将使用cli工具ens-updater。通过npm全局安装:
》 npm install -g @triplespeeder/ens-updater
ens-updater支持许多不同的命令来管理您的ens名称。对于本教程,我们只希望设置名称的contenthash条目,使其指向您在步骤1中获得的cid。请检查ens-updater --help的输出,以获取受支持命令的概述以及github页面的内容。
由于我们需要与ens智能合约进行交互以更新contenthash条目,因此我们需要做两件事:
1. 访问以太坊节点以与智能合约进行交互。
2. 控制ens名称的帐户的私钥。
您可以直接或通过助记符字符串(和可选的帐户索引)间接提供私钥。对于这两个选项,您都需要将信息放入.env文件中或设置环境变量。
对于本教程,我们将私钥保存在.env文件中。 打开您选择的文本编辑器,并在工作目录中创建文件.env:
private_key=《private key here, without leading 0x》
为确保所有设置均正确,请使用--dry-run选项调用ens-updater。 设置此选项后,将不会执行任何实际交易,但将报告潜在的配置或设置问题。
示例:在空运行模式下,将ens名称mysite.eth的内容哈希记录设置为ipfs cid qmd2yehmtswlppdkwnjemh4wwageufxyemhsn4vcjmcvky的完整命令:
》 ens-updater setcontenthash mysite.eth ipfs-ns
qmd2yehmtswlppdkwnjemh4wwageufxyemhsn4vcjmcvky --web3
http://localhost:8545 --verbose --dry-run
检查结果输出以查看是否报告了任何错误。否则,您最好不用— dry-run继续!
现在将浏览器指向http://mysite.eth。假设您的系统设置正确,可以与.eth域一起使用,那么您应该会看到您的网站正在运行!
这就是第2步的全部操作-现在可以通过您的ens名称访问您的网站!继续阅读以设置travis进行自动部署。
将它们放在一起进行全自动部署
要使用travis自动执行上述步骤,我们需要:
1. 创建一个结合了ipfs-deploy和ens-updater的部署脚本,由travis在部署阶段执行。
2. 设置travis以执行部署脚本。
3. 为travis设置环境变量,以便ens-updater可以访问私钥。
部署脚本
由于ipfs-deploy通过stdout提供了cid,并且可以将ens-updater设置为从stdin中读取cid,因此我们可以将这两个命令用pipe连接在一个小型shell脚本中,如下所示:
#!/bin/bash
ipfs-deploy build -p $1 -c -o |
ens-updater setcontenthash mysite.eth ipfs-ns stdin -v --web3 $2
该脚本希望将pinner服务用于部署作为第一个参数,并将web3连接字符串用作第二个参数。 另外,请注意,通过将特殊字符串“ stdin”指定为ens-updater的cid,它知道从stdin中读取cid。
将此脚本添加到您的项目中,使其成为存储库的一部分并可供travis使用。
travis配置
现在编辑travis.yaml以在部署阶段执行脚本。这是一个真实项目中的(精简后的)样本配置,其中强调了重要的部分:
os: linux
language: node_js
node_js: 10
jobs:
include:
- name: “ipfs”
install:
- npm ci
- npm install -g ipfs-deploy
- npm install -g @triplespeeder/ens-updater
script: npm run build
deploy:
provider: script
script: bash scripts/deploy_ipfs.sh pinata https://mainnet.infura.io/v3/$infura_id
skip_cleanup: true
安装阶段包含用于安装工具ipfs-deploy和ens-updater的其他命令。
部署阶段使用ipfs pinner服务“ pinata”和来自infura的web3实例执行我们刚刚创建的部署脚本。 不要忘记skip_cleanup选项-否则,travis将在开始部署之前清除build文件夹。..
最后缺少的部分是提供ens名称控制器帐户的私钥。让我们进行设置!
1. 转到travis中的项目页面
2. 打开设置页面
3. 转到“environment variables”部分
添加一个名称为“ private_key”的新环境变量,并将您的私钥粘贴到value字段中。将branch字段设置为您的master分支,因为部署将仅从master分支运行。确保不要选中“display value in build log”-否则任何人都可以在构建日志中看到您的私钥。
就我而言,我还为pinata ipfs服务和infura web3服务添加了环境变量,并为可选部署到github页面添加了github令牌。 这是完整设置的屏幕截图:
在这些更改就位后,触发新的生成。如果一切顺利,您的构建日志将像这样结束:
就是这样!每当您将更新推送到主分支时,所做的更改都将部署到ipfs,并且ens名称的contenthash记录也将更新。
ATM智能视频监控系统的应用及发展
旧金山禁用人脸识别技术 是对科技与隐私安全的抗衡
芯驰科技与瞰瞰智能共同打造平台级车载影像解决方案
你还在羡慕Mate9EMUI5.0和Android7.0?
浅析linux内存映射原理
IPFS和以太坊ENS可以自动发布网站吗
使用 MEMS 射频开关解决高级无线应用的设计和集成问题
高端封装基板供应商芯爱科技完成新一轮融资
充气柜产生泄露的关键缘故
EDA行业市场剧变即将开始
华擎AM4 B450系列主板BIOS更新:支持Ryzen5000处理器
TI DSP为啥连接不上?JTAG接口无法连接的问题
QT原生的QJson是否有更优雅的方法来封装一些Json对象
荣耀10青春版已经成为时下跨国界联合营销的热门产品
AT&T计划在美国农村地区使用3.5 GHz频段推出高速无线家庭互联网
从“芯”出发!且看如何从硬件设计的角度破解智能穿戴的需求痛点?
μPC2002 9W音频功率放大电路
AI踏足无人机,问题重重代价巨大?
即刻金服:四大OS再次升级?苹果公布WWDC 19时间:6 月 3 日圣何塞见
哪个国家将成为人工智能的领跑者?