防砂林メモ

自分用のメモを書くだけ

マイクラサーバーどケチシステムの構築

はじめに

どうも、筆者です。パソコン初心者です。なんか社会人になって半年くらいが経ったみたいです。未だに社会人になった実感が湧きませんが。まあそういうこともあるよね。

して、マイクラサーバーの話ですが。もともと、学生の時から仲間内でマルチプレイをしておりました。しかし、アパートに越してひとり暮らしを始めてからは、ネット回線の都合でサーバーのホスティングがいままでどおりできなくなってしまいまして。

いや、まあちゃんと回線を契約すればいいだけの話なんですけど。でもやっぱ、色々と費用は抑えたいじゃないですか。マイクラ以外のゲームはやらないし、マルチプレイする頻度もそう高くないので、ほとんど携帯回線で事足りるというか。マイクラのためだけに固定回線の契約はしたくないなぁ、ってことですよぅ。

回線は契約せず別の方法でなんとかできないか。パソコン初心者なりにちょっと色々考えてみた、って言うのがこの記事の内容です。

要件

費用を抑えたい

前述のとおり、あまりマルチプレイの頻度は高くありません。誰もヘビーなプレイヤーではないので、そこまでお金をかけたくありません。初期費用・ランニングコスト、共に抑えたい。

あくまで仲間内で

サーバーを不特定多数に公開して、大人数でやるとかそういうのは想定しません。あくまで仲間内でやります。

エディションはJava版で

前からJEでやってるし、JEの方が色々できる感じがするので。まあ統合版もいいですよね。サーバー建てる必要がそもそもないですから。

24時間運用にしたい

だいたい仲間内でマルチやるってなったときは、知識のある人がその都度サーバーを起動するっていう感じの運用になると思うんですけど。実際やってるとなかなか集まりが悪いというか。

仲間内で、サーバー建てれる知識があるのは自分だけなんで、マルチプレイする際は自分が起動の操作をする必要があるんですよね。だから、裏でちょっと建築進めとこうとか、ブランチマイニングしとこうとか、そういうことがしずらいんですよ。

なので、できれば24時間運用にしたい。やっぱりマイクラは作業ゲーなので。各位が任意のタイミングでログインできるような感じであってほしい。

以前までの運用(KiyoshiV1)

そもそも、引っ越し前はどんな運用をしていたのかって言う話です。実家は普通に光回線があります。なので、まあ普通にデスクトップパソコンでサーバーを建ててやってました。ただ、ちょっと工夫をしてて「各位が任意のタイミングでログインできるような仕組み」を不完全ながら実現しておりました。

discord.pyを利用してディスコードのボットを作ったんですよ。プレイヤーから命令を受けて、subprocessでマイクラサーバーを起動するっていう仕組みです。パソコンでボットを自動起動・常駐させておけば、パソコンの電源が入ってる限りはいつでもマルチプレイができます。マイクラサーバー自体を常駐させているわけではないので、リソースを無駄遣いすることはありません。

ちなみにこの頃は、ONUの都合でポート開放ができませんでした。管理画面にログインするためのパスワードが分からなかったんですよね。親は詳しくないので多分、業者が設定したんだと思います。開放くんもなんか効かないし。そのためngrokでポートフォワーディングをすることでサーバーを開いてました。サーバーを起動して、ngrokを起動して、アドレスをディスコードに送信して、って手動でやってるとなかなか手間なので、この流れをボットで自動化していたわけです。

このボットをディスコードでは「きよしくん」と呼んでいます。また、このスクリプトのことを「KiyoshiV1」と呼びます。

不採用案

①手元のデスクトップ環境でホスティング

新居でも、今まで通りデスクトップパソコンでKiyoshiV1を動かすっていうことですね。まあ厳しいですね。携帯回線なので。サーバーに接続するだけならなんとかなりますが、ホスティングとなると帯域幅的に無理があります。テザリングしっぱなしって訳にもいきませんし。

あと、携帯回線のプランがちょっと特殊なんですよね。通信費を抑えるために固定回線は契約したくない。そうなると携帯回線は無制限プランにしたい。パソコンにテザリングするとギガの消費が多くなる。しかし、無制限プランとなるとどれもお高い。そんな中、2,000円程度で無制限という謎のプランを発見しまして。マイネオの「マイそく」っていうプランなんですけど。内容的には、常に3Mbpsの速度制限(マイそくプレミアムの場合)がある、平日12時~13時は32Kbpsの速度制限がかけられる、など色々と制約があるけど無制限だよって言う特殊なプランです。昼休みは本でも読むかぁ、ってことで契約しました。

