From 2fe0144656ec3237bd37adf8e1b2bbbdeee696f3 Mon Sep 17 00:00:00 2001 From: Andrew Miller Date: Mon, 12 May 2025 09:51:05 -0400 Subject: [PATCH] minecraft example --- minecraft/README.md | 57 ++++++++++++++++++++++++++++++ minecraft/docker-compose-ngrok.yml | 24 +++++++++++++ minecraft/docker-compose.yml | 12 +++++++ 3 files changed, 93 insertions(+) create mode 100644 minecraft/README.md create mode 100644 minecraft/docker-compose-ngrok.yml create mode 100644 minecraft/docker-compose.yml diff --git a/minecraft/README.md b/minecraft/README.md new file mode 100644 index 0000000..373c9bb --- /dev/null +++ b/minecraft/README.md @@ -0,0 +1,57 @@ +# Minecraft in Dstack + +Existing Minecraft docker compose files work out of the box! +https://github.com/itzg/docker-minecraft-server/ + +There are a few ways of connecting. + +Some slides on my minecraft notes so far: https://docs.google.com/presentation/d/1vFqlFeFFaEPlboymo_-EjASeu3kgKuXnmPc63abWcps/edit + +## For unmodified clients (server needs free ngrok api) + + +To join my minecraft server w/ direct connection (via ngrok): +``` +0.tcp.us-cal-1.ngrok.io:19314 +``` + +Docker compose w/ Ngrok (works w unmodified minecraft client): +- https://github.com/itzg/docker-minecraft-server/blob/master/examples/docker-compose-ngrok.yml + + +## For client that is willing to run stunnel or socat + +Bare Minecraft docker compose (works if you use stunnel or socat on client): +- https://github.com/itzg/docker-minecraft-server/blob/master/examples/docker-compose.yml + +With socat: +``` +socat TCP-LISTEN:25565,bind=127.0.0.1,fork,reuseaddr OPENSSL:fd2cd876576b10d9f31924e8cb1604f1ad4e8f03-25565.dstack-prod5.phala.network:443 +``` + +## To make a fully secure connection (for T-E-Esports) + +First to get a reference certificate: +``` +openssl s_client -connect fd2cd876576b10d9f31924e8cb1604f1ad4e8f03-25565.dstack-prod5.phala.network:443 pinned.crt +``` + +then use a tunneling tool (stunnel) that can check against this reference: + +``` +stunnel ./stunnel.conf +``` + +Example `stunnel.conf`: +``` +foreground = yes +pid = ./stunnel.pid + +[minecraft] +client = yes +accept = 127.0.0.1:25565 +connect = fd2cd876576b10d9f31924e8cb1604f1ad4e8f03-25565.dstack-prod5.phala.network:443 +verifyPeer = yes +CAfile = pinned.crt +checkHost = fd2cd876576b10d9f31924e8cb1604f1ad4e8f03-25565.dstack-prod5.phala.network +``` diff --git a/minecraft/docker-compose-ngrok.yml b/minecraft/docker-compose-ngrok.yml new file mode 100644 index 0000000..3fbf968 --- /dev/null +++ b/minecraft/docker-compose-ngrok.yml @@ -0,0 +1,24 @@ +services: + mc: + image: itzg/minecraft-server + tty: true + stdin_open: true + ports: + - "25565:25565" + environment: + EULA: "TRUE" + restart: unless-stopped + volumes: + # attach the relative directory 'data' to the container's /data path + - ./data:/data + + ngrok: + image: ngrok/ngrok:latest + command: + - "tcp" + - "mc:25565" + environment: + NGROK_AUTHTOKEN: + ports: + - 4551:4551 + diff --git a/minecraft/docker-compose.yml b/minecraft/docker-compose.yml new file mode 100644 index 0000000..a95e29a --- /dev/null +++ b/minecraft/docker-compose.yml @@ -0,0 +1,12 @@ +services: + minecraft: + image: itzg/minecraft-server + stdin_open: true + tty: true + ports: + - "25565:25565" + volumes: + - ./data:/data + environment: + EULA: "TRUE" + restart: unless-stopped