コンテナ版マインクラフトサーバを構築してhttps化したDynmapを使う

はじめに

本記事ではマインクラフトのサーバをコンテナで構築します。
仮想マシンを作ってJDKをインストールしてjarファイルを実行して・・・というやり方が多いと思います。
このやり方も問題ないですが、サクッと作れるコンテナ版マインクラフト+αをご紹介します。
この方法で以下のようなサーバを作成することができます。

    • Minecraft Forge対応サーバ

 

    • Forge版のDynmapの表示

 

    Dynmapをリバースプロキシ経由にしてhttps化
kouseizu.png

※前提条件

    • 筆者の環境はCentOS 7です(古くてすみません)

 

    • DockerとDocker-composeがインストール済

 

    • 独自ドメイン等でdynmap.yourdomain.com等で名前解決できる

 

    マインクラフトのポートTCP:25565(任意)、Let’s Encrypt用にTCP:80,443が使える

介绍使用的物品

这次我们要介绍使用的容器和MOD。我们会安装Forge,所以除了Dynmap外,还可以安装其他各种MOD,没问题的。

Docker的letsencrypt-nginx-proxy-companion

Nginxベースのリバースプロキシ機能と、Let’s Encrypt証明書発行機能をもったコンテナスタックです。
自動で証明書の発行・更新をしつつ、背後のWebサーバのリバースプロキシとして機能します。
証明書発行の認証にはhttp-01チャレンジを使用するのでIN側TCPポート80,443での通信が必要です。
https://github.com/nginx-proxy/docker-letsencrypt-nginx-proxy-companion

itzg的Minecraft服务器

这是由itzg(Geoff Bourne)维护的Minecraft容器版本。只要启动这个容器,就能运行Minecraft服务器,无论是普通服务器还是原版服务器。请参阅https://github.com/itzg/docker-minecraft-server。

我的世界锻造

在安装各种MOD之前,需要安装预先提供的MOD。
大多数MOD都需要安装Forge。本次的Dynmap也需要使用Forge(也有非Forge版)。
http://files.minecraftforge.net

动态地图

这个MOD可以通过类似Google Map的用户界面在Web浏览器中查看Minecraft的世界。可以从正上方、斜向上方以及其他维度来查看,并且能够设置各种标记和聊天功能,非常高效。此外,它还包含了一个简易的Web服务器,可以直接使用,无需另外准备Web服务器。本次我们将通过反向代理来访问这个简易的Web服务器。详情请参考https://www.curseforge.com/minecraft/mc-mods/dynmapforge。

docker-letsencrypt-nginx-proxy-companionのインストール

これを使うと、Nginxのリバースプロキシ機能とLet’s Encryptによるhttps化が可能になります。
例えば独自ドメインをお持ちならhttps://dynmap.yourdomain.com/ のようなアドレスでDynmapにアクセスが可能になります。
マインクラフト以外でも使える便利なDockerスタックなので、今回はdocker-composeファイルを独立させます。
以下のdocker-compose.ymlでコンテナ達を起動してください。

version: '3'

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - conf:/etc/nginx/conf.d
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - dhparam:/etc/nginx/dhparam
      - certs:/etc/nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
    restart: always

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: nginx-proxy-le
    depends_on:
      - nginx-proxy
    volumes:
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - dhparam:/etc/nginx/dhparam:ro
      - certs:/etc/nginx/certs
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always

volumes:
  conf:
  vhost:
  html:
  dhparam:
  certs:

networks:
  default:
    external:
      name: nginx-proxy
$sudo docker-compose up -d

安装Minecraft

Docker Hubにあるitzg/minecraft-serverを使用します。
Dynmapを入れるディレクトリはmodsディレクトリとなります。
docker-compose.ymlを置くディレクトリで以下を実行してください。

$sudo mkdir mods

以下是Minecraft的docker-compose.yml文件。
请将Docker网络名称设置为docker-letsencrypt-nginx-proxy-companion与之匹配。

version: "3.7"

