symbol-bootstrapのPeerにlight-restを付ける
まだ docker イメージが作成されていないので、直接 light-rest をインストールします。
お試しでやってみたい方以外は、バージョンアップを待った方が良いと思います。
環境
- Ubuntu 24.04
- Docker 27.4.1
- Node.js 20.18.1
- symbol-bootstrap 1.1.11
docker
docker のインストールが終わっている場合はスキップ。
docker の apt リポジトリ追加
GPG キーの追加。
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
リポジトリ追加。
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
docker のインストール
docker パッケージをインストール。
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-compose
docker を使用するユーザーにdocker
グループを追加。
sudo usermod -aG docker ユーザー名
Node.js のインストール
Node.js のインストールが終わっている場合はスキップ。
Node.js のバージョン管理ができる Volta 経由でインストールします。light-rest が v20 を要求するようなので、v20 をインストールします。
sudo curl https://get.volta.sh | bash
exec $SHELL -l
volta install node@20
symbol-bootstrap
symbol-bootstrap のインストールが終わっている場合でも、カスタムプリセットにtrustedHosts
とlocalNetworks
の設定が必要です。
symbol-bootstrap のインストール
任意の場所にクローンします。
git clone https://github.com/symbol/symbol-bootstrap.git
cd symbol-bootstrap
npm パッケージをインストールしてビルド。
npm i
npm run build
symbol-bootstrap をグローバルインストール。
npm install -g .
ノードのセットアップ
ノードのワーキングディレクトリ作成
ノードデータを格納するディレクトリを作成します。場所はどこでも良いです。
sudo mkdir /opt/symbol-node
sudo chown ユーザー名: /opt/symbol-node
cd /opt/symbol-node
カスタムプリセットの作成
カスタムプリセットを設定します。
ハーベストの設定とホストの設定は、各自変更してください。
trustedHosts
に172.20.0.1
を追加して、/node/unlockedaccount
を使用できるようにします。
また、localNetworks
にも172.20.0.1
を追加して、ホスト側をコンテナのローカルと判断させます。これにより、light-rest がtarget/nodes/node/cert
にある証明書を使用できるようになります。
vi custom-preset.yml
maxUnlockedAccounts: 100
delegatePrioritizationPolicy: Age
beneficiaryAddress: 報酬を受け取るアドレス
nodes:
- host: ホスト名
friendlyName: フレンドリー名
voting: false
maxChainBytesPerSyncAttempt: 10MB
blockDisruptorMaxMemorySize: 1000MB
trustedHosts: 127.0.0.1, 172.20.0.1
localNetworks: 127.0.0.1, 172.20.0.1
ノード設定の生成と docker compose の生成
ノードのメインキーなどの暗号化用のパスワードの設定があるので、任意のパスワードを設定してください(忘れないようメモを取っておいて下さい)。
symbol-bootstrap config -p mainnet -a peer -c custom-preset.yml --upgrade
symbol-bootstrap compose --upgrade
ポート開放
ノード間通信の 7900 と light-rest の 3000 を開けます。
sudo ufw allow 7900
sudo ufw allow 3000
ノードの起動
以下のコマンドでノードを起動します。
symbol-bootstrap run -d
なお、メンテナンス等で停止したい場合は、stop
でノードを停止します。
symbol-bootstrap stop
light-rest
light-rest のインストール
symbol のクローンと light-rest のコピー
任意の場所にクローンします。
まだ、dev
にマージされていないので、client/light-rest
ブランチを指定してクローンします。
git clone https://github.com/symbol/symbol.git -b client/light-rest
rest をノードディレクトリにコピーします。
target ディレクトリに入れるのが良いとは思いますが、target ディレクトリを消すこともあるので外に置いてます。
cp -r symbol/client/rest /opt/symbol-node
cd /opt/symbol-node/rest
light-rest の設定変更
vi resources/rest.light.json
{
"network": {
- "name": "testnet",
- "description": "catapult public test network"
+ "name": "mainnet",
+ "description": "catapult public main network"
},
"port": 3000,
- "protocol": "HTTPS",
+ "protocol": "HTTP",
"sslKeyPath": "",
"sslCertificatePath": "",
"crossDomain": {
"allowedHosts": ["*"],
"allowedMethods": ["GET"]
},
"apiNode": {
"host": "127.0.0.1",
"port": 7900,
"timeout": 1000,
- "tlsClientCertificatePath": "/",
- "tlsClientKeyPath": "/",
- "tlsCaCertificatePath": "/"
+ "tlsClientCertificatePath": "../target/nodes/node/cert/node.crt.pem",
+ "tlsClientKeyPath": "../target/nodes/node/cert/node.key.pem",
+ "tlsCaCertificatePath": "../target/nodes/node/cert/ca.cert.pem"
},
"throttling": {
"burst": 20,
"rate": 5
},
"logging": {
"console": {
"formats": ["colorize", "simple"],
"level": "verbose",
"handleExceptions": true
},
"file": {
"formats": ["prettyPrint"],
"level": "verbose",
"handleExceptions": true,
"filename": "catapult-rest.log",
"maxsize": 20971520,
"maxFiles": 100
}
},
"deployment": {
"deploymentTool": "",
"deploymentToolVersion": "",
"lastUpdatedDate": ""
}
}
依存 npm パッケージをインストール
npm i
light-rest の確認
light-rest を一旦起動します。
npm run start-light resources/rest.light.json
もう一つコンソールを立ち上げて rest が正常に動作しているか確認します。
curl -s http://127.0.0.1:3000/chain/info | jq
curl -s http://127.0.0.1:3000/node/info | jq
curl -s http://127.0.0.1:3000/node/peers | jq
curl -s http://127.0.0.1:3000/node/server | jq
curl -s http://127.0.0.1:3000/node/unlockedaccount | jq
正常に動作していることが確認出来たら、Ctrl + C
で light-rest を終了します。
サービス化
Light Rest Gateway サービス
sudo vi /etc/systemd/system/symbol-light-rest.service
[Unit]
Description=Symbol Light Rest Gateway
Requires=network.target
BindsTo=symbol.service
[Service]
Type=idle
ExecStart=/home/ユーザー名/.volta/bin/npm run start-light resources/rest.light.json
User=ユーザー名
Group=ユーザー名
WorkingDirectory=/opt/symbol-node/rest
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
symbol-bootstrap サービス
sudo vi /etc/systemd/system/symbol.service
[Unit]
Description=Symbol Node
Requires=network.target symbol-light-rest.service
PartOf=symbol-light-rest.service
[Service]
Type=idle
ExecStart=/home/ユーザー名/.volta/bin/symbol-bootstrap run -d
ExecStopPost=/home/ユーザー名/.volta/bin/symbol-bootstrap stop
TimeoutStopSec=300
User=ユーザー名
Group=ユーザー名
WorkingDirectory=/opt/symbol-node
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
サービスをリロード
sudo systemctl daemon-reload
Symbol ノード起動と停止
Symbol ノード起動
sudo systemctl start symbol
依存関係を設定しているので、これだけで Symbol Peer ノードと light-rest が起動します。
Symbol ノード停止
sudo systemctl stop symbol
Symbol Peer ノードと同時に light-rest も停止します。
Discussion