【シストレ開発#9】自動売買システムの運用サーバーを構築していく!

自動売買のシステムトレードに向けて着々と準備を進めてます!たっきん(Twitter)です!

今回はシストレ運用へ向けたサーバー構築の話をしていきたいと思います。

前回の記事でシストレはROSベースで制作しており、現状Ubuntu OS上でしか動作しないということを説明しました。

よって必然的にサーバーOSもUbuntuということになります。

実はUbuntuにはデスクトップ版サーバー版の2種類のインストールイメージがあり、一般用途でよくインストールされているデスクトップ環境(X Window System、要はGUI)が標準でインストールされるのがデスクトップ版になります。

僕が普段シストレ開発で使用しているのもデスクトップ版になります。

それに対し、サーバー版は標準で(X Window System)がインストールされずに、サーバー用途のみの必要最小限の機能が備わっています。

そのため、デスクトップ版に対し、サーバー版の推奨スペックは比較的小さくてすみます。

■Ubuntu 20.04 推奨スペック

デスクトップ版 サーバー版
CPU 2 GHzデュアルコア
プロセッサ以上
1 GHz以上
RAM (メモリ) 4 GB以上 1 GB以上
ストレージ 25 GB以上 2.5 GB以上

デスクトップ版とサーバー版のカーネル構成の違い

デスクトップ版サーバー版の違いは他にもカーネルの構築のされ方にも違いがあるらしいです。

デスクトップ版はタスク切り替えを重視し、応答性能を重視したカーネル構成となっているため重たい処理が苦手

逆にサーバー版はタスク切り替え頻度を抑え、重たい処理を効率的に行えるようにカーネルが構築されている。

よってシストレ運用サーバーはUbuntuサーバー版を使っていこうと思い、現在サーバー環境を構築中です。

その備忘録としてこの記事に実際に構築した手順を残していこうと思います。

というわけで、今回はUbuntuサーバー版を使ったサーバー環境構築手順を解説していきますね!

今回の記事はサーバーやネットワークに関する専門的な内容が結構出てきます。
初心者の方にもなるべく理解しやすいように書こうと思いますが、事細かく書くと別の記事がいくつも出来上がってしまう量になってしまうため、ある程度は端折って書いてます。
もし行き詰ることがあったらググるなりして各自調べてみてください。
Sponsored Link

Ubuntu Server 20.04をインストールする

ではサーバー版Ubuntuをインストールしていきましょう!

まずは以下URLからUbuntuのインストールイメージファイルをダウンロードします。

現時点での最新版は20.04.1なのでこれをダウンロードしましょう!

ページが開いたら「Download」をクリックします。

しばらくすると、iso形式のイメージファイルがダウンロードされるので、このファイルを使ってインストールメディアを作成します。

インストールメディアの作成方法はUSBメモリ、DVDなどがあるので好きなのを選んでください。

また作成方法についてはググるとたくさん情報が出てくるのでここでは省略します。

インストールメディアをサーバーにしたいパソコンにセットし、インストールメディアから起動すると以下のような画面が立ち上がります。

この画面では言語設定をするのですが、日本語は存在しないようなので「English」を選択します。

次はキーボードレイアウトを選択します。

僕のキーボードは日本語レイアウトなので、ここでは「Japanese」を選択しました。

次はネットワーク接続の設定になります。

デフォルトではDHCPによるIPアドレス自動取得の設定になっているようですが、固定IPにも変更できるようです。

どちらを選ぶかは好みになりますが、僕個人的にはサーバーは固定IPで運用したほうが管理が楽になると思います。

ですが、ここでは敢えてデフォルトのDHCPでインストールし、インストール完了後に固定IPへ変更していきます。

そのほうがIPアドレス固定化の変更手順備忘録として残せますからね!

なので、何も変更せず次へ進みます。

次はプロキシの設定になりますが、今回は不要なので何もせず次へ行きます。

