docker_old/swarm/bedrock/docker-compose.yml

141 lines
3.6 KiB
YAML

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'