From 7f6e3637a063aabc8d4b45a61e8824a7421c11b3 Mon Sep 17 00:00:00 2001 From: Geoff Bourne Date: Sat, 27 Jul 2019 11:36:16 -0500 Subject: [PATCH] docs: added docker-compose example --- README.md | 29 +- docs/compose-diagram.png | Bin 0 -> 38494 bytes docs/compose-diagram.svg | 496 ++++++++++++++++++++++++++++++++++ docs/docker-compose.yml | 18 ++ docs/k8s-mc-with-default.yaml | 7 +- 5 files changed, 544 insertions(+), 6 deletions(-) create mode 100644 docs/compose-diagram.png create mode 100644 docs/compose-diagram.svg create mode 100644 docs/docker-compose.yml diff --git a/README.md b/README.md index c915814..21d1357 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Routes Minecraft client connections to backend servers based upon the requested server address. -## Usage +# Usage ```text Flags: @@ -15,11 +15,10 @@ Flags: --port=25565 The port bound to listen for Minecraft client connections --api-binding=API-BINDING The host:port bound for servicing API requests - --mapping=MAPPING ... Mapping of external hostname to internal server - host:port + --mapping=MAPPING,MAPPING Where MAPPING is externalHostname=host:port ``` -## REST API +# REST API * `GET /routes` Retrieves the currently configured routes @@ -41,6 +40,28 @@ Flags: * `DELETE /routes/{serverAddress}` Deletes an existing route for the given `serverAddress` +# Docker Compose Usage + +The following diagram shows how [the example docker-compose.yml](docs/docker-compose.yml) +configures two Minecraft server services named `vanilla` and `forge`, which also become the internal +network aliases. _Notice those services don't need their ports exposed since the internal +networking allows for the inter-container access._ + +The `router` service is only one of the services that needs to exposed on the external +network. The `--mapping` declares how the hostname users will enter into their Minecraft client +will map to the internal services. + +![](docs/compose-diagram.png) + +To test out this example, I added these two entries to my "hosts" file: + +``` +127.0.0.1 vanilla.example.com +127.0.0.1 forge.example.com +``` + +# Kubernetes Usage + ## Using kubernetes service auto-discovery When running `mc-router` as a kubernetes pod and you pass the `--in-kube-cluster` command-line argument, then diff --git a/docs/compose-diagram.png b/docs/compose-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..e9ec1e0900ef8c26eeaf8938d8855d3f089f0971 GIT binary patch literal 38494 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 s=01R{;J5 + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + External hostnames + + + + + diff --git a/docs/docker-compose.yml b/docs/docker-compose.yml new file mode 100644 index 0000000..90de42d --- /dev/null +++ b/docs/docker-compose.yml @@ -0,0 +1,18 @@ +version: '3.4' + +services: + vanilla: + image: itzg/minecraft-server + environment: + EULA: "TRUE" + forge: + image: itzg/minecraft-server + environment: + EULA: "TRUE" + TYPE: FORGE + router: + image: itzg/mc-router + ports: + - 25565:25565 + command: --mapping=vanilla.example.com=vanilla:25565,forge.example.com=forge:25565 + diff --git a/docs/k8s-mc-with-default.yaml b/docs/k8s-mc-with-default.yaml index 1b518d6..cbcc271 100644 --- a/docs/k8s-mc-with-default.yaml +++ b/docs/k8s-mc-with-default.yaml @@ -4,10 +4,13 @@ kind: Service metadata: name: mc-stable annotations: - "mc-router.itzg.me/defaultServer": "mc.your.domain" + "mc-router.itzg.me/defaultServer": "true" spec: + type: ClusterIP ports: - - port: 25565 + - port: 25566 + name: mc-router + targetPort: 25565 selector: run: mc-stable ---