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.
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
何故かトランザクション送信時にエラーが発生するが、送信は成功している模様。
要調査