次はUbuntuのミラーサーバーの設定になります。

デフォルトで日本のサーバーが設定されてますので、このまま次へ進みます。

ここではインストールされるストレージのレイアウトを設定します。

どう設定すればいいかよくわからなければ、デフォルトのままも問題ないです。

今回はデフォルトのままで進めていきます。

ストレージのレイアウトの確認画面になります。

問題なければこのまま次へ進みます。

「インストールを続行するとストレージがフォーマットされ、既存のデータが失われます」的なメッセージが表示されます。

問題なければこのまま次へ進みます。

ここでは管理者情報を入力していきます。

「Pick a username」「Choose a password」はインストール後、ログインするときに必要な情報になるので、忘れずに覚えておきましょう!

また、「Your server's name」はホスト名でリモートログインするときに必要な情報になりますが、詳細は後述します。

SSHサーバーをインストールするか問われます。

SSHサーバーをインストールしておくと、SSHでのリモートログインができるようになりますが、インストール後に必要なパッケージソフトをまとめてインストールするので、ここではインストールせずに次へ進みます。

ここでは、サーバー用パッケージソフトが選択できます。

必要な場合は選択してください。

ここでは何も選択せず進めていきます。

数分待つとインストールが完了しますので、そのあとに「Reboot」を選択します。

するとパソコンが再起動し、ログイン画面が表示されます。

インストール手順の中で管理者情報を入力ましたが、「Pick a username」「Choose a password」はここで使用します。

ログインユーザー名、パスワードを入力し、ログインできる確認しましょう!

冒頭でも言いましたが、サーバー版はデスクトップ環境(X Window System)が標準でインストールされないため、上記のようなCUI画面となります。

デスクトップ環境であってもUbuntu(というかLinux)は基本的にCUI操作がメインとなりますので、以降は全てCUI操作で環境構築を行っていきます。

IPアドレスの割り当てを自動(DHCP)から固定に変更する

前述の手順に沿ってubuntuをインストールした場合、IPアドレスの割り当て方法は自動(DHCP)になっているはずです。

自動割り当てだと、DHCPサーバー側が勝手にIPを振り分けてくれるので楽で良いのですが、欠点としてそのパソコンに割り当てられたIPアドレスを知るには少々手間がかかるようになってしまうことです。

後述しますが、基本的にサーバーへログインするときは他パソコンを使用したリモートログインが主になってくるのですが、その際にIPアドレスがわかっていないとログインができなくなってしまうことです。

(IPアドレスがわからなくてもログインする方法もありますが・・・)

なのでサーバーとして運用するパソコンは基本的に固定IPにしたほうが無難だと思います。

まずは現在のネットワークの設定を確認していきましょう。

ネットワークの設定ファイルは「/etc/netplan」配下にあります。

インストールしたディストリビューションによってファイル名が変わっているようですが、ubuntu Server 20.04.1の場合は「00-installer-config.yaml」というファイルがあるはずです。

$ cd /etc/netplan
$ ls
00-installer-config.yaml

ここで大事なポイントですが、最初から存在する「00-installer-config.yaml」のファイルは修正しないようにしましょう。

このファイルは別のシステムが自動生成しているらしく、修正を加えても自動生成された際に上書きされて削除されてしまう可能性があるからです。

なので変更する場合は「99-my-config.yaml」というファイルを作成し、こちらに記述していきましょう!

システムがYAMLファイルを読み込む順番

ファイル名の先頭数字2桁はシステムがファイルを読み込む順番となっています。

なのでファイル名の先頭数字2桁を「99」とすることで、「00-installer-config.yaml」読み込んだ後に「99-my-config.yaml」を読み込むようになり、最後に読み込んだファイルがシステムに反映されるようになってます。

まずは最初から存在するファイルを「99-my-config.yaml」というファイル名でコピーし、vim等でファイルを修正していきます。

$ sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/99-my-config.yaml
$ sudo vim /etc/netplan/99-my-config.yaml

