Files
app-catalog-felhom.eu/templates/crafty-controller/docker-compose.yml
T

76 lines
3.3 KiB
YAML

# Crafty Controller - Minecraft szerver kezelő webes felülettel
# Domain: ${SUBDOMAIN}.${DOMAIN}
# Database: None (file-based)
# RAM: ~256M (mem_limit: 2048M) | Pi-compatible: No
#
# Environment variables:
# DOMAIN - Your domain (e.g., demo-felhom.eu)
# CRAFTY_PASSWORD - felhom-generated initial admin password (seeded into default.json, see below)
#
# Initial admin password (seeding): Crafty's image ships
# app/config_original/default.json = {"username":"admin","password":"crafty"} — only 6 chars, below
# Crafty's 8-char minimum, so Crafty rejects it and generates an ugly random password into
# default-creds.txt. The entrypoint below overwrites that template with a felhom-generated password
# BEFORE the launcher runs; on fresh install the launcher copies it into the config volume and Crafty
# creates the admin user with it. The seeded default.json stays in the volume as the source the
# controller reads for the "Kezdeti belépési adatok" card (initial_credentials in .felhom.yml).
services:
crafty-controller:
image: registry.gitlab.com/crafty-controller/crafty-4:4.4.8
container_name: crafty-controller
restart: unless-stopped
environment:
- TZ=Europe/Budapest
- CRAFTY_PASSWORD=${CRAFTY_PASSWORD}
# Seed the felhom-generated admin password via Crafty's default.json template, then hand off to the
# image's normal launcher (entrypoint /crafty/docker_launcher.sh, default cmd "-d -i"). $$ escapes
# the compose interpolation so CRAFTY_PASSWORD is read from the container env at runtime.
entrypoint:
- /bin/sh
- -c
- |
printf '{"username":"admin","password":"%s"}\n' "$${CRAFTY_PASSWORD}" > /crafty/app/config_original/default.json
exec /crafty/docker_launcher.sh -d -i
volumes:
- crafty_backups:/crafty/backups
- crafty_logs:/crafty/logs
- crafty_servers:/crafty/servers
- crafty_config:/crafty/app/config
- crafty_import:/crafty/import
networks:
- traefik-public
deploy:
resources:
limits:
memory: 2048M
healthcheck:
test: ["CMD", "/usr/bin/python3", "-c", "import socket,ssl; ssl._create_unverified_context().wrap_socket(socket.create_connection(('127.0.0.1',8443),timeout=3)).close()"]
interval: 30s
timeout: 5s
retries: 3
start_period: 60s
labels:
- "traefik.enable=true"
- "traefik.http.routers.crafty-controller.rule=Host(`${SUBDOMAIN}.${DOMAIN}`)"
- "traefik.http.routers.crafty-controller.entrypoints=websecure"
- "traefik.http.routers.crafty-controller.tls=true"
- "traefik.http.routers.crafty-controller.tls.certresolver=letsencrypt"
- "traefik.http.services.crafty-controller.loadbalancer.server.port=8443"
# Crafty serves self-signed HTTPS on :8443 (no plain-HTTP panel) — Traefik must speak https to the
# backend and skip verifying the per-container self-signed cert (named transport defined in the
# controller-managed traefik dynamic config; verification stays ON for all other backends).
- "traefik.http.services.crafty-controller.loadbalancer.server.scheme=https"
- "traefik.http.services.crafty-controller.loadbalancer.serverstransport=insecure-skip-verify@file"
volumes:
crafty_backups:
crafty_config:
crafty_import:
crafty_logs:
crafty_servers:
networks:
traefik-public:
external: true