141 lines
3.6 KiB
YAML
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'
|