Deployment
Gateway production deploys run as a dedicated stack (connect-gateway) and dedicated docker context (uebliche-gateway).
Runtime contract
Gateway is deployed as one service image that contains:
watchermcproxy
Control plane comes from Public API, not from a local dashboard.
Required/important environment
CONNECT_API_BASE(defaulthttps://api.uebliche.net/v1)CONNECT_GATEWAY_CREDENTIALS_PATH(default/etc/minecraft/gateway-credentials.json)CONNECT_GATEWAY_NAMECONNECT_GATEWAY_REGIONCONNECT_GATEWAY_NETWORK_IDCONNECT_GATEWAY_PUBLIC_HOST(optional fixed public host/IP)CONNECT_GATEWAY_MINECRAFT_PORT(default25565)CONNECT_GATEWAY_CONNECT_PORT(default9001)CONNECT_GATEWAY_HEARTBEAT_SECONDS(default10)
CONNECT_GATEWAY_ID and CONNECT_GATEWAY_SECRET are optional. If missing, watcher auto-registers and persists credentials to CONNECT_GATEWAY_CREDENTIALS_PATH.
Open ports (production)
25565/tcp: Minecraft traffic9001/tcp: Connect control + runtime metrics80/tcp: health endpoints
Compose (single host)
bash
cd gateway
docker compose -f compose.yml up -d --buildSwarm (recommended)
Use stack file:
docker/stacks/gateway/docker-stack-gateway.yml
Example:
bash
GATEWAY_DOCKER_CONTEXT=uebliche-gateway \
GATEWAY_IMAGE=registry.eu.uebliche.net:5000/uebliche/api \
GATEWAY_IMAGE_TAG=gateway-main-latest \
GATEWAY_STACK_NAME=connect-gateway \
docker --context "$GATEWAY_DOCKER_CONTEXT" stack deploy \
-c docker/stacks/gateway/docker-stack-gateway.yml \
"$GATEWAY_STACK_NAME"Persistence
The stack uses a stable named volume for gateway credentials/routes:
gateway_gateway-minecraft-config
This keeps gateway identity and route cache stable across stack updates/migrations.