僕の環境だと以下のような記述になっていました。

network:
  ethernets:
    eth0:
      dhcp4: true
  version: 2

dhcp4trueとなっており、DHCPによる自動割り当ての設定となってます。

これをfalseに修正し、固定にしたいIPアドレスゲートウェイアドレスを追記します。
例えば、

  • 固定IPアドレス:192.168.1.10
  • サブネットマスク:255:255:255:0
  • ゲートウェイアドレス:192.168.1.1
  • ネームサーバー:192.168.1.1, 8.8.8.8, 8.8.4.4

のように設定したい場合は、

network:
  ethernets:
    eth0:
      dhcp4: false
      addresses: [192.168.1.10/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [192.168.1.1, 8.8.8.8, 8.8.4.4]
  version: 2

のように記述します。

修正が完了したら保存し再起動しましょう。

再度ログインが完了したら以下のコマンドを実行し、IPアドレスが指定したものになっているか確認しましょう。

$ ifconfig
eth0: flags=************** mtu 1500
inet 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255

Ubuntuサーバーへリモートログインしてみよう!

次は別のパソコンからubuntuサーバーへリモートログインするための設定をしていきましょう!

リモートログインをできるようにしておくと、わざわざサーバーパソコン用にディスプレイ、キーボード、マウス等を用意することなく、普段使用しているメインパソコンからサーバーパソコンの遠隔操作ができるようになり、大変便利です。

設定方法も比較的簡単なため、ぜひリモート環境を構築しましょう!

サーバー側の設定

(1) ssh-serverのインストール

SSHサーバーをインストールすると、SSHクライアントからリモートログインできるようになります。

これを入れなければ何も始まらないため、下記のコマンドでインストールしましょう。

$ sudo apt install openssh-server

(2) Avahiデーモンのインストール

Avahiデーモンはホスト名とIPアドレスの名前解決をしてくれるパッケージソフトになります。

通常リモートログインする際はログイン先のIPアドレスがわかってないといけないのですが、DHCPによる自動割り当てにしている場合、サーバー割り当てられているIPアドレスをいちいち調べなければなりません。

DHCPではなく、固定IPにしていればこの問題は解決しますが、アドレス(番号)ではなく、サーバーの役割に応じた固有のホスト名(名前)を付けたほうが管理しやすくなるメリットがあります。

インストールは下記のコマンドです。

$ sudo apt install avahi-daemon

ちなみに、リモートログインする際のホスト名の確認は以下のコマンドで行えます。

$ hostname
takkin-server

このホスト名はインストール手順の中で管理者情報を入力したときの「Your server's name」に該当します。

もしインストール後にホスト名をもっとイケてる名前に変えたい!ってなったときは以下の手順で変更できます。

<ホスト名変更>

以下のコマンドでホスト名の変更ができます。

$ sudo hostnamectl set-hostname <ホスト名>

<ホスト名確認>

ちゃんと変更されたか確認してみましょう。

$ hostname
<ホスト名>

</etc/hostsに追記>
「/etc/hosts」ファイルをvim等で開き「固定IPアドレス」、「ホスト名」を追記する。

$ sudo vim /etc/hosts

例えば、

・固定IPアドレス:192.168.1.10
・ホスト名:kikuchi-dairoku

と設定したい場合は以下のように1行追加する。

127.0.0.1 localhost
192.168.1.10 kikuchi-dairoku ← 追加

(3) タイムゾーンの設定

デフォルトだとタイムゾーンは協定世界時(UTC)となっているはずです。

以下のコマンドを実行して確認してみましょう!

<タイムゾーンの確認>

$ timedatectl
Local time: Sun 2020-08-23 16:46:40 UTC
Universal time: Sun 2020-08-23 16:46:40 UTC
RTC time: n/a
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

UTCとなってましたね。

なのでタイムゾーンをJST(Asia/Tokyo)に変更していきます。

<タイムゾーンを変更>

$ sudo dpkg-reconfigure tzdata

「Asia」を選択。

「Tokyo」を選択。

タイムゾーンが切り替わったか確認してみましょう!

<タイムゾーンの確認>

$ timedatectl
Local time: Mon 2020-08-24 01:49:06 JST
Universal time: Sun 2020-08-23 16:49:06 UTC
RTC time: n/a
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

(4) ソフトウェアのアップデート

ここまできたらソフトウェアをアップデートしておきましょう。

$ sudo apt update
$ sudo apt upgrade

(5) 再起動

最後に再起動してサーバー側の設定は完了です。

$ sudo reboot

クライアント側の設定

クライアント側(リモートログインする側)はUbuntuである必要はなく、Windowsでもログイン可能です。

今回はWindowsのアプリ「Tera Term」を使ったリモートログインの手順を説明していきます。

(1) Tera Termのインストール

「Tera Term」はWindowsのリモートログオンクライアント・アプリになります。

ここからダウンロードし、インストールしておきましょう。

(2) ログイン情報の入力

「Tera Term」を起動すると以下の画面が立ち上がりますので、ログインに必要な情報を入力していきましょう!

  • ホスト名:サーバーのホスト名 or IPアドレス
  • TCPポート:22 (ポート番号22はSSHのデフォルト番号)
  • サービス:SSHを選択

最後に「OK」をクリックします。

サーバーへの接続が成功すると以下の画面が表示されます。

ログインするユーザー名、パスワードを入力し、「OK」をクリックします。

ログインが成功すると以下のような見慣れたCUIが表示されます。

takkin@takkin-server:~$

番外編:Raspberry Pi(ラズベリー パイ)サーバーを構築する

本格的にサーバーを構築して運用するとなると新規にパソコンを購入する必要がありますが、お試しレベルでいいから格安でサーバーを構築したい!っていう人もいると思います。

そんな時に役に立つのがみんな大好きRaspberry Pi(ラズベリー パイ:通称ラズパイ)になります。

Raspberry Piを知らない人のために簡単に説明すると小型のシングルボードコンピューターになります。

パソコンに見えないかもしれませんが、低価格・低スペックのパソコンと思っていただいていいと思います。

本記事制作時点で最新だとラズパイ4が販売されてるみたいですね!

僕はラズパイ3を持っているのですが、それと比較してもラズパイ4はだいぶスペックが上がってますね。

  • CPU:1.5GHz クアッドコア
  • メモリ:4GB (DDR4-2400低電圧)
  • ストレージ:microSDカード

メモリが4GBあるのは嬉しい。

ラズパイにもUbuntuをインストールすることができるのですが、前述したやり方ではインストールできないため手順の違いを踏まえながら説明していきます。

ちなみに僕の手元にはラズパイ3しかないため、ラズパイ3を使った手順で解説していきますがインストール手順はどのラズパイ・シリーズを使っても大差はないと思います。

インストール済みイメージファイルの入手

ラズパイの場合、基本的にインストールメディアを使ったOSのインストールに対応しておらず、既にインストール済みのイメージファイルをmicroSDカードに書き込むことでインストールします。

(もはやインストールとは呼べないかもですね・・・)

まずは以下を開いてイメージファイルをダウンロードしましょう!

ページを開くと以下箇所でダウンロードできます。

自分の持っているラズパイのバージョンに合ったイメージを選びましょう!

今回の手順では「Raspberry Pi 3 64-bit」のイメージファイルをダウンロードしていきます。

ダウンロードしたファイル名は以下でした。

  • ubuntu-20.04.1-preinstalled-server-arm64+raspi.img.xz

このファイルをmicroSDカードに書き込むのですが、僕はRufusというソフトを使って書き込みました。

Rufusの使い方はここでは説明しませんが、ググればすぐ情報が見つかると思うので各自で調べて書き込んでみてください。

ラズパイでUbuntuを起動してみる

書き込みが終わったmicroSDカードをさっそくラズパイのmicroSDカードスロットに差し込んで、電源に繋いでみましょう!

もちろん、ディスプレイ、マウス、キーボードも事前に繋いでおきましょう。

以下のような文字がディプレイに表示されたら起動成功です!

You are required to change your password immediately (administrator enforced)
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-1015-raspi aarch64)
           ・
           ・
           ・
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for ubuntu.
Current password:

