山pの楽しいお勉強生活

勉強の成果を垂れ流していきます

【無料】Minecraft統合版サーバーをOracle Cloudで作成する

はじめに

内容の難しさ

  • なるべくわかるように書きますが、CloudサービスやLinuxの基礎操作ができないと作成するのは難しいです
    • SSHVimでのテキスト編集方法などは説明しません
  • 便利設定などはコード書いたりするのでこの辺りも慣れていないと難しいと思われます

コンパートメントの作成

前置き

  • コンパートメントとはリソースをグループ分けするようなものらしいです
  • コンパートメントの管理
  • 作成せずrootに配置しても動作は可能ですが、今後Oracle Cloudを別の用途で使用する場合に備えて作成しておきます

手順

  • コンパートメントページを表示
  • コンパートメントの作成ボタン押下
  • 必要な情報を入力
    • 名前: わかりやすい任意の名前(本記事では minecraft_server としました)
    • 説明: わかりやすい任意の説明(本記事では minecraft server としました)
    • 親コンパートメント: root
    • タグ: 必要であれば設定

インスタンスの作成

前置き

手順

  • インスタンスページを表示
  • インスタンスの作成ボタン押下
  • 必要情報を入力(その1)
    • 名前: わかりやすい任意の名前(本記事では minecraft_server_instance_test としました)
    • コンパートメントに作成: ↑で作成したコンパートメントを選択
    • 配置、セキュリティ: デフォルト
  • イメージとシェイプ
    • イメージ: Ubuntu22のMinimal(本記事では Canonical Ubuntu 22.04 Minimal としました)
      • Minecraft サーバーはUbuntu用としてリリースされているため
      • Oracle Linuxでも運用しておりWeb上にも記事は多くありますが、Ubuntuの方が気持ち軽い気がするのと、OS自体の情報はUbuntuの方が格段に多いので運用が楽です
    • シェイプ: VM.Standard.E2.1.Micro
      • 「Always Free対象」となっていることを確認
      • 「はじめに」に書いたが、AmpereにもAlways Free対象がありスペックは格段にこちらが高いが、ArmCPUで動作させるのは難しいです
  • 必要な情報を入力(その2)
    • VNIC名 オプション: デフォルト
    • プライマリ・ネットワーク: 新規仮想クラウド・ネットワークの作成
      • 新規仮想クラウド・ネットワーク名: デフォルト(必要があれば変更)
      • コンパートメントに作成: ↑で作成したコンパートメントを選択
    • サブネット: 新規仮想クラウド・ネットワークの作成
      • 新規サブネット名: デフォルト(必要があれば変更)
      • コンパートメントに作成: ↑で作成したコンパートメントを選択
      • CIDRブロック: デフォルト
  • プライマリVNIC IPアドレスセカンダリVNICオプション
    • デフォルトでOK
  • SSHキーの追加
    • キー・ペアを自動で生成を選択
      • 使いたいキーがあるならば適当にしてください
    • ※秘密キーの保存、公開キーの保存を忘れずに
      • 忘れた場合には作成時に警告してくれます
  • ブート・ボリューム
    • デフォルト
  • 作成ボタン押下
    • 「実行中」になればOK

固定IPを取得

  • IPが変わるとクライアント側で接続先を変更する必要があり、面倒なので固定します
  • ネットワーキング→IP管理→予約済パブリックIP
  • 「パブリックIPアドレスの予約」を押下して必要情報を入力
    • 予約済みパブリックIPアドレス名: わかりやすい任意の名前(本記事では minecraft_server_test_ip としました)
    • Create in Compartment: ↑で作成したコンパートメントを選択
  • パブリックIPアドレスの予約押下
  • 一覧に作成した名前で表示されていればOK

※このIPにクライアントから接続することになります

インスタンスのIPを固定

  • ↑で取得した固定IPをインスタンスに設定します
  • インスタンス画面を表示し、 下の方にある アタッチされたVNICを押下、選択。
    • 下の方にあるのですごくわかりにくいので注意
  • 下の方にある「IPv4 アドレス」を押下し、 から「編集」を押下
  • パブリックIPの割り当てを解除 → 更新
  • 再度、 から「編集」を押下
  • 「予約済みパブリックIP」が選択できるようになっているので、取得した予約済みIPアドレスを選択 → 更新
  • インスタンスに戻って、プライマリVNICのパブリックIPv4アドレスが取得した予約済みIPアドレスになっていればOK

