Files
minecraft-server-configs/docker-compose.yml

180 lines
5.8 KiB
YAML
Executable File

networks:
core_public:
external: true
minecraft:
volumes:
mysql-data:
secrets:
minecraftrclone:
file: rclone.conf
netrc:
file: .netrc
services:
spigot:
image: 'ghcr.io/zekrotja/papermc-docker:zulu-23'
restart: unless-stopped
environment:
VERSION: "1.21.10"
BUILD: "latest"
CACHE_DOWNLOAD: "true"
XMS: 4G
XMX: 8G
MAX_AGE_BACKUP_FILES: 12d
PRE_START_BACKUP: "true"
POST_START_BACKUP: "false"
BACKUP_SUCCESS_SCRIPT: 'curl -X PUT --netrc-file /run/secrets/.netrc -H "Title: ✅ Minecraft Backup Successfull" "https://ntfy.zekro.de/minecraft_backups"'
BACKUP_FAILED_SCRIPT: 'curl -X PUT --netrc-file /run/secrets/.netrc -H "Title: ❌ Minecraft Backup Failed" -d "$$MESSAGE" "https://ntfy.zekro.de/minecraft_backups"'
DEBUG_MODE: "true"
ports:
- '24693:25565'
- '25575:25575' # rcon
- '24454:24454/udp' # voice chat
networks:
- "core_public"
- "minecraft"
volumes:
- './spigot/config:/etc/mcserver/config'
- './spigot/plugins:/etc/mcserver/plugins'
- './spigot/worlds:/etc/mcserver/worlds'
- './spigot/locals:/etc/mcserver/locals'
secrets:
- source: minecraftrclone
target: rcloneconfig
- source: netrc
target: .netrc
healthcheck:
test: >
/usr/bin/healthcheck -addr localhost:25565 -validateResponse
&& test "$(curl -o /dev/null -sLw "%{response_code}\n" http://127.0.0.1:8100)" -eq 200
start_period: 1m
start_interval: 5s
interval: 30s
timeout: 10s
retries: "10"
labels:
traefik.enable: "true"
traefik.http.routers.spigot.entrypoints: "https"
traefik.http.routers.spigot.tls: "true"
traefik.http.routers.spigot.tls.certresolver: "le"
traefik.http.routers.spigot.rule: "Host(`mc.zekro.de`)"
traefik.http.routers.spigot.priority: "100"
traefik.http.services.spigot.loadbalancer.server.port: "8100" # "8123"
caddy:
image: "caddy:latest"
restart: unless-stopped
volumes:
- "./caddy/www:/usr/share/caddy"
networks:
- "core_public"
- "minecraft"
labels:
traefik.enable: "true"
traefik.http.routers.caddy.entrypoints: "https"
traefik.http.routers.caddy.tls: "true"
traefik.http.routers.caddy.tls.certresolver: "le"
traefik.http.routers.caddy.rule: "Host(`mc.zekro.de`)"
traefik.http.routers.caddy.priority: "10"
spigot_staging:
image: 'ghcr.io/zekrotja/papermc-docker:zulu-23'
restart: unless-stopped
environment:
VERSION: "1.21.11"
BUILD: "latest"
CACHE_DOWNLOAD: "true"
DEBUG_MODE: "true"
XMS: 2G
XMX: 4G
MAX_AGE_BACKUP_FILES: 90d
# PRE_START_BACKUP: "true"
# POST_START_BACKUP: "false"
BACKUP_SUCCESS_SCRIPT: 'curl -X PUT --netrc-file /run/secrets/.netrc -H "Title: ✅ STAGING Minecraft Backup Successfull" "https://ntfy.zekro.de/minecraft_backups"'
BACKUP_FAILED_SCRIPT: 'curl -X PUT --netrc-file /run/secrets/.netrc -H "Title: ❌ STAGING Minecraft Backup Failed" -d "$$MESSAGE" "https://ntfy.zekro.de/minecraft_backups"'
ports:
- '24694:25565'
# - '25575:25575'
networks:
- "core_public"
- "minecraft"
volumes:
- './spigot_staging/config:/etc/mcserver/config'
- './spigot_staging/plugins:/etc/mcserver/plugins'
- './spigot_staging/worlds:/etc/mcserver/worlds'
- './spigot_staging/locals:/etc/mcserver/locals'
secrets:
- source: minecraftrclone
target: rcloneconfig
- source: netrc
target: .netrc
healthcheck:
test: >
/usr/bin/healthcheck -addr localhost:25565 -validateResponse
&& test "$(curl -o /dev/null -sLw "%{response_code}\n" http://127.0.0.1:8100)" -eq 200
start_period: 1m
start_interval: 5s
interval: 30s
timeout: 10s
retries: "10"
labels:
traefik.enable: "true"
traefik.http.routers.spigot_staging.entrypoints: "https"
traefik.http.routers.spigot_staging.tls: "true"
traefik.http.routers.spigot_staging.tls.certresolver: "le"
traefik.http.routers.spigot_staging.rule: "Host(`staging.mc.zekro.de`)"
traefik.http.routers.spigot_staging.priority: "100"
traefik.http.services.spigot_staging.loadbalancer.server.port: "8100" # "8123"
prometheus:
image: "prom/prometheus:latest"
command: "--web.enable-admin-api --config.file=/etc/prometheus/prometheus.yml"
expose:
- "9090"
volumes:
- "./prometheus/config:/etc/prometheus"
restart: always
networks:
- "minecraft"
labels:
com.centurylinklabs.watchtower.enable: "true"
portainer:
image: "portainer/portainer-ce:latest"
volumes:
- "./portainer:/data"
- "/var/run/docker.sock:/var/run/docker.sock"
restart: always
networks:
- "core_public"
labels:
com.centurylinklabs.watchtower.enable: "true"
traefik.enable: "true"
traefik.http.routers.portainer.entrypoints: "https"
traefik.http.routers.portainer.tls: "true"
traefik.http.routers.portainer.tls.certresolver: "le"
traefik.http.routers.portainer.rule: "Host(`docker.mc.zekro.de`)"
traefik.http.services.portainer.loadbalancer.server.port: "9000"
grafana:
image: "grafana/grafana"
restart: unless-stopped
user: "root"
environment:
GF_SECURITY_ALLOW_EMBEDDING: "true"
volumes:
- "./grafana:/var/lib/grafana"
networks:
- "core_public"
- "minecraft"
labels:
com.centurylinklabs.watchtower.enable: "true"
traefik.enable: "true"
traefik.http.routers.grafana.entrypoints: "https"
traefik.http.routers.grafana.tls.certresolver: "le"
traefik.http.routers.grafana.tls: "true"
traefik.http.routers.grafana.rule: "Host(`grafana.mc.zekro.de`)"