This commit is contained in:
mgr
2025-03-07 18:48:54 +01:00
commit 96a425477d
52 changed files with 3695 additions and 0 deletions

183
docker-compose.yml Executable file
View File

@@ -0,0 +1,183 @@
networks:
core_public:
external: true
minecraft:
volumes:
mysql-data:
secrets:
minecraftrclone:
file: rclone.conf
services:
spigot:
image: 'ghcr.io/zekrotja/papermc-docker'
restart: unless-stopped
environment:
VERSION: "1.21.4"
BUILD: "latest"
CACHE_DOWNLOAD: "true"
XMS: 4G
XMX: 8G
MAX_AGE_BACKUP_FILES: 15d
PRE_START_BACKUP: "true"
POST_START_BACKUP: "false"
BACKUP_SUCCESS_SCRIPT: 'curl -X PUT -u "minecraft_backups:dn89v573w490852348905b3c2458" "https://ntfy.zekro.de/minecraft_backups?title=✅ Minecraft Backup Successfull"'
BACKUP_FAILED_SCRIPT: 'curl -X PUT -u "minecraft_backups:dn89v573w490852348905b3c2458" -d "$$MESSAGE" "https://ntfy.zekro.de/minecraft_backups?title=❌ Minecraft Backup Failed"'
DEBUG_MODE: "true"
ports:
- '24693:25565'
# - '25575:25575' # RCON temporarily disabled because of security issues
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
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'
restart: unless-stopped
environment:
VERSION: "1.21.4"
BUILD: "latest"
CACHE_DOWNLOAD: "true"
XMS: 2G
XMX: 4G
# MAX_AGE_BACKUP_FILES: 15d
# PRE_START_BACKUP: "true"
# POST_START_BACKUP: "false"
# BACKUP_SUCCESS_SCRIPT: 'curl -X PUT -u "minecraft_backups:dn89v573w490852348905b3c2458" "https://ntfy.zekro.de/minecraft_backups?title=✅ Minecraft Backup Successfull"'
# BACKUP_FAILED_SCRIPT: 'curl -X PUT -u "minecraft_backups:dn89v573w490852348905b3c2458" -d "$$MESSAGE" "https://ntfy.zekro.de/minecraft_backups?title=❌ Minecraft Backup Failed"'
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
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"
mysql:
image: "mariadb:latest"
environment:
MYSQL_ROOT_PASSWORD: "9dgLQmjji2NNVQAp"
volumes:
- "mysql-data:/var/lib/mysql"
- "./mysql/cfg:/etc/mysql"
- "/etc/localtime:/etc/localtime:ro"
restart: always
networks:
- "minecraft"
prometheus:
image: "prom/prometheus:latest"
command: "--web.enable-admin-api --config.file=/etc/prometheus/prometheus.yml"
ports:
- "18889:80"
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: on-failure
user: "root"
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`)"