Ogmios

Ogmiosとは

Ogmios(オグミオス)とは、Cardano ノードに接続するための 軽量な WebSocket API ブリッジ です。

Ogmiosを試す機会があったので、リレーノードにインストールする手順をメモしておきたいと思います。

ダウンロードフォルダを作成する

mkdir -p $HOME/git/ogmios
cd $HOME/git/ogmios

Ogmiosバイナリをダウンロードする

wget https://github.com/CardanoSolutions/ogmios/releases/download/v6.11.2/ogmios-v6.11.2-x86_64-linux.zip

アーカイブを解凍し、解凍されたディレクトリに移動する

unzip ogmios-v6.11.2-x86_64-linux.zip

Command 'unzip' not found, but can be installed with:

sudo apt install unzip

と表示されたら

sudo apt install unzip -y

を実行

バージョン確認

bin/ogmios version

v6.11.2 (a0791302)

/usr/local/binディレクトリに配置する

sudo cp bin/ogmios /usr/local/bin/ogmios

インストールされたバージョンを確認

ogmios version

v6.11.2 (a0791302)

起動スクリプトを作成する

cat > $NODE_HOME/startOgmios.sh << EOF
#!/bin/bash
DIRECTORY="${NODE_HOME}"
PORT=1337
HOST="127.0.0.1"
CONFIG_PATH="\${DIRECTORY}/mainnet-config.json"
SOCKET_PATH="\${DIRECTORY}/db/socket"
/usr/local/bin/ogmios --node-config \${CONFIG_PATH} --node-socket \${SOCKET_PATH} --host \${HOST} --port \${PORT}
EOF

常時起動させるためのサービスファイルを作成する

cat > $NODE_HOME/service/ogmios.service << EOF
# file: /etc/systemd/system/ogmios.service

[Unit]
Description=Ogmios WebSocket bridge for Cardano
After=network.target cardano-node.service
Wants=network.target

[Service]
Type=simple
Restart=on-failure
RestartSec=5
User=cardano
WorkingDirectory=${NODE_HOME}
ExecStart=/bin/bash -c '${NODE_HOME}/startOgmios.sh'
KillSignal=SIGINT
RestartKillSignal=SIGINT
SuccessExitStatus=143
TimeoutStopSec=300
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=ogmios

[Install]
WantedBy=multi-user.target
EOF

起動スクリプトに実行権限を付与する

chmod +x $NODE_HOME/startOgmios.sh

サービスファイルを規定のディレクトリに配置

sudo cp $NODE_HOME/service/ogmios.service /etc/systemd/system/ogmios.service

パーミッションを設定する

sudo chmod 644 /etc/systemd/system/ogmios.service

サービスファイルを再読み込みし、ogmiosサービスを有効化する

sudo systemctl daemon-reload
sudo systemctl enable ogmios.service

cardano-walletサービスを開始する

sudo systemctl start ogmios.service

cardano-walletサービスの起動状態を確認する

sudo systemctl status ogmios.service

systemd[1]: Started Ogmios WebSocket bridge for Cardano.

外部からAPIを叩けるようにする

nginxリバースプロキシの設定(/etc/nginx/sites-available/submit-api)

server {
    listen 443;
    server_name submit-api.example.com;

    location /submit/ {
        proxy_pass http://127.0.0.1:8091/api/submit/;
        proxy_set_header Host $host;

        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' '*';

        if ($request_method = OPTIONS) {
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'text/plain; charset=utf-8';
            add_header 'Content-Length' 0;
            return 204;
        }

        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

Basic認証の設定

sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd myuser

リバースプロキシ有効化

sudo ln -s /etc/nginx/sites-available/submit-api /etc/nginx/sites-enabled/
sudo systemctl reload nginx

HTTPS化 (Let's Encrypt)

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d submit-api.example.com

ファイアーウォールの設定(ufw)

sudo ufw allow 443

テスト(外部クライアントからtx.signedを送信)

curl -X POST \
 -u myuser:mypassword \
 -H "Content-Type: application/cbor" \
 --data-binary @"tx.signed" \
 https://submit-api.example.com/submit/tx

eternlウォレットの場合の設定 設定→アプリ設定→カスタム送信エンドポイント→エンドポイントを追加 で以下を追加する

https://submit-api.example.com/submit/tx

何故かトランザクション送信時にエラーが発生するが、送信は成功している模様。

要調査

  新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS