13
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

nem / symbolAdvent Calendar 2022

Day 10

プライベートチェーンを建てる その2 Symbolエクスプローラー構築編

Last updated at Posted at 2022-12-09

はじめに

この記事はSymbolブロックチェーンでプライベートチェーンを構築するシリーズのその2です。
プライベートチェーンの構築は公式ドキュメントにも記載されています。
公式ドキュメントを参考にすると、Symbol-bootstrapを使用してプライベートテストネットを建てることができます。
ただ、公式ドキュメントではノードの構築の方法は紹介されていますが、エクスプローラーなどの周辺ツールの整備がされていません。

プライベートチェーンのノードを建ててもエクスプローラーやウォレットが使えないと色々と不便なのでそのあたりの構築方法をこのシリーズでご紹介できればと思います。

シリーズ紹介

その1 statistics-service構築編
  • 記事はこちら
  • 統計サービスです。エクスプローラーを正常に動かすために必要です。
  • ネットワークのノードから定期的に情報を収集し、ノードの総数、正常性、地理的分布などを生成・提供してくれます。
その2 Symbolエクスプローラー構築編(この記事です)
  • ブロックチェーンのコンテンツを閲覧するための読み取り専用の Web アプリケーションです。
  • エクスプローラーは、特定のネットワーク上のトランザクション、アカウント、名前空間、モザイク、およびブロック情報の検索をサポートしています。
その3 プライベートチェーン構築編
  • プライベートチェーンを構築します。
  • ここではより実践的にSymbol-bootstrap組み込みのプライベートテストネットではなくあるツールを使って1から設定ファイルを作成します。
その4 Symbolウォレット(デスクトップウォレット)構築編
  • アカウント、モザイク、名前空間、発行トランザクションを管理する Symbol のクロスプラットフォーム クライアントです。
  • デスクトップウォレットはMac、Windows、および Web アプリケーションとして利用できるので、今回はWEBでアクセスする形にします。
その5 Faucet構築編
  • Faucetとはいわゆる蛇口ですね。テストネット等で使用する基軸通貨の配布を行えるツールです。
その6 おまけ
  • Symbol-bootstrapを使って他人に設定を共有する方法をご紹介する予定です。(もしかしたらやらないかも)

前提知識

全体を通して最低限以下の知識があると望ましいです。

  • Linuxを扱ったことがある
  • Docker、docker-composeが扱える(基本的にコマンドが叩ければOKです)
  • ドメインやSSL(TLS)についての知識がある

その2 Symbolエクスプローラー構築編

それでは、これよりSymbolエクスプローラーを構築していきます。

Symbolエクスプローラーとは?

Symbol Explorer is a read-only web application to browse the content of the blockchain. The explorer supports searching for transactions, accounts, namespaces, mosaics, and blocks information on a given network.

Deepl翻訳

シンボルエクスプローラーは、ブロックチェーンのコンテンツを閲覧するための読み取り専用のウェブアプリケーションです。エクスプローラは、指定されたネットワーク上のトランザクション、アカウント、ネームスペース、モザイク、ブロック情報の検索をサポートしています。

要はブロックチェーンに刻まれた情報を閲覧するための読み取り専用ツールですね。
ブロックチェーン上の情報はノードによって管理されています。
エクスプローラーを使えば誰でも簡単にブロックチェーンへ刻まれた情報を閲覧することができます。

画面イメージ

image.png

image.png

Symbolエクスプローラーの構築方法

それでは、実際にSymbolエクスプローラーを構築していきます。

必要なこと(もの)

  • サーバー(ローカル環境でも可)
  • Docker及びdocker-composeが実行出来ること
  • gitが使えること
  • ドメイン(なくても可)
  • 前回 建てたStatistics Serviceへアクセス出来ること

タグを指定してソースコートを取得(2022/12現在 v1.2.0)

$ git clone https://github.com/symbol/explorer.git -b v1.2.0

モジュールのインストール

$ cd symbol-explorer
$ npm install

公式の手順に沿うとnpm run devでツールは起動出来るようですが、この方法ではツールの永続化をすることはできませんので 前回 同様にDockerで永続化します。

ちなみに、エクスプローラーもDockerHubにイメージがあります。
ただし、公式に使い方は書いてありませんので私が調べた限りでご紹介します。

まず、自分でイメージをビルドして使用するパターンです。

設定ファイルの変更

