profile picture

Minecraft Java Edition のサーバーを立てる

January 03, 2023 - game minecraft forge java edition mod galacticraft gcp rathole

概要

Minecraft Java Edition のサーバーを立てます。

GCP

GCP のファイアウォール、リバースプロキシ、DNS を設定します。

ファイアウォールの設定

VPC ファイアウォールのルールを作成します。

  1. サイドメニューから VPC ネットワークファイアウォール 選択します。

  2. ファイアウォール ルールを作成 を選択します。

  3. 項目に次の値を入力し 作成 ボタンを選択します。

    項目名入力値備考
    名前minecraft任意の値
    説明minecraft のルール任意の値
    ターゲットタグminecraft任意の値
    送信元 IPV4 範囲0.0.0.0/0
    プロトコルとポート > 指定したプロトコルとポート > TCP25565TCP チェックボックスにチェックを入れる

リバースプロキシの設定

Compute Engine で rathole を起動してリバースプロキシを立ち上げます。

Compute Engine のインスタンスは Google Cloud の無料プログラム を参考に設定します。

  1. サイドメニューから Compute EngineVM インスタンス 選択します。

  2. インスタンスを作成 を選択します。

  3. 項目に次の値を入力し 作成 ボタンを選択します。

    項目名入力値備考
    名前instance-1任意の値
    リージョンオレゴン: us-west1
    マシン構成 > シリーズE2
    マシン構成 > マシンタイプe2-micro
    ブートディスク > OSUbuntu
    ブートディスク > バージョンUbuntu 18.04 LTS
    ブートディスク > ブートディスクの種類標準永続ディスク
    ブートディスク > サイズ (GB)30
    ファイアウォール > HTTP トラフィックを許可する許可チェックボックスにチェックを入れる
    ファイアウォール > HTTPS トラフィックを許可する許可チェックボックスにチェックを入れる
    詳細オプション > ネットワーキング > ネットワーク タグminecraftファイアウォールのターゲットタグを入力する
  1. 作成したインスタンスの SSH を選択し SSH 接続します。

  2. インスタンスのポートを開放します。2333 は rathole 、 25565 は minecraft のポート番号です。

    sudo ufw allow 2333
    sudo ufw allow 25565
    sudo ufw reload
    
  3. rathole の設定ファイル server.toml を作成します。詳細は readme を参照してください。

    # server.toml
    [server]
    bind_addr = "0.0.0.0:2333"
    
    [server.services.mc-je]
    token = "mc-je-token"
    type = "tcp"
    bind_addr = "0.0.0.0:25565"
    
  4. rathole を起動します。

    sudo docker run -it --rm -p 2333:2333 -p 25525:25525/tcp -v "/home/st-little/server.toml:/app/server.toml" rapiz1/rathole:latest --server /app/server.toml
    

予算の設定

  1. サイドメニューから お支払い を選択します。

  2. お支払いのサイドメニューから 請求先アカウント を選択します。

  3. お支払いのサイドメニューから 予算とアラート を選択します。

  4. 予算を作成 を選択します。

  5. 項目に次の値を入力し 終了 ボタンを選択します。

    項目名入力値備考
    範囲 > 名前minecraft任意の値
    金額 > 目標金額1000予算の上限金額

DNS の設定

Cloud DNS を使用してドメインを設定します。

  1. サイドメニューから ネットワーキングCloud DNS を選択します。

  2. ゾーンを作成 を選択します。

  3. 項目に次の値を入力し 作成 ボタンを選択します。

    項目名入力値備考
    ゾーンのタイプ公開
    ゾーン名mc-zone任意の値
    DNS 名DNS 名の接尾辞
    説明Minecraft DNS任意の値
  4. 作成したゾーンを選択し ゾーンの詳細 を表示します。

  5. レコードセットの追加 を選択します。

  6. 項目に次の値を入力し 作成 ボタンを選択します。

    項目名入力値備考
    DNS 名DNS ゾーンのサブドメイン
    リソース レコードのタイプA
    IPv4 アドレスVM インスタンスの外部 IPリバースプロキシの設定 で作成した Compute Engine のインスタンス

Minecraft Java Edition のサーバー

Minecraft Java Edition のサーバーを立ち上げます。

準備

Minecraft に必要なフォルダ、ファイルを作成します。

  1. フォルダを作成します。

    フォルダ名備考
    volumeワールドデータ用のフォルダ
    configサーバー設定用のフォルダ
    modsmod 用のフォルダ、今回は Galacticraft の jar ファイルを入れる
    backupsワールドデータのバックアップ用のフォルダ
  2. whitelist.json を作成し Minecraft にログインできるプレイヤーを制限します。

  3. rathole の設定ファイル client.toml を作成します。詳細は readme を参照してください。

    # client.toml
    [client]
    remote_addr = "myserver:2333"
    
    [client.services.mc-je]
    token = "mc-je-token"
    type = "tcp"
    local_addr = "mc:25565"
    

コンテナ

サーバーのコンテナを作成、起動します。

  1. コンテナの定義を作成します。

    version: '3.7'
    
    services:
      # https://github.com/itzg/docker-minecraft-server
      mc:
        image: itzg/minecraft-server:java8-multiarch
        ports:
          - 25565:25565
        environment:
          VERSION: 1.12.2
          EULA: "TRUE"
          TYPE: "FORGE"
          MEMORY: "4G"
          OVERRIDE_SERVER_PROPERTIES: "TRUE"
          SERVER_NAME: "mc-je"
          MODE: "survival"
          DIFFICULTY: "normal"
          MAX_PLAYERS: 5
          OVERRIDE_OPS: "TRUE"
          OPS: ""
          ENABLE_WHITELIST: "TRUE"
          ENFORCE_WHITELIST: "TRUE"
          GUI: "FALSE"
        tty: true
        stdin_open: true
        volumes:
          - /mc-je/volume:/data
          - /mc-je/config:/data/config
          - /mc-je/mods:/data/mods
          - /mc-je/whitelist.json:/data/whitelist.json
        networks:
          - internal
    
      # https://github.com/rapiz1/rathole
      port_forwarding:
        depends_on:
          - mc
        image: rapiz1/rathole
        restart: unless-stopped
        command: ["--client", "/app/client.toml"]
        tty: true
        volumes:
          - /mc-je/client.toml:/app/client.toml
        networks:
          - internal
    
      # https://github.com/itzg/docker-mc-backup
      backups:
        image: itzg/mc-backup
        environment:
          BACKUP_INTERVAL: "24h"
          PAUSE_IF_NO_PLAYERS: "true"
          PRUNE_BACKUPS_DAYS: 7
          # instead of network_mode below, could declare RCON_HOST
          # RCON_HOST: mc
        volumes:
          # mount the same volume used by server, but read-only
          - /mc-je/volume:/data:ro
          # use a host attached directory so that it in turn can be backed up
          # to external/cloud storage
          - /mc-je/backups:/backups
        # share network namespace with server to simplify rcon access
        network_mode: "service:mc"
    
    networks:
      internal:
    
  2. コンテナを起動します。

    docker-compose up