RaspberryPiでMinecraftサーバーを運営してみよう!【アドカレ2021・23日目】

アドベントカレンダー2021

2021年デジクリアドベントカレンダーの23日目の記事です。23日目です。

今回はデジクリ内で?Minecraftのマルチの人気?が高まっているようなので、超小型で安価なLinuxコンピュータであるRaspberry Piを用いたMicrosoftサーバーの構築の仕方を解説していきます。

Raspberry Piとは?

英国のラズベリーパイ財団によって作られている教育向けシングルボードコンピュータです。CPUにはPCなどで使われるx86プロセッサではなくARMプロセッサが使われており、1万円以下で入手でき非常に安価なコンピュータです。1万円以下であることとARMゆえの低消費電力、プログラムで制御出来るGPIOを備えることで教育向けというよりはコンピュータオタクのおもちゃとして使われていることが多い気がします。

今回の内容に関して

Raspberry Piのセットアップ方法に関しては適宜省略していきます。(参考になりそうなURLは載せます) 後半のMinecraftサーバーのセットアップやルータの設定に関してはRaspberry PiでなくてもLinuxを搭載したPCであれば殆ど同じですので使わないPCにLinuxを入れてやるにも参考にできます。

Raspberry Piのセットアップ

使う物

  • Raspberry Pi (4B 8GBが手に入れば一番良い、4B 4GBでも可)
  • microSD 32GB (class 10以上の性能が必要。それ以外は遅すぎて話しにならん)
  • 電源ケーブル (4BなどはTypeCだが、それ以前の3B+や3BなどはmicroUSBなので注意)
  • ACアダプター(5V 3A出力、足りないとRaspberry Piに負荷がかかったときに落ちます)
  • HDMIコード(4Bの場合はmicroHDMI to HDMIコード)
  • HDMIモニタもしくはHDMIキャプボ
  • USBキーボード・USBマウス

Raspberry Piは4Bという最新のバージョンを購入することをおすすめします。CPU性能もメモリ量も全然違うからです。 Webサーバー程度であれば3Bという一つ前のバージョンでも良いですがね。 microSDはRaspberry PiのOSが入るものになります。普通のPCではSSDですがmicroSDなので、できるだけ速いものを選ばないとCPU性能の足を引っ張ります。秋葉原の「あきばおー」で適当にsandiskやKIOXIAのmicroSDを買えばOKです。 HDMIモニタもしくはHDMIキャプボと書いてありますが、HDMIキャプボがおすすめ。なんでかって、資料を見ているPCと同じ画面でRaspberry Piが操作できるからですね。HDMIキャプボですが、最近では1080p30fpsの安いものが多くてよいですね。自分もこれを利用しています(秋葉原で880円で購入出来る) Amazonでは少し値が上がって2000円~4000円ほどで1080p 60fpsのものが売っていますが99.9%x詐欺なのでご注意を。 USBキーボードやUSBマウスは何でも良いです。後でPCから遠隔操作するので、その設定が済むまで何らかのデスクトップPCから拝借しておきましょう。

OSのインストール

さぁ!!!皆さん大好き?OSのインストールですね! えっ!?好きじゃない? 私は好きですけどね。 Raspberry PiのOSは色々種類がありますが、一番有名でDebianベースで使いやすいRasbianをインストールしていきます。 まずはここからOSをmicroSDにインストールするソフトをダウンロードします。 WindowsPCならDownload for Windowsですね。 インストールするソフトのインストールが終わったら起動します。

raspi-1.png

CHOOSE OSからRasbian(32bit)を選択します。

raspi-2.png

CHOOSE STORAGEではmicroSDを選択します。 準備が出来たらWRITEを押します。

raspi-3.png

選択したSTORAGEを削除しちゃうけどOK?的なメッセージが出るのでYesを選択しましょう。

書き込みが完了したらmicroSD内はこんな感じになっていますね。

raspi-4.png

Raspberry Piへの接続

このままRaspberry Piに刺して電源を繋げば動くのですがHDMIモニタを使って設定をするのは少々面倒ですね。 なのでSSHが最初からできるように設定をしていきます。

microSDカード内にsshという名前で空のファイルを作ります。 作り方としてはWindowsであれば右クリックして新規系からテキストファイルを作り名前をsshにすればOKです。間違って拡張子付でssh.txtにはしないように注意してください。 できたらmicroSDをRaspberry Piに刺して電源を接続します。 電源が入ったらしばらく放置します。5分ぐらい?

そこそこ時間が経ったらssh接続をしてみます。

WindowsであればPowerShellにて

ssh pi@raspberrypi

とします。

pi@raspberrypi's password:

