[高能]部署静态站到区块链上

本文涉及一些互联网和区块链的知识,阅读一点点门槛。

最近一个多月进入区块链行业,学到了非常多的知识,开阔了视野,看到了新的世界,今天给大家分享一个基于区块链的新玩法。

过去我们要开发-部署-运营一个网站,你需要写代码、买域名、域名备案、买服务器(租云服务器)、配服务器环境、买服务器带宽、买cdn服务、部署运维。这其中最主要的是,你得有自己的服务器,并为此花费各种成本。然后你还要管理你的服务器,保证服务器一直稳定运行。

先说我现在用区块链做到的事情,流程是这样的:

1、在阿里云注册一个域名,只要实名认证(1分钟),不需要备案。

2、配置一下DNS和域名解析(添加一条cname记录和一条txt记录)。

3、github配置workflows。

4、github提交代码(稍等一会,就上线了。以后更新网站就重复这一步)。

是不是特别简单,首次创建网站时,需要注册域名、解析域名、配置workflows,以后就只需要提交代码。除了注册域名没有任何收费成本,不需要关注服务器运维,因为我们代码是部署到区块链上的。

这是我部署的一个小站点,上面就只有两个给我孩子定制的学习工具(做这两个小工具是因为周未和学校老师沟通后,根据老师反馈的教学计划和孩子自己的学习情况,针对她的弱点定制的,不一定适合其它孩子。如果你的孩子也有类似的需求,也可能试试这两个工具)。

链接(微信不能加外部链接,可以复制到浏览器打开):https://c01.link

或者长按二维码打开

图片

废话说完了,下面开始详情说一下从头到尾怎么做。

第一步:Github新建项目

Github链接:https://github.com

Github是世界上最大的开源代码托管平台,如果你是开发者,一定对它很熟悉。现在登录你的Github(确实没用过的话,那先注册一个账号),然后创建一个新项目。

接下来把项目clone到本地,开发功能(注意项目必须是纯静态的,不能有后端代码,如果确实需要后端服务,可以另起一个api项目部署到传统的服务器上,跨域调用)。现在我们通常会使用React或vue框架来开发一个纯静态的网站。功能在本地测试完毕后,push到github远端仓库。

第二步:注册域名

阿里云域名注册链接:https://wanwang.aliyun.com

在阿里云选一个自己喜欢的域名,然后注册支付(当然你要提前注册登录阿里云系统)。

如果你的阿里云账号是新注册的,或者之前没有实名认证,那么现在你要做实名认证(不用找链接,注册域名后阿里云会主动提醒你实名认证的)。实名认证只需要上传身份证电子版照片,网站上说的是1天左右完成实名认证,实际上我等了半小时左右就实名认证通过了。如果不做实名认证,是不能解析域名的,这个是国家政策,不是阿里云政策。

阿里云实名认证通过后,还需要等待认证结果同步到注册局,按网站上说的也需要2天左右,我自己等了两天后查询确实已经通过了,有没有提前完成我也不知道。

要查询域名实名认证是否已经同步到注册局,可以查询域名的whois,比如下面这个阿里云的链接(把最后的域名换成你自己的)

https://whois.aliyun.com/whois/domain/c01.link

图片

每次查询记得点“获取最新信息”,不然看到的可能是缓存,不是最新的数据。

只要这里看到域名状态是“正常状态(ok)”,就说明域名通过了注册局的实名认证,现在可以解析了。

在阿里云注册域名后,默认给域名配置的DNS是阿里云的两个dns服务,现在我们要修改它,把DNS换成cloudflare的。为什么这么做呢?因为用阿里云的DNS,如果你的域名要想在国内访问,就需要备案(备案还是挺麻烦的)。而cloudflare是美国的CDN服务商,也是全球最大的,我们用它的DNS,然后也在它这里配置域名的解析。

下面换DNS:

打开阿里云的域名列表页面 https://dc.console.aliyun.com/next/index

图片

点域名右侧的“管理”,进入管理页面,然后点DNS修改。

图片

然后点右上角的“修改DNS服务器”,新添加两个DNS域名,分别为:

felipe.ns.cloudflare.com
arushi.ns.cloudflare.com

然后把原有的阿里云的删除掉,保存、同步。

等几分钟,再去whois上查看一下最下面的dns服务器信息,如果DNS1和DNS2都变成了cloudflare的这两个,就说明dns修改生效了。

到此阿里云的操作就全部完成了。

第三步:注册Pinata

用Pinata干什么?需要先说一下IPFS。

图片

IPFS是一个去中心化的文件存储系统,也是一个P2P的网络,我们可以通过IPFS节点上传文件到IPFS网络,每个文件在IPFS上都用一个唯一的Hash标识,这个Hash是根据文件的内容计算出来的,文件内容变更后,再次上传,Hash就变了,就算是一个新文件了。简单点说,就是文件只能上传,不能修改,如果内容有变动,需要重新上传一个新的文件。

