【ArcBlock Forge系列】11 - 搭建哈希快讯Dapp多应用节点

哈希快讯开启内容和开发合伙人计划,为ArcBlock生态助力。

1.内容合伙人
参与快讯和文章内容共同运营,共享平台收入:
发布者付费的25%给平台,25%给生态伙伴,50%给DApp参与者进行点赞/评论/分享挖矿。

2.开发合伙人
参与哈希快讯Dapp的新功能开发
(1)有意向的人可以关注哈希快讯开源项目,Fork项目进行更改,相关PR合并上线后一起成为Dapp所有者,共享Dapp收益;


(2)同时欢迎把哈希快讯进行硬分叉,进行独立运营,成为ArcBlock生态的一部分。

以下分享哈希快讯代码使用和多Dapp部署运行的方法。

1. 云服务器配置
(1)最低配置要求
1核CPU/2 GiB RAM/40GiB硬盘/1Mbps带宽,香港云服务器,安装Ubuntu 16.04 64位操作系统。

(2)安全组规则
入站规则开启SSH/RDP/FTP控制端口,开启HTTP/HTTPS/ChainNode/Dapp/P2P业务功能端口。

(3)远程访问工具推荐
SSH: Xshell
FTP: FlashFXP

2.服务器时区
输入以下命令进行确认时区
sudo date -R
如果不是东8区进行以下更改:
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
sudo date -R

3.依赖工具安装

根据ArcBlock官方文档安装相关依赖工具

安排配置完成后,SSH使用Forge账户登录

4.FTP安装

(1) sudo apt-get install vsftpd
(2) mkdir -p /home/ftp/public
(3) sudo chmod 777 -R /home/ftp
(4) sudo vim /etc/vsftpd.conf
local_enable=YES
local_root=/home/ftp/public
local_umask=022
write_enable=YES
(5) sudo service vsftpd restart
(6)sudo ps -e|grep ftpd

5.MongoDb安装

sudo apt-get install mongodb
或者使用以下方式安装指定版本的MongoDB(如v3.6.3)
(1) Stop MongoDB
sudo systemctl stop mongod
(2) Remove Packages
sudo apt-get purge mongodb-org*
(3) Remove Data Directories
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb
(4) Import the public key used by the package management system
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
(5)Create a list file for MongoDB
echo “deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.2 multiverse” | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
(6) Reload local package database
sudo apt-get update
(7) Install the MongoDB packages
sudo apt-get install -y mongodb-org=3.6.3 mongodb-org-server=3.6.3 mongodb-org-shell=3.6.3 mongodb-org-mongos=3.6.3 mongodb-org-tools=3.6.3
(8) Start MongoDB
sudo systemctl daemon-reload
sudo systemctl start mongod
(9) Auto Start
sudo systemctl enable mongod
(10) Verify that MongoDB has started successfully
sudo systemctl status mongod
参考:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/

开启授权登陆模式

(1)添加账户

mongo
use admin
db.createUser({user:“dapp_admin”,pwd:" 123456 ",roles:[{role:“root”,db:“admin”}]})
db.auth(‘dapp_admin’, ’ 123456 ')

备注:密码根据自己的需要进行更改

(2)用户操作

1)查看用户
show users

image

2)删除用户(可选)

db.dropUser(<user_name>)
db.dropAllUser()

(3)开启授权和外网访问

sudo vim /etc/mongodb.conf

  1. bind_ip = 127.0.0.1,<ifconfig 查看到的本地eth0 inet addr>
  2. 开启: auth = true

sudo systemctl restart mongod
sudo ps -e|grep mongo

(4)连接数据库

DAPP的.env文件的连接数据库使用上面的用户名和密码进行授权登陆

mongodb://dapp_admin: 123456 @127.0.0.1:27017/hashnews?authSource=admin

(5)可视化编辑工具

mongodb-compass-1.19.12-win32-x64

image

6.下载代码和配置

git clone https://github.com/helloabt/abtworld.git
代码下载完成后,编辑代码根目录的.env文件配置数据库、登录密钥、账户信息。

(1)数据库
MongoDB的用户名和密码根据前面步骤的设置进行更改

(2)登录密钥
运行该命令生成一个随机密钥: date|sha1sum

把生成的密钥写入APP_TOKEN_SECRET变量

(3)账户信息

使用forge wallet:create创建两个钱包账户

拷贝到合适的位置记录好,并填写到以下账户字段中。

APP_OWNER_ACCOUNT为Dapp的所有者账户,主要用于分成,填写你想接收分成的ABT钱包账户的地址就可以;

APP_ADMIN_ACCOUNTS为Dapp的管理账户,主要用于Dapp的内容管理,可以填写多人,默认可以填写APP_OWNER_ACCOUNT的地址。

账户都配置好以后,可以把配置好的账户在资产链和应用链上进行声明,由于声明一个账户需要消耗0.5 ABT,有两个账户需要在ABT资产链声明,需要消耗1ABT

(1)转账

使用ABT钱包往dapp_helper账户(z1Vcm4zxFZSyixyCGaaqXyLV3kLgwtoEvLg)转账1ABT

(2)声明

在源码根目录运行以下命令进行账户声明
node tools/initdb.js
node tools/declare.js

