[符号]让我们尝试使用树莓派运行节点(Rest构建篇)
Raspberry PiでSymbolのdualノードを構築、ハーベスト設定、HTTPS化、運用まで。
本記事ではAPIノードとして必要なモジュールの構築、HTTPS化までを扱います。
Client構築編:Clientインストールまで
Client設定編:ハーベスト設定まで
Rest構築編:HTTPS化まで <- 今ここ
メンテナンス編:HA構成、アップグレードetc
(追記)4/11 Catapult-Restの起動方法を修正しました。
構築イメージ、ドキュメント
各モジュールの関係はこのような感じです。
版本資訊
弹射器-休息: 2.4.0
MongoDB: 4.4.8
※目前,每个版本的构建步骤和目录结构都在变化。如果不是此版本,可能会有不同的步骤,请谅解。
※已确认MongoDB在4.4.8版本上可以运行。目前已经有4.4.13版本。据记忆,不同的主版本5.x.x不能正常工作。
安装MongoDB
从deb软件包上安装或者通过其他方式安装最新版本的方法有很多,但是在上面的Symbol文档中写着“使用软件包管理器是不推荐的”这句话,我选择了从.tgz文件中安装。
apt install -y libcurl4 openssl liblzma5
我們只需要一個選擇,將下載並安裝MongoDB,非常簡單。
wget https://fastdl.mongodb.org/linux/mongodb-linux-aarch64-ubuntu2004-4.4.8.tgz
tar -zxvf mongodb-linux-aarch64-ubuntu2004-4.4.8.tgz
sudo cp <mongodb-install-directory>/bin/* /usr/local/bin/
请执行版本确认命令以确保操作正常。
mongo --version
确认数据库初始化和经纪人启动
我們創建資料庫的存儲位置。在客戶端設置頁面上,我們將刪除並重新創建由catapult.server操作的data目錄。
cd /<install-dir>/symbol/client/catapult/_build/
rm -rf data
mkdir dbfiles
mddir data
我会在后台运行MongoDB。
mongod --dbpath=dbfiles --wiredTigerCacheSizeGB 2 --bind_ip 127.0.0.1 --logpath /var/log/mongodb/mongod.log --fork
初期化スクリプトを実行します。
cd /<install-dir>/symbol/client/catapult/scripts/mongo/
mongo 127.0.0.1/catapult < ./mongoDbPrepare.js
我将试着运行catapult.broker。而catapult.server将在后台运行。
cd /<install-dir>/symbol/client/catapult/_build/bin
nohup ./catapult.server > /dev/null 2>&1 &
./catapult.broker ..
エラーで異常終了せず、走りつづけていれば成功です。
確認できたのでctrl-cで停止、catapult.serverとmongodbプロセスもkillします。
弹射器休息的建设
最新のnpm、node.js、yarnをインストールします。
githubのドキュメントはおそらくbootstrapで動作させることが背景になってると思いますが、Node.jsとyarnがあれば動作します。
bootstrapでの構築でもここらへんはインストールすると思うので割愛します。このサイトを参考にさせていただきました。最新版じゃないと動作しないのでnpmからインストールします。
Catapult-Rest位于 //symbol/catapult/client/rest/。然而,经常发现Catapult-Rest需要从GitHub获取指定版本的标签才能正常运行。因此,需要全部替换掉。
cd /<install-dir>/symbol/catapult/client/
rm -rf rest
git clone https://github.com/symbol/symbol.git -b rest/v2.4.0
cp -r ./symbol/client/rest ./
rm -rf symbol
执行安装依赖关系的脚本。
cd /<install-dir>/symbol/catapult/client/rest/
./yarn_setup.sh
因为需要花时间,所以喝咖啡时间。
设置文件位于//symbol/catapult/client/rest/rest/resouces/rest.json。您可以自定义每个参数,但建议复制上次在笔记本电脑上创建的优化参数,它们位于/bootstrap上的//symbol-bootstrap/target/gateways/rest-gateway/。
在这里列出需要编辑的路径等参数。”deployment”是与bootstrap相关的信息,您可以根据喜好输入相应的值。”apiNode”中的每个路径都只是示例。
...
"port": 3000,
"protocol": "HTTP",
"sslKeyPath": "",
"sslCertificatePath": "",
...
"apiNode": {
"host": "127.0.0.1",
"port": 7900,
"timeout": 1000,
"tlsClientCertificatePath": "/<install-dir>/symbol/client/catapult/_build/cert/node.crt.pem",
"tlsClientKeyPath": "/<install-dir>/symbol/client/catapult/_build/cert/node.key.pem",
"tlsCaCertificatePath": "/<install-dir>/symbol/client/catapult/_build/cert/ca.cert.pem",
"networkPropertyFilePath": "/<install-dir>/symbol/client/catapult/_build/resources/config-network.properties",
"nodePropertyFilePath": "/<install-dir>/symbol/client/catapult/_build/resources/config-node.properties"
},
...
"deployment": {
"deploymentTool": "manual",
"deploymentToolVersion": "manual",
"lastUpdatedDate": "yyyy-mm-dd"
}
}
在代码中(/…/rest/src/index.js)的路径与运行yarn start的目录不匹配,导致在运行时出现错误“找不到rest.json”。请将resources目录复制到//symbol/client/catapult/rest/下,或者将代码中的相对路径改为绝对路径。修改位置在第66行附近。
(补充)4/11在下面的代码中,将路径作为参数传入,并在为空时编码为“这个路径!”(请原谅)。不要修改代码,使用yarn start ./resources/rest.json来启动。此外,在启动确认部分,已更正为yarn start -> yarn start ./resources/rest.json。
...
const loadConfig = () => {
let configFiles = process.argv.slice(2);
if (0 === configFiles.length)
configFiles = ['/<install-dir>/symbol/client/rest/rest/resources/rest.json'];
...
双节点的启动确认
我们已经试验了catapult.server和catapult.broker的运作。catapult.server和catapult.broker一起协作运行。在初始启动后,最好在每次启动之前运行catapult.recovery。如果不进行恢复操作,则有时broker的启动可能会失败。
./catapult.recovery
启动双节点。运行catapult.server并在后台运行。如果需要持续运行,请使用nohup。由于catapult.server会产生大量输出,将其重定向到/dev/null。同时,将所有输出内容记录到bin/log/中。
cd /<install-dir>/symbol/client/catapult/_build/
mongod --dbpath=dbfiles --wiredTigerCacheSizeGB 2 --bind_ip 127.0.0.1 --logpath /var/log/mongodb/mongod.log --fork
cd /home/ubuntu/symbol/client/catapult/_build/bin
nohup ./catapult.server > /dev/null 2>&1 &
nohup ./catapult.broker .. &
cd /<install-dir>/symbol/client/rest/rest/
yarn start ./resouces/rest.json
如果在http://<ホスト>:3000/chain/info/上的同步已经进行得很顺利,那就是成功了。
启动方法会很麻烦吗?
我认为使用systemd将其作为守护进程是可行的。对我而言,catapult.server和catapult.broker只会在进行升级时停止,所以我只是通过nohup &来运行它们,而将catapult-rest使用守护进程工具forever来运行。
使用HTTPS
有许多方法可供选择。像在bootstrap中一样使用代理服务器是个不错的选择。据说Catapult-Rest现已支持HTTPS,所以我决定使用它而不引入其他工具。
首先,让我们从Let’s Encrypt获得证书。
apt install certbot
certbot certonly --standalone
我们将通过对话方式进行领域和管理邮件地址的注册,并获取证书。
复制整个 “rest” 目录。
cd /<install-dir>/symbol/client/
cp -r rest/ ./rest-https
将rest.json文件编辑为使用https。
...
"port": 3001,
"protocol": "HTTPS",
"sslKeyPath": "/etc/letsencrypt/live/<domain-name>/privkey.pem",
"sslCertificatePath": "/etc/letsencrypt/live/<domain-name>/fullchain.pem",
...
如果能像上面那样通过运行”yarn start”并从浏览器中通过”https://<主机>:3001/chain/info”获取信息,就算成功。
只需在cron中重启certbot和https端的Catapult-Rest,即可更新证书,详细操作请参考维护部分的说明。