まず、3Mbpsでホスティングは無理なのでこの案はボツ。

②Aternos(無料サーバー)

Aternosっていうホスティングサービスがあるんですよ。無料だし、管理も容易なので便利。だけど、絶望的にラグいんですよね。海外のサービスですし。

マルチプレイを始めた当初はポートフォワーディングとかの知識がなかったため、これを使っていたんですが。まあラグくて。やってらんないっすね。

とにかくラグいのでボツ。

③レルムズ

イクラ公式のレンタルサーバーですね。金かかるので嫌です。8ドルですよ。ボツ。

④実家サーバー24時間運用

実家には古いデスクトップパソコンが転がってます。富士通のD582/Eです。これをサーバー用として24時間つけっぱにするということですね。

うーん。24時間かぁ。電気代はかかるし、ちょっと怖いですよね。火事とか。一応、24時間モデルって言うことですけれども、古いし。

自分の家ならまだいいですけど実家ですからね。流石にボツ。

VPS

自宅サーバーがだめなら、VPSはどうかと。「マイクラ サーバー 建て方」で検索すればVPSの広告がいっぱい出てくるじゃないですか。電気代や、火災リスクのことを考えればVPSの料金は全然安いって聞いたことがあります。

でも、やっぱりお金はかけたくないなぁ。もっと他に方法を模索したいと思います。ボツ。

⑥ラズパイ実家サーバー

ラズパイなら実家で放置してもいいよねぇ。消費電力は小さいし、燃える可能性も低いはず。

でもなんかラズパイ高騰してるらしいし、できれば買わずに済ませたいなぁ。ということでボツ。

⑥仲間にサーバーを建てさせる

KiyoshiV1を素人でもインストールし易いように調整して、実家ぐらししてる仲間のパソコンにぶち込むという案。これなら今まで通りの運用ができる。

けど、ちょっとなぁって感じ。あまり理解のない人にポート開放させるのはあんまり良くないよねぇ。マイクラ脆弱性に関しても、もちろん対応はしているけど100パーセント信頼できるものではないと思う。やっぱり筆者はパソコン初心者なので。KiyoshiV1のセキュリティにはあまり自信がないです。

慎重に行きましょう。ボツです。

一時採用案(実家サーバー1日4時間運用)

じゃあどうしよっかなということで、実家にある古いデスクトップパソコンをサーバー代わりにするという案をとりあえず採用。ただ、前述の通り24時間動かすのはあまり好ましくない。

ので、パソコンのBIOS設定をいじって、毎晩19時に自動起動するように。また、タスクスケジューラーによって23時に自動シャットダウンをするように設定しました。マルチプレイをする可能性の高い夜間のみKiyoshiV1をスタンバイさせるという仕組みです。

これなら夜間は自由にサーバーを使えます。なんかあったときはリモートデスクトップで管理。23時以降もやる場合はタスクスケジューラーを一時解除。こんな感じの運用です。

休日の日中とかにマイクラやるときは、仕方がないけど親にラインしてパソコンの電源ボタンを入れてもらうとか。これはちょっと不便ですね。パソコンのみならず親まで遠隔操作することになるとは。

それに、やっぱり無駄が多いですね。4時間なので24時間に比べればだいぶ良い感じがしますが、それでも「毎日」4時間。マルチプレイは毎日やるわけでもないのに。ほぼ毎日4時間、電力を浪費するんですから、無駄以外の何物でもありません。

実際のところ、実家の電気代を払うのは親ですので、筆者の財布からは1円も出ていかないのですが。親の知らないところで電気代を奪っていく、ステルススネカジリです。

とても不健全ですが、現状これが一番お金を使わずに済む方法だったので、ほかの方法を模索しつつとりあえずこの案を採用ということにしました。最終的にはこの方法で4ヶ月ほど運用しました。

現行採用案(マイクラサーバーどケチシステム)

状況の変化

8月くらいですね。親からラインがきまして、ワイファイがつながらなくなったと。困ったなぁと思いながら実家に帰り確認してみると、どうもワイファイにはつながる。ただ「インターネット接続がありません」との表示が。

これはあれだ、パソコン初心者の筆者にもわかるぞ。異常があるのは無線ルーターではなくONUに違いない。だって、20年近く使ってる化石(PR-200NE)なんだもの。

いやぁ、参ったなぁ。きっと面倒な手続きをして業者を呼んで(親が)金を取られることになるんだろうなぁ。って思っていたんですけど、プロバイダーに連絡したらすぐに新品のONUを無料で送ってくれて、あとは自分でやってね方式。