初回起動時は「パスワードを変更してログインし直せ」と言ってくるので言われた通りパスワードを変更しましょう。

ちなみに、初期パスワードは「ubuntu」です。

Current password: ubuntu
New password: <新しいパスワード>
Retype new password: <新しいパスワード>

パスワード変更が成功すると勝手に再起動されるので今度は、

  • ユーザー名:ubuntu
  • パスワード:<新しいパスワード>

でログインしましょう!

新規管理者ユーザ作成

特に気にならない方は初期のubuntuユーザーを使い続けてもよいですが、僕はいつも新規に自分の管理者ユーザーを作成して、そちらを使うようにしています。

別にubuntuユーザーでよくね?って方はこの項目はスキップしてしまってもよいです。

今回はユーザー名「takkin」で新規管理者ユーザーを作成していきます。

$ sudo adduser takkin
Adding user `takkin' ...
Adding new group `takkin' (1001) ...
Adding new user `takkin' (1001) with group `takkin' ...
Creating home directory `/home/takkin' ...
Copying files from `/etc/skel' ...
New password: <新しいパスワード>
Retype new password: <新しいパスワード>
passwd: password updated successfully
Changing the user information for takkin
Enter the new value, or press ENTER for the default
  Full Name []: <任意>(エンターでスキップ可能)
  Room Number []: <任意>(エンターでスキップ可能)
  Work Phone []: <任意>(エンターでスキップ可能)
  Home Phone []: <任意>(エンターでスキップ可能)
  Other []: <任意>(エンターでスキップ可能)