services:
  mc:
    image: itzg/minecraft-server
    ports:
    - 25565:25565
    - 8123:8123
    environment:
      EULA: "TRUE"
      VERSION: 1.16.4
      DIFFICULTY: normal
      SERVER_NAME: SERVERNAME
      TYPE: FORGE
      FORGEVERSION: 35.1.32
      ANNOUNCE_PLAYER_ACHIEVEMENTS: "true"
      TZ: Asia/Tokyo
      ENABLE_RCON: "true"
      RCON_PASSWORD: "PASSWORD"
      RCON_PORT: 28016
      ENABLE_QUERY: "true"
      ENABLE_STATUS: "true"
      OPS: Operator_Name
      USE_AIKAR_FLAGS: "true"
      MEMORY: 16G
      USE_LARGE_PAGES: "true"
      VIRTUAL_HOST: dynmap.your.domain
      VIRTUAL_PORT: 8123
      LETSENCRYPT_HOST: dynmap.your.domain
      LETSENCRYPT_EMAIL: email@address

    tty: true
    stdin_open: true
    restart: always

    volumes:
    - mc_forge:/data
    - ./mods:/mods:ro

volumes:
  mc_forge: {}

networks:
  default:
    external:
      name: nginx-proxy

以下に、各項目の説明をします。環境によっては不要な項目もあると思いますので、適宜削除などしてください。
また、ゲームに関する変数の詳細(難易度等)は以下リンクを参照してください。
server.properties(Minecraft WIKI)

《我的世界》相关

環境変数今回の値説明EULA”TRUE”マインクラフトの使用許諾に同意(必須)VERSION1.16.4マインクラフトのバージョンDIFFICULTYnormalゲーム難易度SERVER_NAMESERVERNAMEサーバ名TYPEFORGEサーバのタイプ。今回はForge。FORGEVERSION35.1.32ForgeのバージョンANNOUNCE_PLAYER_ACHIEVEMENTS”true”プレイヤーの達成を表示するかどうか(任意)TZAsia/TokyoタイムゾーンENABLE_RCON”true”RCON(マインクラフトの遠隔操作)を有効にするRCON_PASSWORD”PASSWORD”RCONのパスワードRCON_PORT28016RCONのポート番号ENABLE_QUERY”true”サーバーの稼働状態の送信を有効ENABLE_STATUS”true”サーバーの詳細な?稼働状態の送信を有効OPSOperator_Nameサーバオペレータ(OP権限)ユーザの設定USE_AIKAR_FLAGS”true”Java変数の最適化MEMORY16GJavaで確保するメモリUSE_LARGE_PAGES”true”Javaラージページの設定(メモリ12GB以上)

Dynmap/反向代理/Let’s Encrypt相关

環境変数今回の値説明VIRTUAL_HOSTdynmap.your.domaindynmapを表示するFQDNVIRTUAL_PORT8123dynmapのポート番号LETSENCRYPT_HOSTdynmap.your.domaindynmapを表示するFQDNLETSENCRYPT_EMAILemail@addressLet’s Encryptから連絡を受けるメールアドレス

次に、modsディレクトリにdynmapを格納します。以下からダウンロードしてmodsディレクトリに入れてください。
https://www.curseforge.com/minecraft/mc-mods/dynmapforge

只需运行docker-compose up,Minecraft就会启动起来。

$sudo docker-compose up -d

启动后不久(大约1分钟),由docker-letsencrypt-nginx-proxy-companion进行https加密。
你应该能够通过https://dynmap.your.domain/进行访问。
如果Minecraft本身是在默认端口上运行的,你可以像往常一样通过”your.domain”进行连接。

如果无法成功启动,请尝试查看Docker日志。

$sudo docker-compose logs -f 
dynmap_example.png
server_example.png

结束

構築起一个简单的Minecraft服务器本来并不困难,但通过使用容器,可以将Minecraft作为基础设施代码进行管理。能够快速构建所需的Minecraft环境非常好。此外,通过设置dynmap的配置,也可以在容器版本的Minecraft中更加简便地进行反向代理。祝您享受愉快的Minecraft生活!

example.png