diff options
| author | Filip Wandzio <contact@philw.dev> | 2026-01-25 00:50:42 +0100 |
|---|---|---|
| committer | Filip Wandzio <contact@philw.dev> | 2026-01-25 00:50:42 +0100 |
| commit | 41af486c3523180889655803517a63dbab22b5e5 (patch) | |
| tree | 700295043e5a1579613143b3b4b4377cdcd7bea5 /compose.yml | |
| download | mcsv-41af486c3523180889655803517a63dbab22b5e5.tar.gz mcsv-41af486c3523180889655803517a63dbab22b5e5.zip | |
Diffstat (limited to '')
| -rw-r--r-- | compose.yml | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..2aea7b0 --- /dev/null +++ b/compose.yml | |||
| @@ -0,0 +1,109 @@ | |||
| 1 | services: | ||
| 2 | init-dirs: | ||
| 3 | image: alpine:latest | ||
| 4 | container_name: "${SERVER_NAME}_init" | ||
| 5 | command: > | ||
| 6 | /bin/sh -c " | ||
| 7 | mkdir -p /data /backups && | ||
| 8 | chown -R ${MC_UID}:${MC_GID} /data /backups" | ||
| 9 | volumes: | ||
| 10 | - "${PWD}/${DATA_PATH}:/data" | ||
| 11 | - "${PWD}/${BACKUP_PATH}:/backups" | ||
| 12 | restart: "no" | ||
| 13 | |||
| 14 | minecraft: | ||
| 15 | image: "${MC_IMAGE}" | ||
| 16 | container_name: "${SERVER_NAME}_minecraft" | ||
| 17 | ports: | ||
| 18 | - "${SERVER_PORT}:${MC_INTERNAL_PORT}" | ||
| 19 | environment: | ||
| 20 | EULA: "${MC_EULA}" | ||
| 21 | TYPE: "${TYPE}" | ||
| 22 | ENABLE_WHITELIST: "${ENABLE_WHITELIST}" | ||
| 23 | ICON: "${ICON}" | ||
| 24 | OVERRIDE_ICON: "true" | ||
| 25 | USE_AIKAR_FLAGS: "true" | ||
| 26 | USE_MEOWICE_FLAGS: "true" | ||
| 27 | ENFORCE_WHITELIST: "${ENFORCE_WHITELIST}" | ||
| 28 | MEMORY: "${MC_MEMORY}" | ||
| 29 | VERSION: "${VERSION}" | ||
| 30 | PAPER_CHANNEL: "${PAPER_CHANNEL}" | ||
| 31 | ENABLE_RCON: "${ENABLE_RCON}" | ||
| 32 | RCON_PASSWORD: "${RCON_PASSWORD}" | ||
| 33 | RCON_PORT: "${RCON_PORT}" | ||
| 34 | UID: "${MC_UID}" | ||
| 35 | GID: "${MC_GID}" | ||
| 36 | NETTY_NATIVE_WORKDIR: /data/tmp | ||
| 37 | volumes: | ||
| 38 | - "${PWD}/${DATA_PATH}:/data" | ||
| 39 | restart: "${RESTART_POLICY}" | ||
| 40 | tmpfs: | ||
| 41 | - /tmp:exec | ||
| 42 | cap_drop: | ||
| 43 | - ALL | ||
| 44 | cap_add: | ||
| 45 | - CHOWN | ||
| 46 | - SETUID | ||
| 47 | - SETGID | ||
| 48 | security_opt: | ||
| 49 | - ${SECURITY_OPT} | ||
| 50 | networks: | ||
| 51 | - mc_net | ||
| 52 | logging: | ||
| 53 | driver: "${LOG_DRIVER}" | ||
| 54 | options: | ||
| 55 | max-size: "${LOG_MAX_SIZE}" | ||
| 56 | max-file: "${LOG_MAX_FILE}" | ||
| 57 | depends_on: | ||
| 58 | - init-dirs | ||
| 59 | |||
| 60 | backup: | ||
| 61 | image: "${BACKUP_IMAGE}" | ||
| 62 | container_name: "${SERVER_NAME}_backup" | ||
| 63 | depends_on: | ||
| 64 | - minecraft | ||
| 65 | - init-dirs | ||
| 66 | volumes: | ||
| 67 | - "${PWD}/${DATA_PATH}:/data" | ||
| 68 | - "${PWD}/${BACKUP_PATH}:/backups" | ||
| 69 | environment: | ||
| 70 | BACKUP_INTERVAL: "${BACKUP_INTERVAL}" | ||
| 71 | SERVER_NAME: "${SERVER_NAME}" | ||
| 72 | MAX_BACKUPS: "${MAX_BACKUPS}" | ||
| 73 | BACKUP_LOG_PREFIX: "${BACKUP_LOG_PREFIX}" | ||
| 74 | entrypoint: | | ||
| 75 | /bin/sh -c ' | ||
| 76 | : "${BACKUP_INTERVAL:?BACKUP_INTERVAL not set}" | ||
| 77 | : "${SERVER_NAME:?SERVER_NAME not set}" | ||
| 78 | : "${MAX_BACKUPS:?MAX_BACKUPS not set}" | ||
| 79 | |||
| 80 | while [ ! -d /data/world ] || [ -z "$(ls -A /data/world)" ]; do | ||
| 81 | echo "[${SERVER_NAME}] Waiting for world generation..." | ||
| 82 | sleep 5 | ||
| 83 | done | ||
| 84 | |||
| 85 | while true; do | ||
| 86 | TIMESTAMP=$$(date +%Y%m%d_%H%M%S) | ||
| 87 | BACKUP_FILE=/backups/${SERVER_NAME}_$$TIMESTAMP.tar.gz | ||
| 88 | if [ -d /data/world ] && [ "$(ls -A /data/world)" ]; then | ||
| 89 | tar -czf $$BACKUP_FILE -C /data . | ||
| 90 | echo "[${BACKUP_LOG_PREFIX:-${SERVER_NAME}}] Backup completed: $$BACKUP_FILE" | ||
| 91 | ls -1tr /backups/${SERVER_NAME}_*.tar.gz | head -n -${MAX_BACKUPS} | xargs -r rm -f | ||
| 92 | else | ||
| 93 | echo "[${SERVER_NAME}] World still empty, skipping backup" | ||
| 94 | fi | ||
| 95 | sleep ${BACKUP_INTERVAL} | ||
| 96 | done | ||
| 97 | ' | ||
| 98 | restart: "${RESTART_POLICY}" | ||
| 99 | networks: | ||
| 100 | - mc_net | ||
| 101 | logging: | ||
| 102 | driver: "${BACKUP_LOG_DRIVER}" | ||
| 103 | options: | ||
| 104 | max-size: "${BACKUP_LOG_MAX_SIZE}" | ||
| 105 | max-file: "${BACKUP_LOG_MAX_FILE}" | ||
| 106 | |||
| 107 | networks: | ||
| 108 | mc_net: | ||
| 109 | driver: bridge | ||