Is the information correct? [Y/n] Y

新規に追加したユーザーで「sudo」を使えるようにします。

$ sudo gpasswd -a takkin sudo
Adding user takkin to group sudo

これで管理者ユーザーが作成できましたので一度ログアウトし、新規に作成したユーザーでログインします。

無事ログインできたら初期のubuntuユーザーはもういらない子なので削除してしまいましょう!

$ sudo userdel -r ubuntu

初期設定

ここまで来たらUbuntuサーバーのインストール直後の状態とほぼ変わりありません。

必要に応じて以下の設定も行っていきましょう!

  • IPアドレスの割り当てを自動(DHCP)から固定に変更する
  • Ubuntuサーバーへリモートログインしてみよう!

さいごに

今回はシステムトレードを運用に向けてUbuntuサーバーを構築したので、その手順を備忘録として本記事を書いてみました。

専門的な用語も出てきて難しく感じた方もいるかもしれませんが、基本的には手順通りに実施するだけで誰でもサーバー構築できるように書いたつもりです。

またこれを機にサーバーやネットワークに興味を持っていただいて、その知識を深めるきっかけになっていただけたらなと思ってます。

サーバーを構築するにあたり、「お金がなくてサーバー用のパソコンが買えない!」「パソコンを買う前にお試しでサーバー構築してみたい!」って方のために格安のコンピューターとして有名なRaspberry Pi(ラズベリー パイ)を使ったサーバー構築手順も載せておきました。

まずはラズパイを使ってサーバー構築の感触を掴んでから、本格的にパソコンを購入しサーバーを構築していくって流れでも良いと思います。

さて、これで一通りシストレ運用を実行する環境が整いました。

ソフトのほうでまだ一部修正が必要な個所がありますが、そう多くはないため近々OANDAのデモ口座を使って試験運用に移っていきたいと思います。

また成果が出たらブログ更新します!(^^)

それでは。

Sponsored Link