version: '3' services: traefik: image: traefik restart: unless-stopped ports: - "80:80" - "443:443" volumes: #- /var/run/docker.sock:/var/run/docker.sock - "////./pipe/docker_engine:/var/run/docker.sock" - ./traefik.yml:/etc/traefik/traefik.yml - ./authorized_users:/etc/traefik/authorized_users - ./acme.json:/acme.json labels: - "traefik.enable=true" - "traefik.http.routers.dashboard-http.entrypoints=http" - "traefik.http.routers.dashboard-http.rule=Host(`localhost/`)" - "traefik.http.routers.dashboard-http.middlewares=dashboard-redirect" - "traefik.http.middlewares.dashboard-redirect.redirectscheme.scheme=https" - "traefik.http.routers.dashboard-https.entrypoints=https" - "traefik.http.routers.dashboard-https.rule=(Host(`localhost/`)) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))" - "traefik.http.routers.dashboard-https.tls.certResolver=letsencrypt" - "traefik.http.routers.dashboard-https.service=api@internal" - "traefik.http.routers.dashboard-https.middlewares=dashboard-auth" - "traefik.http.middlewares.dashboard-auth.basicauth.usersfile=/etc/traefik/authorized_users" command: # Enable Docker in Traefik, so that it reads labels from Docker services - --providers.docker # Add a constraint to only use services with the label "traefik.constraint-label=traefik-public" #- --providers.docker.constraints=Label(`traefik.constraint-label`, `traefik-public`) # Do not expose all Docker services, only the ones explicitly exposed #- --providers.docker.exposedbydefault=false # Enable Docker Swarm mode - --providers.docker.swarmmode # Create an entrypoint "http" listening on port 80 - --entrypoints.http.address=:80 # Create an entrypoint "https" listening on port 443 - --entrypoints.https.address=:443 # Create the certificate resolver "le" for Let's Encrypt, uses the environment variable EMAIL #- --certificatesresolvers.le.acme.email='cboivin@secure-exchanges.com'#$EMAIL # Store the Let's Encrypt certificates in the mounted volume #- --certificatesresolvers.le.acme.storage=/certificates/acme.json # Use the TLS Challenge for Let's Encrypt #- --certificatesresolvers.le.acme.tlschallenge=true # Enable the access log, with HTTP requests - --accesslog # Enable the Traefik log, for configurations and errors - --log # Enable the Dashboard and API - --api.insecure=true # Docker engine - --providers.docker.endpoint=npipe:////./pipe/docker_engine minecraft-test-docker: image: itzg/minecraft-server restart: unless-stopped volumes: - "./mc:/data" ports: - "25565:25565" environment: EULA: "TRUE" TYPE: FORGE VERSION: "1.20.1" FORGE_VERSION: "47.2.32" ENABLE_AUTOPAUSE: "TRUE" INIT_MEMORY: "256M" MAX_MEMORY: "25G" TZ: "Europe/Berne" OVERRIDE_SERVER_PROPERTIES: "TRUE" MAX_TICK_TIME: "-1" DIFFICULTY: "normal" MODE: "creative" MOTD: "Welcome Home" # More aggressive settings for demo purposes AUTOPAUSE_TIMEOUT_INIT: "30" AUTOPAUSE_TIMEOUT_EST: "10" lazytainer: image: ghcr.io/vmorganp/lazytainer:master environment: VERBOSE: false ports: - 25565:25565 volumes: - /var/run/docker.sock:/var/run/docker.sock:ro labels: - lazytainer.group.minecraft.sleepMethod=stop - lazytainer.group.minecraft.ports=25565 - lazytainer.group.minecraft.minPacketThreshold=2 # Start after two incomming packets - lazytainer.group.minecraft.inactiveTimeout=60 # 10 minutes, to allow the server to bootstrap. You can probably make this lower later if you want. restart: unless-stopped network_mode: bridge minecraft: image: 'itzg/minecraft-server' restart: unless-stopped stdin_open: true tty: true volumes: - "./mc:/data" - "./mods:/mods:ro" depends_on: - lazytainer network_mode: service:lazytainer environment: EULA: "TRUE" TYPE: "FORGE" TZ: "Europe/Zurich" MAX_TICK_TIME: "-1" INIT_MEMORY: 128M MAX_MEMORY: 20G #OVERRIDE_SERVER_PROPERTIES: "TRUE" #ENABLE_AUTOPAUSE: "TRUE" #AUTOPAUSE_TIMEOUT_INIT: "30" #AUTOPAUSE_TIMEOUT_EST: "10" DIFFICULTY: "easy"