コンテナ版マインクラフトサーバを構築してhttps化したDynmapを使う
はじめに
本記事ではマインクラフトのサーバをコンテナで構築します。
仮想マシンを作ってJDKをインストールしてjarファイルを実行して・・・というやり方が多いと思います。
このやり方も問題ないですが、サクッと作れるコンテナ版マインクラフト+αをご紹介します。
この方法で以下のようなサーバを作成することができます。
-
- Minecraft Forge対応サーバ
-
- Forge版のDynmapの表示
- Dynmapをリバースプロキシ経由にしてhttps化
※前提条件
-
- 筆者の環境は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)
《我的世界》相关
Dynmap/反向代理/Let’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
结束
構築起一个简单的Minecraft服务器本来并不困难,但通过使用容器,可以将Minecraft作为基础设施代码进行管理。能够快速构建所需的Minecraft环境非常好。此外,通过设置dynmap的配置,也可以在容器版本的Minecraft中更加简便地进行反向代理。祝您享受愉快的Minecraft生活!