7.注册域名和配置安全连接
(1)注册域名
域名注册推荐易名中国和阿里云,首选易名中国
https://www.ename.net/
http://mi.aliyun.com/

(2)配置SSL安全连接
参考nginx/readme.txt的说明进行Nginx安装、配置、获取证书和启动
也可参考该文章:https://bihu.com/article/1545904728

8.运行哈希快讯
(1)准备运行环境
在源码根目录,运行
./env_setup.sh
安装一些必须的组件和JS组件的下载

(2)数据库同步
在源码根目录,运行以下命令进行初始数据库同步
node tools/initdb.js

在源码根目录,运行以下命令进行快讯和文章的内容同步
node tools/dapp_db_sync.js
如果是要同步更多Dapp的快讯和文章,增加其他Dapp的快讯账户,然后再运行同步。

(3)编译
在源码根目录运行以下命令进行代码编译
yarn build

(4)运行
在源码根目录运行一下命令运行哈希快讯
./start_abtworld_tbawool.sh

哈希快讯为了优化用户体验,链上的数据有缓冲到本地MongoDB数据库,另外评论内容没有上链,这部分可以使用MongoDb的工具进行管理。
(1)备份
cd mongodb
./mongodb_backup.sh

(2)还原
./mongodb_restore.sh

9.调试说明
上面的步骤是生产环境运行,不能调试,如果是要调试看log,使用以下方法
(1)结束后台正常跑的Dapp
killall /usr/bin/node

(2)开发模式运行
yarn dev

(3)后端的log可以在窗口直接看到

(4)前端的log可以在Chrome浏览器中查看
在Chrome浏览器页面,按住F12打开调试窗口,前端的log可以在Console页面打印。

2赞

开源牛逼。 :100:
非常详细的教程,

1赞

按教程好像是别人都可以下载安装各自的哈希快讯了。这是很多同一样的应用分别独立运行吧。

冒哥说的应用多节点运行时这个意思吗?

2赞

自己独立运行也可以,用不用的服务器和域名,不同dapp之间的数据通过链上同步。不过我更希望对于独立运行的Dapp,后端一样,前端根据自己的喜好和用户需求去更改,名字甚至可以不叫哈希快讯

1赞

一套数据,多套呈现。数据在链上,所以是去中心化的;如果有多套独立的呈现,呈现也是去中心化的

1赞

如果最终实现,由于数据均由链来存储,使用体验会优于零网,但是链的数据写入效率会不会成为Dapp的瓶颈。如果按Sharding方式将多条链当作“一条链”倒是个办法

1赞

如果数据写入太高频的话,性能确实会取决于应用链和资产链的TPS,在数据读取方面,需要使用本地缓存的方式,实时从链上获取数据效率低。

目前hash news 把TBA链作为存储是有风险的,因为TBA是测试链

3赞

了解,目前还没有自己的应用链,确实是个问题,之前仕军有提到是不是组建一个应用链联盟,有的话是完美。

1赞

这部分我们也在考虑最佳实践,到时候随时讨论。

建议在哈希快讯上实验一下开放经济协议。加入节点可以产生收益,初期ArcBlock可以固定赞助补贴,开放捐助,再加上内容分成如果达到节点成本可维持下去就好。另外节点根据加入时间长短可以有不同分成比例,这样即使节点暂时亏损只要看好项目也会继续运行。这些全部用只能合约实现。

我愿意给哈希快讯做一个节点

@z1etEMLkgYUugX9Jhzr8EgYxZD9V2x4SUJk 新人刚到hashnews,往往没有abt来发快讯,也极少有能力写出读者愿意付费的文章, 给其一定数量的免费发快讯的次数如何

1赞

嗯,这个我考虑下,其实新人点赞和回复别人的内容挖矿后也能发快讯

1赞

嗯,主要是单纯为得到abt而点赞评论,对整个生态没什么价值,且对于真正想发内容的新人,通过点赞评论攒够发快讯的钱,还是稍有门槛的(我自己的感受)

1赞

我也认为应该设置体验次数,让每个愿意留言的人都可以免费体验

1赞

建议把上面的教程进一步脚本化,做到只需要输入一条命令,剩下的全部都是选择或输入必要条件就可以了

1赞

建议不错,这个就是blocklet的方向

abt node支持全自动blocklet部署正在开发之中,届时节点主人可以一键就把blocklet部署起来。争取一个月内能让大家看到这种部署方式!

1赞

@z1etEMLkgYUugX9Jhzr8EgYxZD9V2x4SUJk 执行“node tools/dapp_db_sync.js”时遇到如下报错:
newsflashDappDbSync V3 assetChain err= { Error: Request failed with status code 502
at createError (/home/forge/abtworld/node_modules/axios/lib/core/createError.js:16:15)
at settle (/home/forge/abtworld/node_modules/axios/lib/core/settle.js:17:12)
at IncomingMessage.handleStreamEnd (/home/forge/abtworld/node_modules/axios/lib/adapters/http.js:236:11)
at IncomingMessage.emit (events.js:198:15)
at endReadableNT (_stream_readable.js:1139:12)
at processTicksAndRejections (internal/process/task_queues.js:81:17)