廃PCをMinecraftサーバーにして遊んだ話【Linux】
絶妙に捨てるには惜しいPCにminecraftサーバー機として第二の人生を与え、QOLを上げる記事
注意
本記事は素人が行き当たりばったりに自宅サーバーで遊んだ記録であり、恐らく結構間違った内容を含みます。
真似する場合は自己責任で、信頼できるソースの情報と照らし合わせながら進行し、そして有識者の方は間違っている点に気づいたら優しく教えてくださると私が助かります。
1. 経緯(追走したいだけなら読まなくてもよい)
minecraftサーバー、特に工業やらのmodを入れた状態のものは、信じられないほど大量のリソースを消費する。
これまで私はメイン機のスペックに甘えて適当に立てたサーバーで友人と遊んでいたが、以下の3点で不満があった。
起動が面倒(起動用batファイルおよびUPnPCJの起動が手動)
どうやらUPnPはあまり使わない方がいいらしい(セキュリティ面の懸念)
24時間回せない(電源を落とせなくなるし、うるさい)
そこで床に転がっていた廃PC(Win10搭載)を代わりのサーバー機として数日間運用していたが、今度はRAMが足りない。(Ivy Bridge時代の物体のため、RAMを8GBしか搭載していない)
少しでもメモリを節約するため、軽いらしいLinuxをサーバー機に入れようと思い、最初に名前が浮かんだ 竹林人間氏開発のNNLinux(現在はダウンロードリンクが切れているため、私は昔落としたISOを利用した)を試すも、ファイルシステム関連のエラーによりインストールに失敗。トラブルシューティングが面倒なため別のLinuxを入れるかと思い、次に名前が浮かんだRaspbianのベースらしいDebianをインストールした。
しかしこれも運用数日で結局GUIがメモリ4GBくらい食ってるという事実に気づき、いよいよCLI環境への移行を決意した。
2. 用意するもの
本記事の内容を追走する場合、以下にあるものが必要となる。もしかしたら記入漏れもあるかも。
廃PC(できれば16GB以上のRAMがあるもの、CPU性能も多少は欲しい)
USBメモリ(インストールメディアに使うので、多分容量が小さすぎると駄目)
初期設定につかう画面とキーボード
3. Proxmox VEのインストール
Proxmox VEはどうやら仮想化というやつをやるためのソフトらしく、これを入れると仮想的にたくさんマシンを生やすことができるらしい。私のような素人がサーバーを触るとどうせすぐ壊すため、今回はこれを採用した。
Proxmox VEのインストールについては特に難しいことはなく、公式サイトのダウンロードページからISOを落とし、balenaEtcherというやつでUSBメモリに焼き、Windowsインストールのノリで廃PCに刺して起動すればあとは指示に従うだけでインストールできる。廃PCのストレージはフォーマットされるため注意。
このとき、割り当てたローカルIPを覚えておく。
4. Proxmoxの初期設定
初期設定が終わったら、廃PC改めサーバー機の8006番ポートに対して、他PCのブラウザからアクセスする。
するとえらい親切な管理画面が出てくるのでrootとしてログインを済ませると、恐らくサブスクリプションがないよ的な警告が出てくる。私が適当に調べた感じだとあまり影響はなさそうなので、左のメニューからpveを選択、その右のメニューでリポジトリの項目を選択し、enterpriseと書いてあるやつを片端から無効化、「pve-no-subscription」というケチ向けのやつを追加しておく。
ついでに後でubuntuをインストールするため、「local (pve)」を選択しCTテンプレート→テンプレートから「ubuntu-25.なんとか」みたいなやつを落としておく。
5. CTを生やす
右上の「CTを作成」ボタンを押し、いろいろ設定しろと言われるため埋める。「テンプレート」はさっき落としたubuntu、ディスクは後から増やせるため初期設定の8GB、CPUコアは2コア以上、メモリは8GB以上割り当てる。
「ネットワーク」では「IPv4/CIDR」の項目に「192.168.1.{好きな数字}/24」の形式で割り当てたいローカルアドレスを指定し、ゲートウェイは適当にルーターのローカルアドレスを設定しておく。
ちなみにCTというのはコンテナのことで、実質負荷0で仮想マシンを生やしまくれる便利システムである。
6. よく使うコマンドを覚える
ここからはubuntuをCLIでしばく事となるため、よく使うコマンドを覚える必要がある。私がたくさん使ったコマンドは以下。
cd {パス}
自分が居るフォルダを変更する。エクスプローラーでフォルダを開く感覚。dir
今居るフォルダ内のファイルを一覧表示する。nano {ファイル名}
テキストファイルを作ったり編集したりする。apt
ソフトを入れたりする。apt update
aptを触る前に唱える呪文。apt upgrade
ソフトを片端からアップデートする。apt install {ソフト名}
指定したソフトをインストールする。
systemctl
systemctl enable {サービス名}
指定したサービスを有効化する。systemctl start {サービス名}
指定したサービスを起動する。systemctl stop {サービス名}
指定したサービスを止める。
login {ユーザー名}
指定したユーザーとしてログインする。su -
管理者(root)としてログインする。Ctrl+C
今実行しているものを中断する。Ctrl+D
ログアウトしたりするときに使う。
この辺りは息をするように連打する羽目になるので、是非とも覚えたい。
7. aptでソフトをアップデート/インストールする
apt update、apt upgradeで最初から入っているソフト達をアップデートして、apt installでufw(簡単にいじれるファイアウォール)とscreenとjavaを入れる。javaに関しては openjdk-{Minecraftに使うjavaのバージョン}-jre-headlessと指定すると入ると思う。
8. ufwを設定する
ufwで使わないポートを閉じておくといいらしいので、ufw enableでufwを有効化した後、ufw default denyでポートを片端から閉じて、ufw allow 25565 proto tcpとufw allow 22でminecraftの通信とSSHだけ通るようにしておく。ufw reloadで再読み込みできると思う。
9. 適当にminecraftサーバーを置く
好みの場所にサーバー用のディレクトリ(フォルダの格好つけた言い方)を作成し、お好みのminecraftサーバーを置いておく。CLI操作が面倒だったり既に使っているサーバーがある場合はWinSCPというやつを使うとエクスプローラー感覚のGUIでファイルを投げれる。
10. サービス化する
実はもう既にほとんど完成しているのだが、自動で起動できると嬉しいためそれをやる。nanoで/lib/systemd/system/minecraft.serviceを作成し、以下のような内容を書き込む。
[Unit]
After=network-online.target
[Service]
Type=forking
WorkingDirectory=/home/user/server
ExecStart=screen -S minecraft -d -m java -Xmx7G -jar /home/user/server/mohist.jar
ExecStop=screen -S minecraft -X quit
Restart=always
[Install]
WantedBy=multi-user.target
WorkingDirectoryとExecStartのjavaファイルの場所、名前はさっき置いたサーバーに合わせて変更する。
保存したらsystemctlで有効化と起動をする。minecraftサーバーのCLIを触りたくなったらscreen -rで触れる。
11. サーバー(VPS)を借りる
実はここまでの内容は全部罠で、minecraftが動かないレベルのでいいからサーバーを借りたほうがいい。
というのも身内で使うだけならあとはルーター(ONU)で25565番をサーバー用コンテナのローカルアドレスに割り当てるだけなのだが、どうも自宅のIPを晒すのは気分が良くない。
ということで、通信を中継するためのサーバーを借りる。ルーターだけ家の外に置くイメージだ。
おすすめはVultrの5ドルくらいのやつ。多分VPSの方もアップデートしたりufwでいらんポート閉じたほうがいい。
12. 借りたサーバーとminecraft用コンテナにwireguardを入れる
中継サーバーとおうちの通信をするにあたって、VPNを経由させておくと自宅のポートを開けなくてよかったり暗号化できたりするようなのでやる。この記事がものすごく分かりやすかったためそっちを読んでほしい。
13. haproxyで通信を横流しする
haproxyというやつをVPSにインストールする。/etc/haproxy/haproxy.cfgの下の方を編集し、以下の内容を記述する。
frontend tcp_front
bind *:25565
mode tcp
default_backend mc
backend mc
mode tcp
server {wireguardでminecraft用コンテナに割り当てたローカルIP}:25565 check
あとはhaproxyをsystemctlで起動し、minecraft用コンテナからpingを飛ばすと開通する。
これで借りたサーバーのIPアドレスが自宅のminecraftサーバーに繋がった。
14. minecraftで遊ぶ...?
これで自宅minecraftサーバーを快適に運用できるようになったので本来的には終わりでいいのだが、やはり余っている処理能力とストレージが気になる。
そうだ、クラウドストレージ、置こう。
15. 勢い余ってNextCloudを入れる
NextCloudというのを立てると、Googleに頼っていたようなクラウドサービスが自前で動かせるらしい。まずCTテンプレートのところでturnkey-nextcloudみたいなやつを落として、nextcloud用のコンテナを立てる。
初期設定を済ませたらufwとwireguardの設定を済ませ、haproxyにはhttp用のfrontendとnextcloud用のbackendを設定する。
http通信では心許ないがnextcloudを使う端末にwireguardを入れて回るのも面倒なため適当なドメインを取得し、Cloudflare DNSの無料SSLを刺す。 これで自前minecraftサーバーどころか、自前クラウドストレージを利用することができる。便利。
私は何をしているんだ?
参考文献
@waigoma. "Minecraft (JE) 鯖を systemd と screen で動かして cron で自動再起してみる". qiita. 2023-12-18. https://qiita.com/waigoma/items/7b0ab4023b248d74ee88
unchama. "MinecraftサーバーでDDoS対策やってみた". キマグレアドベンチャー!. 2019-02-14. https://unchama.hatenablog.com/entry/2019/02/14/234158
かずひら. "HAProxyでTCPロードバランシング". CLOVER. 2016-12-13. https://kazuhira-r.hatenablog.com/entry/20161213/1481654180
@tama_ham. "WireGuardを使って爆速でVPNトンネルを構築する". qiita. 2020-11-14. https://qiita.com/tama_ham/items/52d45d618edccbb914ca
江口 佳紹. "Proxmoxのlxcを使ってNextCloudをお手軽に構築". qiita. 2024-02-16. https://qiita.com/n-eguchi/items/14ee6d7cf154c757028b