symbol-explorer v1.3.0をインストール


## Docker のインストール

Docker がまだインストールされていない場合は、以下の手順に従ってインストールしてください。

### GPG キーの追加

```bash
sudo apt update
sudo apt install -y 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
```

リポジトリを追加します。

```bash
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 をインストールします。
docker-compose は使用する予定はありませんが、念のためインストールしておきます。

```bash
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-compose
```

Docker を使用するユーザーを `docker` グループに追加します。

```bash
sudo usermod -aG docker $USER
```

シェルを再起動して変更を反映させます。

```bash
exec $SHELL -l
```

## explorer 用ディレクトリの作成

任意の場所に explorer 用のディレクトリを作成します。
さらに設定ファイルを格納する `workdir` ディレクトリを作成します。

```bash
sudo mkdir -p /opt/explorer/workdir
sudo chown -R $(id -u):$(id -g) /opt/explorer
cd /opt/explorer
```

## 設定ファイルの作成

`workdir` ディレクトリに、`default.json` を作成します。

```bash
vi workdir/default.json
```

### メインネット

```json:workdir/default.json
{
  "endpoints": {
    "marketData": "https://min-api.cryptocompare.com/",
    "statisticsService": "https://symbol.services"
  },
  "networkConfig": {
    "namespaceName": "symbol.xym",
    "divisibility": "6",
    "namespaceId": "E74B99BA41F4AFEE"
  },
  "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/thesymbolchain",
        "text": "Twitter",
        "icon": "IconTwitter"
      }
    ]
  },
  "timezone": "Local"
}
```

### テストネット

```json:workdir/default.json
{
  "endpoints": {
    "marketData": "https://min-api.cryptocompare.com/",
    "statisticsService": "https://testnet.symbol.services"
  },
  "networkConfig": {
    "namespaceName": "symbol.xym",
    "divisibility": "6",
    "namespaceId": "E74B99BA41F4AFEE"
  },
  "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/thesymbolchain",
        "text": "Twitter",
        "icon": "IconTwitter"
      },
      {
        "href": "https://testnet.symbol.tools/",
        "text": "Faucet",
        "icon": "IconCurrencyUsd"
      }
    ]
  },
  "timezone": "Local"
}
```

:::note info
`statisticsService` の URL は、デフォルトでは Symbol の公式サービスを指していますが、必要に応じて自分で用意した statistics-service の URL に変更することも可能です。これにより、独自の統計データを提供するサービスを利用できます。
:::

## 起動シェル作成

`workdir` ディレクトリに `run.sh` を作成します。

```bash
vi workdir/run.sh
```

```bash:workdir/run.sh
#!/bin/bash
set -e
echo "Starting explorer $1"
cp default.json /app/src/config/default.json
cd /app
npm start
```

## compose.yml の作成

`compose.yml` を作成します。

```bash
vi compose.yml
```

```yaml:compose.yml
services:
  symbol-explorer:
    container_name: symbol-explorer
    restart: always
    image: symbolplatform/symbol-explorer:1.3.0-amd64
    working_dir: /workdir
    entrypoint: ash -c "/bin/ash /workdir/run.sh explorer"
    volumes:
      - ./workdir:/workdir:ro
    ports:
      - "4100:4000"
```

## サービス化

`/etc/systemd/system` に `explorer.service` ファイルを作成します。

```bash
sudo vi /etc/systemd/system/explorer.service
```

```service:/etc/systemd/system/explorer.service
[Unit]
Description=Symbol Explorer
Requires=network.target

[Service]
Type=idle
ExecStart=/usr/bin/docker compose up
ExecStopPost=/usr/bin/docker compose stop
TimeoutStopSec=300
User=<実行ユーザー名>
Group=<実行グループ名>
WorkingDirectory=/opt/explorer
StandardOutput=journal
StandardError=journal
SuccessExitStatus=130

[Install]
WantedBy=multi-user.target
```

`User` と `Group` には、サービスを実行するユーザー名とグループ名を設定してください。  
`WorkingDirectory` には、作成した explorer 用ディレクトリのパスを指定してください。

Systemd に変更を適用して、サービスを起動します。

```bash
sudo systemctl daemon-reload
sudo systemctl enable explorer
sudo systemctl start explorer
```

なお、以下のコマンドでサービスを停止します。

```bash
sudo systemctl stop explorer
```

## 動作確認

`http://localhost:4100` をブラウザで開き、Symbol Explorer が正しく表示されることを確認してください。

## ログの参照

ログはジャーナルに記録されているため、`-f` オプションを使用してリアルタイムで確認できます。  
以下のコマンドを実行すると、explorer サービスのログをリアルタイムで参照できます。

```bash
sudo journalctl -f -o cat -u explorer
```