なんだぁ、意外とあっさりしてるじゃあん。ごめんね、ド○モ光さん、邪険に扱われると思って。交換したら無事ネット環境は復活しました。

それでです。自分で新ONUのセットアップをしたので管理画面にアクセスするためのパスワードもちゃんとわかります。つまり、これで自由にポート開放ができます。

思いつきました。この方法なら要件を完全に満たすサーバーを構築できるのでは……?

イクラサーバーどケチシステム

どういう方法でサーバーを運用していくかということですが、ちょっと複雑です。パソコン初心者なりに頑張って考えました。箇条書きでまとめます。

  • 適当なPaaSの無料枠でディスコードのボット「KiyoshiV2」を24時間動作させます
  • KiyoshiV2はKiyoshiV1と同じように起動命令を受け取ります
  • 起動命令を受け取ったKiyoshiV2は実家サーバー(停止中)に「マジックパケット」を送信します
  • 実家サーバーはマジックパケットを受信し、WoW(ウェイク・オン・ワン)により起動します
  • KiyoshiV2は実家サーバーの起動を確認すると、ユーザーから受け取った起動命令を実家サーバーへHTTPリクエストとして転送します
  • 実家サーバーでは、FastAPIを利用して作られたAPIサーバーが起動しています。このAPIサーバーを「Sekiguchi」と呼びます
  • SekiguchiはKiyoshiV2からリクエストを受信し、マイクラサーバーをsubprocessにより起動させます
  • プレイヤーはマルチプレイをします
  • プレイヤーはマルチプレイを終え、KiyoshiV2にサーバー停止命令をします
  • 停止命令がSekiguchiに伝わり、Sekiguchiはマイクラサーバーを停止します
  • Sekiguchiはマイクラサーバーが停止している状態で、一定時間リクエストがない場合実家サーバーをシャットダウンさせます
  • 実家サーバーは次にマジックパケットを受信するまで停止しています

大まかな仕組みは以上です。つまりプレイヤーから見れば、あたかもKiyoshiV1が常時稼働しているような感じになるわけです。

一応、仕組みについて補足です。

  • 実家の回線は動的IPなので、この仕組みを維持するためにDDNSを利用しています
  • Sekiguchiのセキュリティとして、トークンによる認証とSSL化がなされています
  • IPアドレスと証明書の更新のため、実家サーバーは毎朝定刻に自動起動します

こんな感じです。このシステムに関して、改めて要件と照らし合わせてみましょう。

まず「費用を抑えたい」ですが、何かを買った訳では無いので初期費用はゼロです。ランニングコストに関して、KiyoshiV2は無料枠なのでゼロ。実家サーバーは電気代がかかりますが、毎朝の処理とKiyoshiV2からのリクエストがあったときのみ起動するため、無駄がありません。完璧です。

次に「あくまで仲間内で」ですが、まあ問題なく仲間内でマルチができるようになっています。ヨシ。

それから「エディションはJava版で」ですが、Sekiguchiの方でJEのサーバーを起動できるようになってます。んで、ついでにBEのサーバーも起動できるようにしました。結局どっちも管理の方法は大差ないので、この際どっちもできるようにしちゃえってことでやりました。

そして「24時間運用にしたい」ですが、これもほぼ完璧です。ディスコードに命令を送信すればいつでもサーバーを起動できます。起動に時間はかかりますが、些末なことでしょう。実家のIPアドレスが変動した日は翌朝までサーバーにアクセスできなくなりますが、IPアドレスが変動する頻度は相当低いらしいし、マルチプレイをするタイミングでそうなった事は今のところありません。

おお、いいじゃんいいじゃん。ほぼほぼ完璧です。優勝。ということでこの案を採用し、「マイクラサーバーどケチシステム」として運用を始めました。ちゃんちゃん。

感想

「マイクラサーバーどケチシステム」を構築した感想としては、非常に勉強になったなぁ、といった感じです。なんかいろんな技術使ったじゃん。WebAPI、WoW、DDNSSSL、プロセスの扱い方(stdin、stdout)、PaaS、discord.py。実家サーバー1日4時間運用に比べればだいぶ進歩しましたね。

特にSSL化なんかはですよ。GitHub Pagesとか使ってると当たり前のようにhttpsになってるじゃないですか。自宅サーバーとかでないと手作業でSSL化する機会がないので、とても貴重な経験になりました。

あとは、お金をほぼ全くかけずに運用できていて満足ですね。電気代は親の支払いなので。ヘヘッ。筆者は1円もお金を使っていません。最高。

以上、パソコン初心者なりにマイクラサーバーの運用を考えてみた、という記事でした。

どうもです。