0からRaspberry Pi 4でさくっとマイクラサーバーを建てるまで
知人からマイクラサーバーを建ててくれと頼まれたから仕方なく0から環境構築した話をするよ。
私はケチな上にパソコンの寿命管理にうるさいので(すぐ壊れるから)、自分のメインマシンを24時間稼働させるのは絶対嫌だし、電気代もかけたくなかった。
こういうときはやっぱり消費電力が超少ないシングルボードコンピュータのRaspberry Piに限る。
昔私は2系を使っていたけど、最新のラズパイは4だそうだ。CPUも1.5GHzのクアッドで、メモリも4GBついてるらしい。
最大消費電力は6Wらしいので、24時間ずっと稼働させても電気代は月100円くらい。
とりあえず悩んだら絶対これを買った方がいい。ファン、ヒートシンク、OSプリインストール済Micro SD、HDMIケーブルがついてくる。
OSプリインストール済みSDがあるので、起動してちゃちゃっと環境構築するだけ。普通に起動するとGUIが立ち上がるけどコンピューターリソースの無駄なのでさっさとCLIで起動しなおしたほうがいい。
とりあえずエディタはあったほうがいいので
sudo apt-get install vim
はやっておこう。(個人差アリ)
ローカルIPを固定する
多分デフォルトではDHCPを使ってると思うから、/etc/dhcpcd.confを弄る。
例えば、私のネットワーク環境はネットワークアドレスが192.168.11.0で、ルーターのアドレスが192.168.11.1で、サブネットマスクが255.255.255.0で、ローカルIPのホストの数字は(なんでもいいけど)25を割り当てたかったので、以下のようにした。
interface wlan0 static ip_address=192.168.11.25/24 static routers=192.168.11.1 static domain_name_servers=192.168.11.1
wlan0は無線のこと。無線の場合、そもそもインターネットにつなぐ必要があるので
wpa_passphrase [SSID] [pass]
しておくこと。ちなみにケーブル管理が絶望的に不得意じゃないのなら有線にしたほうがいいです。マジで。サーバーのレイテンシ全然違うよ(無線の人間が何言ってるんだって話だが)
DNS(domain name servers)アドレスってなんやねんって思った人は、まず間違いなくルーターのアドレスいれれば動くと思う。
(03/15 追記) サーバーの遅延について抗議されたので有線接続にした。IP固定の方法はinterfaceをeth0にするだけで他は同じ
rebootすればIPが目的のものになっているはず。
公開鍵を登録してSSH接続できるようにする
ラズビアン(ラズパイのデフォルトOS)はデフォルトでSSH接続ができるから、もうすでにSSH接続できるっちゃできるけど、セキュリティ的にも公開鍵を使ったほうが良い。
公開鍵の作り方はいくらでも資料があるのでぐぐってください。
自分のSSH接続したいメインPCで公開鍵を作ったら、scpコマンドでラズパイのホームディレクトリに転送する。
ユーザーネームはpiとすると
scp ./.ssh/id_rsa.pub pi@192.168.11.25:~/
次、ラズパイのコンソールに入って
mkdir .ssh cat id_rsa.pub >> .ssh/authorized_keys chmod 700 .ssh chmod 600 .ssh/authorized_keys
chmodしているのは念のため。sshはセキュリティ上この辺のファイルのパーミッションがガバガバだと弾かれるので。
これで公開鍵接続の準備は整ったので、パスワード接続を禁止する。
/etc/ssh/sshd_configを開いて、
PasswordAuthentication no PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
と記載しておく。
メインPCに戻って、./ssh/configで、ラズパイのホストの名前をつけてあげる。
名前はなんでもいいけど私はpi4にした。タイプ数少ないの最高!
Host pi4 HostName 192.168.11.25 IdentityFile ~/.ssh/id_rsa User pi
もうこれですぐつながる。
ssh pi4
ポートを開ける
マイクラサーバーのデフォルトのポートは25565。自分のルーターのマニュアル見ながら開放しよう。
ちなみに私はv6プラス接続なので、開放できるポートには制限がある。その場合もポート変換をかませば可能。
ここは各自ルーターのベンダーにお問い合わせくださいといった感じなので割愛する。
マイクラサーバーのダウンロード、起動
ラズビアンには多分JDKが最初から入ってたはずなので、ダウンロードしてすぐ起動できるはず。
適当にディレクトリ作って、 Download server for Minecraft | Minecraft ここからダウンロードリンクを取得したら
mkdir minecraft cd minecraft sudo wget DOWNLOAD_LINK
すると、ディレクトリにサーバー関連ファイルと、利用規約の同意書(eula.txt)が展開されるので
エディタでeula.txtをtrueに書き換える。(公式ページの利用規約を読んでから)
これで準備は完了。
ラズパイ4はメモリ4GBなので2GBくらいアサインするとして
sudo java -Xms2G -Xms2G -jar server.jar nogui
で起動。これでサーバーが全世界に公開されました。
ログ公開サーバーを作る
私はニートの知人にサーバーを貸してるので、仕事中に昼間からマイクラを遊んでる様子をみて励みにしたいから、ログが見れるHTTPサーバーを建てた。
ログサーバーなんて適当でいい、nodejsでちゃちゃっと書こう。ちなみにnodejsはラズビアンに既に入ってた。すげーなおい!
適当にディレクトリ作って、適当に.js拡張子でファイルを作って
var http = require('http'); var fs = require("fs"); const port = XXXX; // 適当なポート const server = http.createServer((req, res) => { if (req.method == "GET") { var data = fs.readFileSync(".path/to/minecraft/logs/latest.log"); res.writeHead(200, {"Content-Type": "text/plain"}); res.end(data); } else { res.writeHead(404, {"Content-Type": "text/plain"}); res.end("Sushi is not found"); } }).listen(port);
はい終わり。これはひどい! GETされるとリクエストパス関係なく常にマイクラサーバーの最新ログを返すだけのサーバー。それ以外のメソッドは404!
いいんだよこういうので。最高に堅牢なサーバーは何もしないサーバーだからね。
ちなみに私は例によってv6プラスなのでHTTPポートが開けられないから、適当なポート番号でlistenしてるよ。
このサーバーはデーモン化させたかったのでforeverを使った。
sudo npm install -g forever forever start app.js
これでどこにいてもサーバーが元気に稼働してる様子が見られる。
終わり。