☁️

Oracle Cloud Infrastructureで無料のMinecraft統合版サーバーを構築する

2021/12/21に公開

はじめに

https://qiita.com/advent-calendar/2021/minecraft-server-dev

こんにちは!この記事はMinecraftサーバ開発・運営 Advent Calendar 2021の21日目の記事です!

「マイクラのサーバーを建てたいけどお金がない...」
MiRm[1]もサービス終了しちゃったし...」

そんな方におすすめなのがOCI: Oracle Cloud Infrastructure
操作の手軽さなどは有料のConoHaなどのVPSには叶いませんが、一度構築してしまえば無料でそこそこ使えます。

本当は4Core 24GBメモリが無料で使えてしまうVM.Standard.A1.Flexが欲しかったですが、いつ見ても取れない[2]ので、今回は1コア 1GBメモリのVM.Standard.E2.1.Microを使います。
ちなみに無料枠だと2つ使えるので、DBとサーバーに分けることもできます。

サーバー構築

アカウント作成

まずこちらからOCIのアカウントを作りましょう。
登録方法はこちらの記事が参考になるはずです。

https://qiita.com/manaki/items/d8684f8e15ccf09bdc4e

コンピュートインスタンスの作成

アカウントが作成できたらコンピュートインスタンスの作成です。
左上の三本線メニュー[3]をクリックし、「コンピュート > インスタンス」に進みます。

OCI instance menu

進んだらこのような画面になると思うので「インスタンスの作成」をクリックします。

OCI instances

「コンピュートインスタンスの作成」という画面になります。変えるべきところは以下の通りです。

インスタンス名

インスタンス名の初期名は「instance-yyyyMMdd-HHmm」ですが、用途に応じて変えましょう。

OS, Shape

BedrockDedicatedServerPocketMine-MPはUbuntuが推奨されていますが、OCIのCanonical UbuntuはUFW(ファイアウォール)が正常に動作しない問題がある[4]ため、ここではOracle Linux(CentOSベース)をおすすめします。

OCI instance os

Shapeは「VM.Standard.E2.1.Micro」を使います。

秘密鍵

OCIでは公開鍵認証を自動で設定してくれます。パスワードを入れる代わりに秘密鍵ファイルで認証するものです。「秘密キーの保存」をクリックして、わかる場所に保存しておきましょう。

OCI instance secretkey

終わったら左下の「作成」ボタンをクリックしましょう。

ファイアウォール設定(OCI側)

インスタンスを作成したのでもうSSHでサーバーに繋げられますが、今回はマインクラフトのサーバーを開けることを目的としているため、マインクラフト統合版のポート開放をします。

左上の三本線メニューをクリックし、「ネットワーキング > 仮想クラウド・ネットワーク」に進みます。すると、先程インスタンスを作成したときに自動的に作成された「vcn-yyyyMMdd-HHmm > subnet-yyyyMMdd-HHmm > Default Security List for vcn-20211203-1503」というふうにクリックして進んでいきます。

OCI security ingress

すると、画像のような「イングレス・ルール」を設定する画面になるので、「イングレス・ルールの追加」から追加します。以下の画像のように設定してください。

OCI security 19132

追加できたら、OCI側のポート開放は完了です。

ファイアウォール設定(VMインスタンス側)

VMインスタンスとのSSH接続

まず、インスタンスのIPアドレスを確認します。左上の三本線から「コンピュート > インスタンス」に戻りましょう。

OCI instances

「パブリックIP」の項目にインスタンスのIPアドレスが表示されているはずです。メモしておきましょう。

公開鍵暗号を使ったSSH接続についてはRLoginTerminusがおすすめです。使用方法についてはそれぞれのホームページやこちらの記事を参考に接続してください。

https://zenn.dev/creationup2u/articles/ec2a84aad2d05c

なお、ユーザーは「opc」が自動的に作成されます。

VMインスタンスの初期設定

VMインスタンスにSSH接続できたらまずはパッケージを更新しましょう。

sudo dnf update -y

ファイアウォールの設定

Oracle Linuxはデフォルトでfirewalldが有効ではないため、以下のコマンドで有効にします。

# ファイアウォールを自動的に立ち上がるように
sudo systemctl enable firewalld

