From a3bd1ac2e655f58308b08f77621dada5d2247d38 Mon Sep 17 00:00:00 2001 From: consultoria-as Date: Tue, 3 Mar 2026 10:26:49 +0000 Subject: [PATCH] feat: add Dolphin traversal server for GameCube/Wii netplay Self-hosted NAT hole-punching relay for Dolphin emulator netplay. Enables online play for ALL GameCube and Wii games without players needing to open ports (Mario Party 4-7, MKDD, Smash Melee, etc). Multi-stage Docker build compiles only the traversal_server target. UDP ports 6262 (primary) and 6226 (NAT probe). Co-Authored-By: Claude Opus 4.6 --- docker/docker-compose.dev.yml | 14 +++++++ servers/dolphin-traversal/.dockerignore | 2 + servers/dolphin-traversal/Dockerfile | 51 +++++++++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 servers/dolphin-traversal/.dockerignore create mode 100644 servers/dolphin-traversal/Dockerfile diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml index 9efdbc1..a5b8e2d 100644 --- a/docker/docker-compose.dev.yml +++ b/docker/docker-compose.dev.yml @@ -214,6 +214,20 @@ services: limits: memory: 128M + dolphin-traversal: + build: + context: ../servers/dolphin-traversal + dockerfile: Dockerfile + container_name: dolphin-traversal + restart: unless-stopped + ports: + - "6262:6262/udp" + - "6226:6226/udp" + deploy: + resources: + limits: + memory: 64M + volumes: postgres_data: minio_data: diff --git a/servers/dolphin-traversal/.dockerignore b/servers/dolphin-traversal/.dockerignore new file mode 100644 index 0000000..de951f4 --- /dev/null +++ b/servers/dolphin-traversal/.dockerignore @@ -0,0 +1,2 @@ +*.md +.git diff --git a/servers/dolphin-traversal/Dockerfile b/servers/dolphin-traversal/Dockerfile new file mode 100644 index 0000000..d85734c --- /dev/null +++ b/servers/dolphin-traversal/Dockerfile @@ -0,0 +1,51 @@ +# Dolphin Emulator Traversal Server +# Lightweight NAT hole-punching relay for Dolphin netplay +# Supports ALL GameCube/Wii games via Dolphin + +# --- Build stage --- +FROM debian:bookworm AS build + +RUN apt-get update && apt-get install -y \ + build-essential cmake git pkg-config \ + libfmt-dev libenet-dev libcurl4-openssl-dev \ + libbz2-dev liblzma-dev libzstd-dev zlib1g-dev \ + liblzo2-dev liblz4-dev libspng-dev \ + libusb-1.0-0-dev libevdev-dev libpugixml-dev libxxhash-dev \ + libminiupnpc-dev libhidapi-dev libsystemd-dev libudev-dev \ + glslang-dev glslang-tools \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /dolphin + +RUN git clone --depth 1 https://github.com/dolphin-emu/dolphin.git . \ + && git submodule update --init --recursive --depth 1 + +RUN mkdir build && cd build && cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DENABLE_QT=OFF \ + -DENABLE_NOGUI=OFF \ + -DENABLE_CLI=OFF \ + -DENABLE_TESTS=OFF \ + -DUSE_DISCORD_PRESENCE=OFF \ + -DENABLE_AUTOUPDATE=OFF \ + -DENABLE_ANALYTICS=OFF + +RUN cd build && cmake --build . --target traversal_server -j$(nproc) + +# --- Runtime stage --- +FROM debian:bookworm-slim + +RUN apt-get update && apt-get install -y \ + libfmt9 libstdc++6 \ + && rm -rf /var/lib/apt/lists/* + +RUN useradd -r -s /bin/false dolphin + +COPY --from=build /dolphin/build/Binaries/traversal_server /usr/local/bin/traversal_server + +USER dolphin + +EXPOSE 6262/udp +EXPOSE 6226/udp + +CMD ["traversal_server"]