今回はあえてポートの変更も行っています。別途エクスプローラー用のサーバーを準備する場合にはポート変更は必要ありません。
ポート変更はローカル環境やStatistics Serviceを構築したサーバー上でポートが被らないようにするためですので、そのあたりは自身の環境と相談してやってみてください。

変更するファイル

変更点は以下です。

src/config/default.json

{
	"apiNodePort": 3000, ※1
	"endpoints": {
		"marketData": "https://min-api.cryptocompare.com/",
		"statisticsService": "http://○○.○○.○○.○○:3003" ※2
	},
	"networkConfig": {
		"namespaceName": "dai.dyen", ※3
		"namespaceId": "152C174CB656773D", ※4
		"divisibility": "6"
	},
	"footer": {
		"link": [
			{
				"href": "https://github.com/symbol",
				"text": "Github",
				"icon": "IconGithub"
			},
			{
				"href": "https://discord.com/invite/xymcity",
				"text": "Discord",
				"icon": "IconDiscord"
			},
			{
				"href": "https://twitter.com/NEMofficial",
				"text": "Twitter",
				"icon": "IconTwitter"
			},
			{
				"href": "https://testnet.symbol.tools/",
				"text": "Faucet",
				"icon": "IconCurrencyUsd"
			}
		]
	},
	"timezone": "Local"
}

補足

  • ※1 SSL(TLS)対応している場合には3001、そうでない場合には3000を指定(今回はStatistics ServiceがTLS対応していないので3000を指定)
  • ※2 Statistics ServiceのURLを指定
  • ※3 次回作成するプライベートチェーンでの基軸通貨のnamespaceを指定
  • ※4 次回作成するプライベートチェーンでの基軸通貨のnamespaceId(モザイクID)を指定(必要があればdivisibilityも変更する)

Dockerfile

FROM node:lts-alpine AS builder
RUN apk add --no-cache python3 make g++
ENV NODE_OPTIONS="--dns-result-order=ipv4first --openssl-legacy-provider"
WORKDIR /app
COPY . .
RUN npm install && npm run build

FROM node:lts-alpine AS runner
WORKDIR /app
COPY --from=builder /app /app
EXPOSE 8080 ※1
CMD ["npm", "start"]

補足

  • ※1 ポートを8080に変更(エクスプローラーへアクセスする際のポート番号)

server.js

const fs = require('fs');
const http = require('http');

const PORT = 8080; ※1
const CONFIG_ROUTE = '/config';
const DEFAULT_CONFIG_PATH = '/src/config/default.json';
const STATIC_FOLDER = '/www';
const INDEX_HTML = '/index.html';
const STATIC_CACHE_AGE = 31536000;
const INDEX_CACHE_AGE = 172800;

let ENV;

...省略

補足

  • ※1 起動時のポートを8080へ変更(エクスプローラーへアクセスする際のポート番号)

イメージのビルド

変更を反映させたDockerイメージを作成します。
下記のコマンド(イメージ名はお好きにどうぞ)でイメージをビルドします。

$ cd symbol-explorer
$ docker build -t symbol-explorer:latest .

docker-compose.ymlの作成

今回は、前回 作ったdocker-compose.ymlに追記して起動してみます。
前回のstatisticsサーバーは一度停止しておきます。

$ docker-compose down

docker-compose.ymlに追記

version: "3"
services:
    mongodb:
        environment:
            MONGO_INITDB_DATABASE: statistics
        container_name: mongodb
        restart: always
        image: mongo:latest
        volumes:
            - ../databases/db:/dbdata:rw
    app:
        container_name: statistics
        restart: always
        image: symbol-statistics-service:latest
        environment:
            - PORT=4001
            - MONGODB_ENDPOINT=mongodb://mongodb:27017
            - NODES=["http://○○.○○.○○.○○:3000"]
        ports:
            - "3003:4001"
        depends_on:
            - mongodb
    explorer:
        container_name: explorer
        image: symbol-explorer:latest
        ports:
            - "8080:8080"

起動

$ docker-compose up -d

正常に起動したら http://IP:8080 でアクセスしてみてください。

プライベートチェーンをまだ構築していないので実際には表示されません
プライベートチェーンを構築後、symbol-statistics-serviceのNODES=[]にプライベートチェーンのノードを指定することで初めてエクスプローラーへデータが表示されるようになります

image.png

以上で、Symbolエクスプローラー構築編を終わります。

次回は、いよいよメインのプライベートチェーン構築編をお届けします。

13
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?