Raja's Exocortex

Minecraft

Minecraft can be easily hosted on docker using the excellent work of itzg .

This config shows how to host private minecraft server and optionally setup web-rcron to manage it.

File: Docker Compose

# Filename: /srv/mc.exampale.com/docker-compose.yaml
# docker-compose file to start minecraft
#
# Changes required:
#  OPS: TODO_PLAYER1,TODO_PLAYER2
#  RCON_PASSWORD: TODO_MC_RCON_PASSWORD
#  RWA_USERNAME: TODO_RCRON_WEB_ADMIN_USERNAME
#  RWA_PASSWORD: TODO_RCRON_WEB_ADMIN_PASSWORD


name: mc-example-com

services:
  mc:
    image: itzg/minecraft-server
    container_name: mc.example.com
    restart: unless-stopped

    environment:
      EULA: "TRUE"
      TYPE: FORGE
      OPS: TODO_PLAYER1,TODO_PLAYER2
      MEMORY: 10G
      ONLINE_MODE: "FALSE"
      REMOVE_OLD_MODS: "TRUE"
      VERSION: 1.20.1
      SEED: 65434353559200
      USE_SIMD_FLAGS: "TRUE"
      ENABLE_RCON: TRUE
      RCON_PASSWORD: TODO_MC_RCON_PASSWORD

    tty: true

    # MC server runs on non-standard port 65535
    # MC-rcon runs on 25575, use it via itzg/rcon
    ports:
      - 65535:25565
      - 25575:25575

    volumes:
      - ./data:/data
#     - ./plugins:/plugins:ro
#     - ./mods-forge:/mods:ro
      - ./mods-forge-lite:/mods:ro
      - ./extras:/extras:ro

    mem_limit: 11G

    labels:
      - com.centurylinklabs.watchtower.enable=true

# Optionally run itzg/rcron behind traefik

  mc-rcon:
    image: itzg/rcon:latest
    container_name: mc-rcon.example.com
    restart: unless-stopped

    ports:
      - 4326:4326
      - 4327:4327

    environment:
      RWA_ENV: 'TRUE'
      #RWA_WEB_RCON: 'TRUE'
      RWA_USERNAME: TODO_RCRON_WEB_ADMIN_USERNAME
      RWA_PASSWORD: TODO_RCRON_WEB_ADMIN_PASSWORD
      RWA_ADMIN: 'TRUE'
      RWA_RCON_HOST: mc

      RWA_RCON_PASSWORD: TODO_MC_RCON_PASSWORD
      RWA_RCON_PORT: 25575

      RWA_WEBSOCKET_URL_SSL: "wss://mc-rcon.example.com/ws"
      RWA_WEBSOCKET_URL: "ws://mc-rcon.example.com/ws"


    labels:
      - com.centurylinklabs.watchtower.enable=true
      - traefik.enable=true

      # Rules for rcon web
      - traefik.http.routers.mc-rcon.rule=Host(`mc-rcon.example.com`)
      - traefik.http.routers.mc-rcon.tls=true
      - traefik.http.routers.mc-rcon.tls.certresolver=lets-encrypt
      - traefik.http.routers.mc-rcon.service=mc-rcon
      - traefik.http.services.mc-rcon.loadbalancer.server.port=4326

      # Rules for rcon websocket
      - traefik.http.routers.mc-rcon-ws.rule=Host(`mc-rcon.example.com`) && Path(`/ws`)
      - traefik.http.routers.mc-rcon-ws.tls=true
      - traefik.http.routers.mc-rcon-ws.tls.certresolver=lets-encrypt
      - traefik.http.routers.mc-rcon-ws.service=mc-rcon-ws
      - traefik.http.services.mc-rcon-ws.loadbalancer.server.port=4327