symbol-statistics-service v1.2.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
```

## statistics-service 用ディレクトリの作成

任意の場所に statistics-service 用のディレクトリを作成します。
さらに DB データを格納する `dbdata` ディレクトリを作成します。

```bash
sudo mkdir -p /opt/statistics-service/dbdata
sudo chown -R $(id -u):$(id -g) /opt/statistics-service
cd /opt/statistics-service
```

## compose.yml の作成

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

```bash
vi compose.yml
```

```yaml:compose.yml
services:
  statistics-db:
    user: "1000:1000"
    environment:
      MONGO_INITDB_DATABASE: statistics
    container_name: statistics-db
    command: mongod --dbpath=/dbdata --bind_ip=statistics-db --wiredTigerCacheSizeGB 2
    restart: always
    image: mongo:7.0.17
    volumes:
      - ./dbdata:/dbdata:rw
  statistics-app:
    user: "1000:1000"
    container_name: statistics-app
    restart: always
    image: symbolplatform/symbol-statistics-service:1.2.0-amd64
    environment:
      - PORT=4001
      - MONGODB_ENDPOINT=mongodb://statistics-db:27017
      - NODE_MONITOR_SCHEDULE_INTERVAL=15000
      - CHAIN_HEIGHT_MONITOR_SCHEDULE_INTERVAL=15000
      - GEOLOCATION_MONITOR_SCHEDULE_INTERVAL=30000
      - NODES=[
          "http://sakia.harvestasya.com:3000",
          "http://symbol-harvesting.com:3000",
          "http://symbol-node.net:3000",
          "http://symbol.nagoya:3000",
          "http://symbol.ninja:3000"
        ]
      - API_NODE_PORT=3000
      - PEER_NODE_PORT=7900
      - REQUEST_TIMEOUT=5000
      - NUMBER_OF_NODE_REQUEST_CHUNK=10
      - NODE_PEERS_REQUEST_CHUNK_SIZE=50
      - CHAIN_HEIGHT_REQUEST_CHUNK_SIZE=10
      - PREFERRED_NODES=[]
      - MIN_PARTNER_NODE_VERSION=16777728
    ports:
      - "4001:4001"
    depends_on:
      - statistics-db
```

`user` に設定するユーザー ID とグループ ID は `id -u` と `id -g` で調べてください。
上記の `NODES` には、メインネットのノードが設定されていますが、テストネットの情報を取得したい場合は、テストネットのノードに変更してください。テストネットのノードリストは、[Symbol Testnet ノードリスト](https://symbolnodes.org/nodes_testnet/) などを参照して取得できます。

## サービス化

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

```bash
sudo vi /etc/systemd/system/statistics-service.service
```

```service:/etc/systemd/system/statistics-service.service
[Unit]
Description=Symbol Statistics Service
Requires=network.target

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

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

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

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

```bash
sudo systemctl daemon-reload
sudo systemctl enable statistics-service
sudo systemctl start statistics-service
```

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

```bash
sudo systemctl stop statistics-service
```

## 動作確認

暫く待って(15 分ほど？) `http://localhost:4001/nodes` をブラウザで開き、Symbol Explorer が正しく表示されることを確認してください。

パスやパラメータの詳細については、以下のリンクを参照してください。  
[Symbol Testnet OpenAPI ドキュメント](https://testnet.symbol.services/openapi/index.html)

## ログの参照

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

```bash
sudo journalctl -f -o cat -u statistics-service
```