version: '3.8' services: bedrock: image: itzg/minecraft-bedrock-server environment: # docker image properties # - UID=485 # - GID=485 - TZ=Europe/Stockholm - EULA=TRUE - VERSION=PREVIEW # Minecraft server.properties parameters # https://minecraft.fandom.com/wiki/Server.properties#Bedrock_Edition_3 - GAMEMODE=survival - DIFFICULTY=normal - "SERVER_NAME=Niefelheim Bedrock server" - SERVER_PORT=19132 - SERVER_PORT_V6=19131 - ALLOW_CHEATS=true - ONLINE_MODE=true - LEVEL_NAME=Dungen #- OPS=2533274968313137 - OPS=2533274968313137,2535421315133378,2535433533727392 ports: - target: 19132 published: 19132 protocol: udp mode: host networks: - host volumes: - /etc/localtime:/etc/localtime:ro - server-data:/data stdin_open: true tty: true deploy: placement: constraints: [node.labels.Bedrock == true ] backup: image: alpinelinux/docker-cli entrypoint: "sh -c" command: | ' DATE_FMT="%Y-%m-%d_%H-%M-%S" echo "Stopping bedrock service..." docker service scale $$SERVICE_NAME=0 > /dev/null for world_dir in /opt/server/worlds/*; do world_name=$$(basename "$$world_dir") now=$$(date +$$DATE_FMT) target="/opt/backups/$$world_name-$$now.tar.gz" echo "Backing up '$$world_name' to $$target..." tar -cpzf "$$target" -C "$$world_dir" . echo "Cleaning up old versions of '$$world_name'..." find /opt/backups -name "$$world_name-*.tar.gz" -type f -mtime +14 -print -delete done echo "Starting bedrock service..." docker service scale $$SERVICE_NAME=1 > /dev/null ' volumes: - /var/run/docker.sock:/var/run/docker.sock - server-data:/opt/server - backups-data:/opt/backups environment: # assumes this is deployed to a stack named "mc" - SERVICE_NAME=mc_bedrock deploy: placement: constraints: - node.role == manager restart_policy: condition: none replicas: 0 # none by default; created when cron hits labels: # backup and restart daily at 6am - swarm.cronjob.enable=true - swarm.cronjob.schedule=0 6 * * * update: image: alpinelinux/docker-cli entrypoint: "sh -c" command: | ' # force service update, which causes restart docker service update $$SERVICE_NAME --force ' volumes: - /var/run/docker.sock:/var/run/docker.sock environment: # assumes this is deployed to a stack named "mc" - SERVICE_NAME=mc_bedrock deploy: placement: constraints: - node.role == manager restart_policy: condition: none replicas: 0 # none by fedault; created when cron hits labels: # restart daily at 6am to get latest MC version - swarm.cronjob.enable=false - swarm.cronjob.schedule=0 6 * * * cron: image: crazymax/swarm-cronjob:1.13.0 environment: - TZ=Europe/Stockholm - LOG_LEVEL=info - LOG_JSON=false volumes: - /var/run/docker.sock:/var/run/docker.sock deploy: placement: constraints: - node.role == manager replicas: 0 # disabled; already running in lab stack networks: host: external: true volumes: server-data: driver: local driver_opts: type: 'none' o: 'bind' device: '/data/bedrock/server' backups-data: driver: local driver_opts: type: 'none' o: 'bind' device: '/data/backup/bedrock'