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: image: itzg/minecraft-server restart: "unless-stopped" stdin_open: true volumes: - ./mc/data:/data - ./mc/mods:/mods:ro - ./mc/icon.png:/icon.png - ./mc/whitelist.json:/whitelist.json depends_on: - lazytainer network_mode: service:lazytainer labels: - "lazytainer.group=minecraft" environment: EULA: "TRUE" TYPE: FORGE VERSION: "1.20.1" FORGE_VERSION: "47.2.32" INIT_MEMORY: 128M MAX_MEMORY: 25G TZ: "Europe/Berne" ICON: "/icon.png" SNOOPER_ENABLED: "FALSE" #SEED: "" OVERRIDE_SERVER_PROPERTIES: "TRUE" MAX_TICK_TIME: "-1" DIFFICULTY: "normal" MODE: "survival" # survival, creative, adventure, spectator MOTD: "Bachelor's Minecraft Server" ENABLE_WHITELIST: "TRUE" WHITELIST_FILE: "/whitelist.json" OVERRIDE_WHITELIST: "TRUE" 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=300 restart: unless-stopped network_mode: bridge