Skip to content
Code on the Road
Go back

【VPS構築編】持ち歩く開発の限界から、止まらないサーバーへ — さくらのVPS for Windows Server

日経225先物のシステムトレードを動かす基盤を、MacBook Pro 上の Parallels(Windows) から さくらのVPS for Windows Server に載せ替えた。この記事はその構築編。VPS を契約してから、開発環境を整え、外部公開できるようにするまでの 汎用部分 をまとめる。

kabuステーション や自作システム「Logical225」の載せ方は、続きの アプリ運用編 に分けた。

なぜ移したか — 持ち歩く構成の限界

これまで、自動売買システムは MacBook Pro の中の Parallels(Windows) で動かしていた。kabuステーションは Windows 専用アプリなので、Mac の中に Windows を立てて運用する形だ。

ただ、この構成には弱点が積み重なっていた。

つまり「持ち歩く端末」と「24時間止めたくない売買基盤」は、そもそも相性が悪い。このブログは「移動しながら働く」検証がテーマだが、トレード基盤については逆に 手元から切り離してクラウドに常駐させる のが正解だった。

そこで さくらのVPS for Windows Server に丸ごと移すことにした。端末の電源・回線・再起動から完全に独立して、サーバーが黙々と動き続ける状態を目指す。

事前準備

契約・Windows起動・初回ログイン

さくらのVPS for Windows Server を契約し、コントロールパネルから Windows を起動。最初は VNCコンソール から Windows にログインする(初期ユーザーは Administrator + 申込時の初期パスワード)。

Administratorのユーザー名を変更する

RDP はインターネットに公開され、Administrator という既定名は総当たりで狙われやすい。ユーザー名を変更しておくと、攻撃のハードルが一段上がる(さくら公式推奨)。

手順はさくら公式マニュアル: Administratorのアカウント名変更

Windows App(リモートデスクトップ)で接続する

以降の作業は VNC ではなく、手元の Mac から Windows App(リモートデスクトップ=RDP) で繋ぐと快適。サーバーのIPアドレスと、変更後のユーザー名・パスワードで接続する。

RDP は「遠隔で相手の Windows デスクトップを操作する仕組み」。作業を終えるときは サインアウトせず「切断」 で抜ける(サインアウトすると中で動かしているアプリが終了してしまう)。

初期設定

スリープ・画面オフを無効化する

サーバーが勝手に省電力で止まらないよう、各タイムアウトを無効化する。

powercfg /change standby-timeout-ac 0
powercfg /change monitor-timeout-ac 0
powercfg /change hibernate-timeout-ac 0
powercfg /change disk-timeout-ac 0

Windows Updateを「通知のみ」にする

勝手にダウンロード・再起動されると稼働が途切れるので、通知だけに変更する。

$au = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU"
New-Item -Path $au -Force | Out-Null
New-ItemProperty -Path $au -Name "NoAutoUpdate" -PropertyType DWord -Value 0 -Force | Out-Null
New-ItemProperty -Path $au -Name "AUOptions" -PropertyType DWord -Value 2 -Force | Out-Null
New-ItemProperty -Path $au -Name "NoAutoRebootWithLoggedOnUsers" -PropertyType DWord -Value 1 -Force | Out-Null
gpupdate /force

これらは設定変更なので、適用に 再起動は不要gpupdate /force で反映済み)。

セキュリティ

公開サーバーなので、最低限の守りを入れておく。

総当たり対策(アカウントロックアウト)

固定IPがなくアクセス元を絞れない運用では、ログイン失敗回数で締めるのが現実的。

# 10回失敗で30分ロック、失敗カウンタは30分でリセット
net accounts /lockoutthreshold:10 /lockoutduration:30 /lockoutwindow:30
net accounts   # 確認

注意: 「さくらのVPS for Windows Server」では、Linux版にある さくらのパケットフィルタが使えない。つまり Windows ファイアウォールが唯一の防壁 になる。だからこそ、ユーザー名変更・ロックアウト・強固なパスワード、そして「不要なポートは開けない」ことがより重要になる。

開発・実行環境の準備

Node.js

winget install OpenJS.NodeJS.LTS --source winget
node -v   # 確認
npm -v

Git

winget install Git.Git --source winget
git --version   # 確認

これで「開発できる Windows サーバー」が一通り整った。

外部公開(ngrok)

作ったアプリ(このあとのアプリ運用編で動かす Logical225)を、外部のブラウザから使えるようにする。ここでは ngrok を使う。

ngrok は「サーバーから外向きにトンネルを張る」方式で、ポート開放不要・HTTPS付きで公開できる。localhost:3000 を、ngrok の固定ドメインに HTTPS で晒すイメージだ。

インストール

winget install ngrok.ngrok --source winget
ngrok version   # 確認
ngrok update   # 自己更新。失敗するなら公式zipのngrok.exeで差し替え

認証トークンを設定

ngrok のダッシュボードで取得したトークンを登録する。

ngrok config add-authtoken <あなたのトークン>

固定ドメインで公開する

ngrok は 無料プランでも固定ドメインが1つ 割り当てられる(ダッシュボードの Domains で確認。例 xxxx.ngrok-free.app)。--domain を付ければ毎回同じURLになる。

ngrok http --domain=xxxx.ngrok-free.app 3000

無料プランの主な制限:

(参考)ポート開放で直接公開する

ngrok を使わず、素早く疎通だけ確認したいとき限定の方法。本番では使わない。

New-NetFirewallRule -DisplayName "Logical225" -Direction Inbound -Protocol TCP -LocalPort 3000 -Action Allow
Remove-NetFirewallRule -DisplayName "Logical225"

次にやること

これで、VPS 上に「開発できて、外部公開もできる」土台ができた。



Previous Post
【アプリ運用編】kabuステーションAPI × Next.js(Logical225)を VPS で動かして公開する
Next Post
Day 3: 相模原・新戸キャンプ場 — 初の 2泊3日、拠点が定まると仕事は伸びる