那传到IPFS网络上的文件应该怎么访问呢?原始的方法是通过IPFS客户端节点,也就是你在自己电脑上安装一个IFPS的软件,通过在这个软件中,输入Hash来查看对应的文件。

另一种方法是,通过IPFS网关。一个IPFS的网关就是一个http的服务,是在中心化的服务器上部署IPFS节点,然后再通过http的方式对外提供文件访问服务。

任何人都可以自己部署IFPS的网关,所以互联网上有很多IPFS的网关,比如官方的网关地址:

https://ipfs.io/ipfs/QmV7EhhF5am18Yg8Gao1RruLLSb6cuo6LbJCYJ4J7BR8Wi/

Pinata的IPFS网关地址:

https://gateway.pinata.cloud/ipfs/QmV7EhhF5am18Yg8Gao1RruLLSb6cuo6LbJCYJ4J7BR8Wi/

上面这两个地址后面的Hash字符串,就是要查看文件的Hash。

那为什么要用Pinata呢?因为IPFS的网络是去中心化的,整个网络的节点是不受控的,所以你的文件上传到网络后,有可能只同步到很少的活节点,或者同步时间很慢,访问速度很慢。Pinata就是解决这个性能问题的。

Pinata是一个商业公司的产品,它自己维护一个可控的IPFS子网络,所以你通过它上传的文件,可以很快同步它自己的子网络节点,并且保证节点一直在线。所以用Pinata可以保证文件同步的速度和访问速度,还有高可用性。

Pinta这么做对它有什么好处?因为它对大客户是收费的,如果你的文件总量在1Gb以内,就是免费的,否则就需要付费。

当然除了Pinata,还有其它和它类似的商业产品,都大同小异。

介绍完Pinata,正式说一下怎么用。

网站地址:https://pinata.cloud/

因为这个网站是国外的,所以注册时尽量用国外主流的邮箱地址,我是QQ邮箱地址注册是不行的,用Gmail可以,建议大家直接用Gmail或Hotmail注册。

注册完登录上后,可以在顶部导航中找Pinata Upload试试手动上传文件或文件夹,然后在Pinata Explorer在查看文件。

接下来做正经事,创建API Key

图片

如上图,点右上角的头像 -> API Keys。

然后点“New API Key”,创建一个API Key。

图片

如上图,把Admin Key的开关打开,代表给这个key授予所有权限。下面的key name 随便填。

创建完后,下面的列表中就有一条记录了,把key记下,一会要用。

到此,Pinata的操作全部完成了。

第四步:注册cloudflare

cloudflare是一家美国的CDN运营商,是全球最大的CDN,在全球各地都有很多节点,包括国内。这可以让我们的用户更快的访问我们的网站。

并且最重要的是另外两个问题:

1、用网关访问我们的文件时,URL地址总是带着文件的Hash,首先文件内容更新后,地址就变了,其次太长不好看。

2、不管用哪个网关,域名都是别人的,怎么使用我们自己的域名。

cloudflare可以解决这两个问题,实际上cloudflare也提供了IPFS的网关。对于第一个问题,cloudflare支持一种叫DnsLink的功能,可以把一个域名绑定到一个指定的IPFS地址上,这样就能做到用户访问我们的域名,看到指定的文件,url上不需要带Hash了。当文件更新后,我们只需要重新配置DnsLink指向的Hash值,用户访问域名就能看到更新后的内容。

这里特别说明一下,IPFS上传一个目录,这个目录就会对应一个Hash,通过这个Hash加相对路径和文件名,可以访问到目录里相应的文件。

对于第二个问题,cloudflare可以配置域名解析,我们可以配置cname记录把自己的域名映射到cloudflare的IPFS网关。

cloudflare域名:https://cloudflare.com

下面说一下具体怎么做:

首先注册登录cloudflare,也是尽量用gmail或hotmail。

然后在cloudflare添加站点,链接https://dash.cloudflare.com/

添加完站点是这样的

图片

点击进去,配置DNS

图片

在DNS这里我们添加4条记录,2个CNAME,2个TXT。

上面第2行CNAME是把c01.link这个域名映射到www.cloudflare-ipfs.com。

第3行CNAME是把www.c01.link这个域名映射到www.cloudflare-ipfs.com。

这里的名称,如果要设置主域名,就直接写主域名,例如c01.link。如果要设置二级域名,例如www.c01.link,就只写www。

第4行TXT是添加一个dnslink映射,把主域名c01.link的访问映射到内容dnslink=后面的IPFS路径上。
第1行TXT也是添加一个dnslink映射,把二级域名www.c01.llink的访问映射到内容dnslink=后面的IPFS路径上。

这里的名称,如果要设置主域名,就直接写_dnslink。如果要设置二级域名,例如www.c01.link,就写_dnslink.www。

注意:TTL选择2分钟,就是保存完2分钟左右能生效,这是最快的了。

现在cloudflare的操作也都完成了,你可以访问你的域名,应该可以看到对应的文件了。

第五步:配置Github的workflows

