Files
MrixsCraft-server/docker-compose.yml
Vladimir Zagainov 1c69721b47
All checks were successful
CI / lint (push) Successful in 19s
CI / test (push) Successful in 19s
CI / build (push) Successful in 19s
CI / docker (push) Successful in 1m9s
fix: ensure skins directory existence and update infrastructure
- Create SKINS_DIR on startup to prevent upload errors\n- Add cdn_skins volume to docker-compose for persistence and Caddy serving\n- Update watchtower image to nickfedor/watchtower for Docker API compatibility\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 17:08:07 +03:00

85 lines
2.1 KiB
YAML

# MrixsCraft — Production Docker Compose
# Usage: docker compose up -d
# Monitoring (when ready): docker compose --profile monitoring up -d
services:
caddy:
image: caddy:2-alpine
container_name: mc-caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
- cdn_files:/var/www/cdn/files:ro
- cdn_skins:/var/www/cdn/skins:ro
backend:
image: gitea.mrixs.me/mrixs/mrixscraft-server:latest
container_name: mc-backend
restart: unless-stopped
environment:
SERVER_PORT: 8080
DATABASE_URL: postgres://mcuser:${DB_PASSWORD}@postgres:5432/mcserver?sslmode=disable
CI_TOKEN: ${CI_TOKEN}
CAS_DIR: /var/www/cdn/files
SKINS_DIR: /var/www/cdn/skins
JWT_SECRET: ${JWT_SECRET}
BASE_URL: https://minecraft.mrixs.me
volumes:
- cdn_files:/var/www/cdn/files
- cdn_skins:/var/www/cdn/skins
depends_on:
postgres:
condition: service_healthy
expose:
- "8080"
labels:
- "com.centurylinklabs.watchtower.enable=true"
postgres:
image: postgres:16-alpine
container_name: mc-postgres
restart: unless-stopped
environment:
POSTGRES_DB: mcserver
POSTGRES_USER: mcuser
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- pgdata:/var/lib/postgresql/data
- ./migrations:/docker-entrypoint-initdb.d:ro
- ./backups:/backups
healthcheck:
test: ["CMD-SHELL", "pg_isready -U mcuser -d mcserver"]
interval: 10s
timeout: 5s
retries: 5
expose:
- "5432"
watchtower:
image: nickfedor/watchtower
container_name: mc-watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
WATCHTOWER_CLEANUP: "true"
WATCHTOWER_POLL_INTERVAL: 300
WATCHTOWER_LABEL_ENABLE: "true"
volumes:
pgdata:
driver: local
cdn_files:
driver: local
cdn_skins:
driver: local
caddy_data:
driver: local
caddy_config:
driver: local