ビットコインアービトラージツール作成後の実行方法(外部VPSでの起動方法)

※この記事は2019/5/31に作成されました。

前回の記事では自作アービトラージbotを外部VPSで稼働させる準備について紹介しましたが、今回は外部VPSでのツールの動かし方について解説します。

ビットコイン 自作アービトラージbotの動かし方(作ったらVPSで稼働させよう) - Node.jsで暗号資産アービトラージ

ツールの作りや動かし方の一例として、どういう風に動かすのかをイメージしてもらえればと思います。

そのため、「ツール作りたいけど何から手をつければいいのかわからない」「(前回の記事を読んで)外部VPSを使えばいいっていうのはわかったけど、その後どうすればいいの?」っていう方は目を通してみて損はないと思います。

アービトラージbotの作りの紹介

ここからはあくまで一例という前提付きで説明していきます。
みなさんのスキルレベルに合わせて使いやすいようにどんどん改良していってください。

また、Node.jsが前提となりますので、他の言語を使う場合は適宜読み替えてください。

Node.jsアプリケーションは価格判定、注文のリクエストまで

私のbotでは基本的にはNode.jsアプリケーション(例えばarbitrage.js)の基本の動きは「1.価格差のチェックをループさせて」、「2.価格差が発生したら注文リクエスト」を行なっています。
(残高チェックなどの細かいチェックロジックは入れています。)

node arbitrage.jsコマンドでプロセスを起動しますが、一度注文リクエストを出したらプロセスは終了させています。

Node.jsは非同期処理なので注文リクエスト後のアカウントの残高状態の整合性をチェックするのが難しいためだったりします。

ループはNode.js(javascript)のsetIntervalを利用して実現できます。

Linuxのシェル(bash)でnode.jsアプリケーションを繰り替えし実行する

node arbitrage.jsコマンドの実行はLinuxのシェル(bash)を使います。

シェルはコマンドを実行するためのスクリプトです。

シェルは下のように作ります。

シェル名:callarbitrage.sh

for i in {0..200000}
do
  cd /home/kennejs/server
  /usr/local/bin/node arbitrage.js >> /home/kennejs/log/callarbitrage.log
done

Linuxのスケジューラを使ったりすることを考えて、パスはフルパス(/homeから全部書く)です。

node arbitrage.jsとかもきちんと/usr/local/bin/node arbitrage.jsのようにパス指定しておかないと動かなかったりするので注意が必要です。

for構文でループさせているので、注文したりデータ取得できなかったりでnodeプロセス(Node.jsアプリケーション)が終了しても新しくプロセスを起動することができます。

シェルは以下のコマンドで起動します。

sh callarbitrage.sh

運用中はシェルを停止したくなる場面も出てくるので停止するシェルも作成しておくと便利です。

停止コマンドはざっくり言うとkillコマンドとgrepコマンドを組み合わせてプロセスを停止させます。

cronでシェル(bash)をスケジュール実行する

シェルはバックグラウンド実行することでサーバからターミナルの接続を切っても実行し続けることが可能ですが、時刻をスケジュールして再起動したくなると思います。

例えば取引所が日次メンテナンス中の場合は、Node.jsアプリケーションを停止しておかないと、誤発注が発生する可能性が非常に高いです。

メンテナンスチェックが実装できていない場合はcronを利用して特定の時刻にシェルやコマンドを実行させてアプリケーションの起動や停止を行うことができます。

cronはcrontab -eコマンドで起動してviで操作します。

これだけは覚えておきたい最低限のviエディタのコマンド - Node.jsで暗号資産アービトラージ

cronは「* * * * * (分 時 日 月 曜日)」の形式で設定します。

以下のサンプルでは毎日4時11分にシェルが実行されます。

11 4 * * * sh /home/kennejs/script/callarbitrage.sh

botの外部VPSへの配置は全量リリースがおすすめ

ここまでが外部VPSでNode.jsアプリケーションを実行する流れとなります。

ここからは自分のPCから外部VPSへbotをアップロードする手順を解説していきます。

外部VPSへのアップロード

外部VPSへのアップロードはWindowsの場合、FTPというファイル転送プロトコルを使用します。

正確にはよりセキュアなFTPSやSFTPを使います。

FFFTPやWinSCPというフリーソフトを使うことが多いです。

Macの場合はSCPというプロトコルを使用できます。
標準ソフトのターミナルからscpコマンドを使ってファイルアップロードができます。

ポイントは通常のセキュアでないFTPだと転送するファイルの中身が見られる可能性があることです。

FTPSやSFTP、SCPは通信を暗号化してから転送することができるので、中身を見られるリスクを大幅に削減できます。

Windowsからフリーソフトを利用する場合は、FTPSまたはSFTPを使う設定になっているか必ず確認してください。

ちなみにFTPSの場合、ポート989、990を利用しますので外部VPSに接続できない場合は外部VPS側のポート設定を確認しましょう。

CentOS7の場合、firewalldの設定を確認します。

なお、SFTP、SCPはSSHのポート(おそらく初期設定で22から任意の数字に変更しているはず)を利用します。

SCPを使う場合は全ファイルアップロードのシェルを作っておくのがおすすめ

SCPを使ってNode.jsのアプリケーションをリリースする際は、全ファイルアップロードのシェルを作っておくのがおすすめです。

・最新の更新ファイルをアップロードするのが漏れていた
・テスト用のconfigファイルを間違ってアップロードしてしまった

ということが起こりやすいので、全ファイルをscpするコマンドをリストアップしたシェルを用意しておくとめちゃくちゃ楽になります。

特にconfigファイルは本番用とテスト用に分けておいて、本番用のファイルだけをリリースするように設定してください。

Windowsでフリーソフトを使う場合も、上記の観点で問題ないかを意識するといいと思います。

さいごに。必要な知識について

この記事では概要しか説明できていない部分がありますが、出てきた知識でよくわからなかったものはネットで調べながらまずは手を動かしてみてください。

エンジニアの方で知識を深めたいって方はネットワークスペシャリスト対策の必読本でもあるマスタリングTCP/IP 入門編 第5版がかなり深く理解できるのでおすすめです。

ネットワークスペシャリスト試験対策本はネスペ 29 魂 -ネットワークスペシャリストの最も詳しい過去問解説がおすすめで、システムネットワーク構成等を過去問を通して理解できる良書です。

マスタリングTCP/IP 入門編 第5版

マスタリングTCP/IP 入門編 第5版

ネスペ 29 魂 -ネットワークスペシャリストの最も詳しい過去問解説

ネスペ 29 魂 -ネットワークスペシャリストの最も詳しい過去問解説