经过前面的几步操作,功能我们已经可以实现了,但是Pinata上传文件和cloudflare域名映射都需要手动操作,还是挺麻烦的。这一步我们通过Github的workflows,来做自动化部署。

第一步的时候,我们已经在Github上创建了自己的项目,并提交了功能完备的代码。现在打开本地项目代码,在/.github目录中创建一个workflows目录,在这个目录下创建一个release.yaml。workflows目录是Github专门存放自动化任务的目录,这个目录里的所有*.yaml文件都会被Github自动扫描并执行。注意文件名随便写,但扩展名必须是.yaml。关于yaml的语法规则请自行google,这里就不专门介绍了。

我这里配置的yaml主要流程是,当push代码时,执行这个workflow。具体的任务流是:

1、给代码仓库创建一个新的tag。

2、在一个ubuntu的docker环境中checkout刚才新创建的tag。

3、安装项目的npm依赖,build项目。

4、把build生成的制品通过Pinata上传到IPFS网络。

5、更新cloudflare的dnslink记录,把我们的域名映射到最新在IPFS上生成的Hash。

有了上面这个自动化任务流,当我们提交完代码后,Github就开始自动执行命令,稍等片刻,你访问自己的域名,就能看到最新的代码了,并且这还有CDN的加速,速度很快的。

上面yaml配置中,最后两步需要一些参数,这里重点说一下。

第4步上传Pinata的任务,代码如下:

- name: Pin to IPFS id: upload uses: anantaramdas/ipfs-pinata-deploy-action@39bbda1ce1fe24c69c6f57861b8038278d53688d with: pin-name: demo ${{ needs.bump_version.outputs.new_tag }} path: './dist' pinata-api-key: ${{ secrets.PINATA_API_KEY }} pinata-secret-api-key: ${{ secrets.PINATA_API_SECRET_KEY }}

with这里是4个参数:

pin-name是指你上传到Pinata的这次提交,给它一个名字,可以随便写。

实际上它会出现在Pinata的这里(表格的Name列),如下图

图片

path是你要把哪个目录上传到Pinata,相对目录是你的项目根目录

pinata-api-key和pinata-secret-api-key是你在Pinata创建的API Key,如下图。在这里创建https://pinata.cloud/keys

图片

由于这些key代表你Pinata账号的授权,所以最好不要明文写到yaml里,我们把它们配置到github的Actions secrets里,然后在yaml里引用系统常量,如下图:

图片

然后第5步cloudflare的配置同理,代码如下:

- name: Update DNS with new IPFS hash env: CLOUDFLARE_TOKEN: ${{ secrets.CLOUDFLARE_TOKEN }} RECORD_DOMAIN: 'c01.link' RECORD_NAME: '_dnslink' CLOUDFLARE_ZONE_ID: ${{ secrets.CLOUDFLARE_TOKEN_ZONE_ID }} uses: textileio/cloudflare-update-dnslink@master with: cid: ${{ steps.upload.outputs.hash }}

env这里需要4个参数

RECORD_DOMAIN是你要更新的域名,对应cloudflare添加的CNAME记录

RECORD_NAME是域名对应的dnslink名称,对应cloudflare添加的TXT记录

CLOUDFLARE_TOKEN在cloudflare创建的API令牌,在这里创建:

https://dash.cloudflare.com/profile/api-tokens

如下图

图片

“创建令牌” -> 选择“编辑区域DNS”

图片

图片

最后一个图里的内容一定要记下来,页面关了就再也看不到了。

上面那个字符串就是CLOUDFLARE_TOKEN的值。

CLOUDFLARE_ZONE_ID是cloudflare的区域ID,其实也就是cloudflare中你这个域名对应的ID,在域名管理页面右下侧可以查看。

链接:https://dash.cloudflare.com/

进去找到域名,点击进去就是域名管理页面。

图片

图片

这里的CLOUDFLARE_TOKEN和CLOUDFLARE_ZONE_ID也是非常重要的私密信息,不要明文写到yaml里,和Pinata的api key一样,也配置到github的Actions secrets里。

Github Workflows配置到此全部完成。

我示例项目的github地址:https://github.com/cuidingfeng/dapp-demo

欢迎Star。

第六步:提交代码

现在你可以在本地修改你的代码,然后push到github远端仓库。

如果你想看看现在github是如何自动部署的,可以打开Github的Actions,点击最上面的那条result,就能看到它正在按yaml定义的流程,依次执行命令,完成部署。

当你看到部署成功的状态时,访问你的域名,就看到最新的代码效果了。

感谢你耐心看完了这么长的一篇文章

恭喜你,现在可以在区块链上部署自己的静态站点了。

原文链接:https://blog.csdn.net/cuidingfeng/article/details/112465527?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165918471416781818737407%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165918471416781818737407&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-7-112465527-null-null.nonecase&utm_term=%E5%85%8D%E5%A4%87%E6%A1%88cdn

原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/1189

(0)
上一篇 2022年7月30日
下一篇 2022年7月30日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

优速盾注册领取大礼包www.cdnb.net
/sitemap.xml