となったら標準のパスワードであるraspberryを入力します。(入力しても画面に出てこないので注意。自分を信じてキーボードを撃って下さい

接続ができると

pi@raspberrypi:~ $

と出て入力状態になっていますね。ヨシ!

さて次は早速Raspberry PiのプライベートIPアドレスを固定化します。 プライベートIPアドレスを固定化するのは、今回のようにSSHするときに確実に接続できるようにするためと、この後サーバーとして使うときにルーターから通信を転送する先を固定にしたいためです。

まずは、現在のIPアドレスを確認します。

ip a

とやると

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:43:89:43 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.56/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0
       valid_lft 258747sec preferred_lft 226347sec
    inet6 2001:f70:a0c0:2900:c7c0:1623:5b7f:7a49/64 scope global dynamic mngtmpaddr noprefixroute
       valid_lft 2592000sec preferred_lft 604800sec
    inet6 fe80::d356:7ea7:654a:8948/64 scope link
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether b8:27:eb:16:dc:16 brd ff:ff:ff:ff:ff:ff

な結果が返ってくると思います。今回利用している有線LANのポートはeth0なのでeth0の項目を見ます。 IPアドレスは192.168.1.56のようです。これをメモします。

次に以下のコマンドでネットワークの設定ファイルを開きます。

 sudo nano /etc/dhcpcd.conf

raspi-5.png

こんな画面が出てきましたね。 矢印キーで一番下まで移動して 次のようなものを追記します。

interface eth0
static ip_address=192.168.1.56/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

ip_addressはもちろん先ほど調べたIPアドレスを。他二つのアドレスは最後の56の部分が1になったアドレスを指定します。 (基本的に192.168.x.yならルーターのアドレスは192.168.x.1だからです。) 書けたらCtrl + O を打ってEnterを押したら変更が保存され、Ctrl + Xで元のシェルに戻ります。

Minecraftサーバーのセットアップ

MinecraftサーバーはJava版でやっていきます。

OpenJavaのインストール

mkdir ~/bin
wget https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.1%2B12/OpenJDK17U-jdk_arm_linux_hotspot_17.0.1_12.tar.gz
tar --extract --file OpenJDK17U-jdk_arm_linux_hotspot_17.0.1_12.tar.gz --directory=$HOME/bin
sudo update-alternatives --install "/usr/bin/java" "java" "/home/pi/bin/jdk-17.0.1+12/bin/java" 1

次に使うJavaを今インストールした物に変更します。

sudo update-alternatives --config java

1を入力してエンターします。

Java版Minecraftサーバーのダウンロードと実行

まずはMinecraft用のフォルダを作り入ります。

mkdir minecraft_java
cd minecraft_java

Minecraftの公式サイトからサーバーのjarファイルをダウンロードします。 Webサイトのminecraft_server.x.x.x.jarのリンクを右クリックしてコピーして以下のようにwgetでダウンロードします。

wget https://launcher.mojang.com/v1/objects/125e5adf40c659fd3bce3e66e67a16bb49ecc1b9/server.jar

ダウンロードしたJarファイルを以下のコマンドで実行します。

java -Xmx800M -Xms800M -jar server.jar nogui

一度目の実行で必要なファイル群が生成されます。 eula.txt内を先ほど使用したnanoで編集します

nano eula.txt

eula=trueに変更します。 保存はCtrl + O してEnter、終了はCtrl + X server.properties内で色々とサーバー設定ができます。ここの書き方に関しては省略します。

最後に再度サーバーソフトを起動します。

java -Xmx800M -Xms800M -jar server.jar nogui

メモリを2GB使用する例です。(4GBのRaspberry Piの場合、3GBくらい割り当てるとよさそう?)

最後にMinecraftで使うポートのファイアーウォールを開けます。

sudo ufw allow 25565

ここまでできたらLAN内からRaspberry PiのIPアドレスでMinecraftサーバーにアクセス出来るはずです。

ルーターの設定

各メーカーによって様々なので、やらないといけない事(概要)だけ書きます。 本当はスクショありで説明したいところですが、我が家のルーターは皆さんが使っているような民生品ではなくヤマハの業務用のRTX830というルーターを使っているので参考にならないと思い、掲載しません。(逆に使っている人はここの話しいらんでしょ)   やることはシンプルです。 外部(WAN)から来た通信(25565ポート)をRaspberry PiのIPアドレスに向けて転送してあげる設定をすることです。 ルーター設定画面でポートフォワーディングやNATエントリ、ポート開放などの言葉で説明されている項目です。 おそらくそこでは優先順位(これは適当で良い)や転送先のIPアドレス(Raspberry PiのIPアドレス)、ポート番号(今回は24465)を設定できるはずです。

他人がアクセスできるようにするためにグローバルIPアドレスを調べる

このサイトにLAN内のPCからアクセスしてグローバルIPアドレスを確認します。 確認できたら、Minecraftを入れたPCをスマホテザリングなどでインターネットに繋ぎ、グローバルIPアドレスを指定してMinecraftサーバーにログインしましょう。 入れたのならルーターの設定は大丈夫ということです!

最後に

どうでしたか?案外簡単にMinecraftサーバーがたてれること、Raspberry Piを使えば安くサーバーがたてれることを理解していただけましたか。   ちなみに現在自分がデジクリ内で運用しているMinecraftサーバーはRaspberry Piではなく高性能なサーバー上に生やした仮想マシン内にたてています。Raspberry Piも良いのですが、やはり大人数が入ることや作ったり消したりをするには仮想マシンでの運用が楽です。機会があれば仮想マシンサーバーOSに関してもブログを書きたいと思います。