# ファイアウォールをデーモンとして起動
sudo systemctl start firewalld

さらに、以下のコマンドで先程OCI側のファイアウォールで開放したポートを開放します。

# 19132番のUDPポートを開放する
sudo firewall-cmd --add-port=19132/udp --permanent

変更したらfirewalldをリロードさせて、変更を適用します。

# 変更を適用する
sudo firewall-cmd --reload

以下のように19132/udpポートが開放できていれば成功です。

sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens3
  sources: 
  services: ssh
  ports: 19132/udp # <= 追加された
  protocols: 
  forward: no
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Minecraft統合版のサーバーを建てる

これで準備ができたので、サーバーを建ててみましょう。今回は公式サーバーのBDS: BedrockDedicatedServerを使います。MinecraftのEULAに同意した上でここからダウンロードしましょう。

# {version}はMinecraftのバージョンです。
# 上のURLで一度ダウンロードして、そのダウンロードURLを以下の様に打ち込みます
wget https://minecraft.azureedge.net/bin-linux/bedrock-server-{version}.zip

# 例
wget https://minecraft.azureedge.net/bin-linux/bedrock-server-1.18.2.03.zip

# zipの展開
unzip bedrock-server-1.18.2.03.zip

zipの展開までできたら「bedrock-server」を実行しましょう。

./bedrock-server

以下のように表示されればサーバーが起動したことになります。SSH接続のときに使ったIPでマインクラフトから参加してみましょう。

NO LOG FILE! - [] setting up server logging...
[2021-12-20 08:43:50:675 INFO] Starting Server
[2021-12-20 08:43:50:676 INFO] Version 1.18.2.03
[2021-12-20 08:43:50:676 INFO] Session ID e4a7c216-c388-4c02-b865-8560ec8273e8
[2021-12-20 08:43:50:679 INFO] Level Name: Bedrock level
[2021-12-20 08:43:50:684 INFO] Game mode: 0 Survival
[2021-12-20 08:43:50:684 INFO] Difficulty: 1 EASY
[2021-12-20 08:43:50:969 INFO] opening worlds/Bedrock level/db
[2021-12-20 08:43:54:829 INFO] IPv4 supported, port: 19132
[2021-12-20 08:43:54:829 INFO] IPv6 supported, port: 19133
[2021-12-20 08:43:55:663 INFO] Server started.
[2021-12-20 08:43:55:729 INFO] IPv4 supported, port: 35095
[2021-12-20 08:43:55:730 INFO] IPv6 supported, port: 54399

エラーが表示される場合

以下のようなエラーが表示される場合、libnslをインストールしてください。

./bedrock_server: error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory

# libnslをインストール
sudo dnf install -y libnsl

まとめ

OCIでマインクラフト統合版のサーバーを建ててみました。1コア1GBメモリの割にはかなり快適に動いている感じで、気になるのはdnfでパッケージを入れるときに少し遅いぐらい...っていう感じなので、是非活用してみてください。

もし分からないことがあれば

などのコミュニティで聞いてみてくださいね!

次回予告

明日(12/22)はpopkechupkiさんの「CloudburstMC/Serverのプラグインの作り方」

CloudburstMCは元NukkitXというNukkit(Java製の統合版サーバーソフト)の派生で、JavaEditionのサーバーソフトに近い使い心地になってます。JavaとかKotlin好きな方は明日の記事必見ですね!

明後日(12/23)は_yussy_さんの「クリスマスに向けてリア充を逃がさず爆破する弓を作る」
です!

リア充を逃さず爆破しましょう!いい心がけです!

その他のこれまでの記事はこちらで見てみてくださいね!

https://qiita.com/advent-calendar/2021/minecraft-server-dev


脚注
  1. 2021年10月13日を以てサービス終了した無料のMinecraftサーバーを提供するサービス。スマホからも操作できる、サポートが日本人、などの手軽さから、多くのサーバーが動いていた。 ↩︎

  2. Terraformなどを使えば取れるらしいが、そこまでして欲しいわけじゃないので見送り。 ↩︎

  3. ハンバーガーメニューって名前らしい。 ↩︎

  4. https://docs.oracle.com/ja-jp/iaas/Content/knownissues.htm#ufw ↩︎

Discussion