インスタンスのポート開放

  • クライアントからサーバにアクセスできるようにポートを開放します
  • インスタンス画面を表示
  • プライマリVNIC内のサブネットを押下
  • イングレス・ルールの追加を押下
  • 必要な情報を入力
    • ソースCIDR: 0.0.0.0/0
    • IPプロトコル: UDP
    • 宛先ポート範囲: 19132-19133
      • IPv6で接続する場合に19133が使用されるので、実質的には19132だけでOK
  • 一覧に作成されたルールが表示されていればOK

インスタンスへのSSH接続

  • ssh がインストールされているか確認
    • ssh -V
  • OpenSSHのインストール
    • sshがインストールされていない場合はインストールします
    • Windowsの場合インストールされていない気がします
    • winget install Microsoft.OpenSSH.Beta
      • 本記事執筆時点ではBetaとなっていました winget search openssh で最新バージョンが出ていないか確認してください
  • インスタンス作成時に取得した秘密鍵、公開鍵を ~/.sshフォルダに格納
    • Windowsの場合は C:\Users\${ユーザー名}\.ssh
    • Windows以外は /home/${ユーザー名}/.ssh
  • ssh configの作成
    • sshコマンドを長く書くのは面倒なので設定ファイルに書きます
    • ~/.ssh を開く
    • config という名称でファイルを作成(拡張子は不要)
    • 設定値
      • Host: わかりやすい任意の名前。接続時に使用します(本記事では minecraft_test としました)
      • HostName: インスタンスのパブリックIPv4アドレス(↑で設定した予約済みIPアドレス
      • User: ubuntu
      • Port: 22
      • IdentityFile: ↑で置いた秘密鍵のPATH
    • サンプル↓(HostName)
Host minecraft_test
   HostName 192.0.2.0/24
   User ubuntu
   Port 22
   IdentityFile ~/.ssh/ssh-key-2023-10-28.key
  • インスタンスへ接続
    • ターミナルを開く
      • Windowsの場合は Windowsキー + Rcmd 入力
    • ssh ${↑のconfigで指定したHost} とコマンドを入力
      • 例: ssh minecraft_test
    • はじめて接続する場合にはfingerprint確認しろと出るので yes と入力
    • 以下のように接続できればOK

インスタンスの設定

sudo apt update
sudo apt upgrade -y

上記のようなメッセージが表示された場合は「15」入力し、一旦抜けてから sudo shutdown -r now と実行し、サーバーを再起動。

カーネルのバージョンが変わるので、再起動しろよっというメッセージです。(意訳) ※再起動すると当然ssh接続は切れるので、再度sshで接続してから次に進みましょう

sudo apt install vim zip unzip ufw cron -y
  • タイムゾーンの設定
    • デフォルトではUTCで日本時間で生活している民はややこしいので、日本時間に変更
sudo timedatectl
sudo timedatectl set-timezone Asia/Tokyo

sudo ufw status verbose
sudo ufw default deny
sudo ufw allow 22/tcp
sudo ufw allow 19132/udp
sudo ufw allow 19133/udp
sudo ufw enable
sudo ufw status verbose

  • システム再起動
    • 不要な気がするが、前回作成時にうまくいかなかったため再起動
    • sudo shutdown -r now
    • 再起動すると当然ssh接続は切れるので、再度sshで接続してから次に進みましょう

Minecraftをインストール

  • 現在のバージョンのURLを確認
    • 以下にアクセスし、最新のバージョン、URLを取得取得
      • www.minecraft.net
      • 上記のキャプチャの場合だと、「1.20.41.02」、「 https://minecraft.azureedge.net/bin-linux/bedrock-server-1.20.41.02.zip
      • ※もっと良いバージョン確認の方法があったら教えて欲しい
  • モジュールを取得
    • wget https://minecraft.azureedge.net/bin-linux/bedrock-server-1.20.41.02.zip
    • URLは上記で取得したURLを使用する
  • モジュールを解凍
    • unzip bedrock-server-1.20.41.02.zip -d ./minecraft
    • minecraft というフォルダ内に解凍します
    • 以下のようになっていればOK
  • 試し起動
    • minecraftフォルダに移動
      • cd minecraft
    • 起動
      • LD_LIBRARY_PATH=. ./bedrock_server
  • 試し接続
    • ※Switch版の場合、色々設定が必要です。ここではAndroid版(スマホ)で確認しています
    • サーバー → サーバーを追加
    • 入力
      • サーバー名: わかりやすい任意の名前(本記事では test_server としました)
      • サーバーアドレス: インスタンスのパブリックIPv4アドレス(↑で設定した予約済みIPアドレス
      • ポート: 19132
    • Worldに接続できたらOK
  • ログを確認
    • サーバー側に以下のようにログが出ていればOK
  • お試し起動終了
    • サーバー側で CTRL + C で終了

起動設定

  • 現在の方法でも普通に遊べますが、サーバー側で起動が必要ですし、ssh接続が切れたらMinecraftは止まってしまう
  • よって、サーバー起動時に自動で起動するように設定を行う
  • systemdの設定ファイルを作成、編集
    • sudo vim /etc/systemd/system/minecraft.service
  • 以下のように記載
    • 一通りオプションは調査していますが、気になる人は自分で調べてください
[Unit]
Description=Minecraft Bedrock Server
After=network.target local-fs.target

[Service]
Type=simple
User=ubuntu
Group=ubuntu
WorkingDirectory=/home/ubuntu/minecraft
Environment=LD_LIBRARY_PATH=.
ExecStart=/home/ubuntu/minecraft/bedrock_server
Restart=always

[Install]
WantedBy=multi-user.target

  • systemdに設定
sudo systemctl daemon-reload
sudo systemctl enable minecraft
sudo systemctl start minecraft

  • サーバーを再起動して、Minecraftが起動するかを確認
    • sudo shutdown -r now
  • サーバー再起動後に、クライアント(AndroidとかのMinecraftアプリケーション)から接続できたらOK

Nintendo Switch から接続する

はじめに

  • 基本的にXbox OneNintendo SwitchPS4/PS5 などは任意の外部サーバーに接続することはできません
  • そのため、本体側の設定を変更する必要があります
  • なお、色々なblog等でこの設定が紹介されていますが、これは↓を使用しています。この人は無償で提供してくれていますので、GitHubアカウントを持っている方は★、そうでない方は寄付等で感謝を示しましょう!!

手順

www.youtube.com

※英語ですが、本家の動画ですので一番わかりやすい。 ※どうしても日本語が良い、テキストでほしい場合には switch minecraft 外部サーバー - Google 検索 とかで調べると、色々出てきますが、情報古かったり間違っていたりするのでおススメはしません

未成年アカウントで外部サーバーに接続する場合

はじめに

  • 未成年は外部サーバーにアクセスすることができないように制限されています
  • MinecraftMicrosoftアカウントでログインする必要があり、Microsoftアカウントの年齢で制限されます
  • Microsoftではゲーム系の設定はXboxで管理するらしいので、Xbox.com 側で設定することになります。

手順

※概要だけ記載します。画面や設定内容は時期によってかなり変わるようなので参考程度にしてください

Minecraft設定

最低限の設定を記載しておく

  • server.properties
    • Minecraftのサーバー側の設定
    • allow-list=true にして下記の allowlist.json を有効にしておく
  • allowlist.json
    • サーバーにアクセスすることができるユーザー一覧
  • permissions.json
    • Minecraft内の権限の設定
    • 身内でやるなら operator が良いと思う

バックアップについて

  • Worldsフォルダがあれば復旧可能
    • 復旧経験あり
  • 加えて、上記の設定ファイル3種をバックアップしておけば良い

Minecraftバージョンアップについて

はじめに

  • Minecraftはサーバー側とクライアント側のバージョンが一致していないとプレイすることができない
  • Switch等だと自動でバージョンアップが行われるため、サーバー側も常に最新バージョンにアップデートする必要がある
  • が、統合版の最新バージョンを知るためのAPI等を見つけることができなかったので、クライアント側でバージョン差異でエラーになった際に手動でバージョンアップをすることを想定している
  • バージョンアップは最新のバージョンを取得、解凍した後に、Worldsと設定ファイルを上書きすればOK

スクリプト

以下のリポジトリのREADME参照 github.com

Minecraft のバックアップについて

はじめに

  • バックアップはworldsフォルダのみを取得する
    • 本来は設定ファイルも取得した方が良いが、大した設定していないので無視している
  • 容量削減のため1週間以上古いバックアップは削除している
    • 動作しているサーバーに直接バックアップしているため
    • 本来はCloud Storageにバックアップするのが良い

スクリプト

以下のリポジトリのREADME参照 github.com