# 🏭 MYP Backend - Standalone Server Konfiguration # Backend-Service als vollständig unabhängiger Server version: '3.8' services: # === BACKEND SERVICE === backend: build: context: . dockerfile: Dockerfile args: - BUILDKIT_INLINE_CACHE=1 image: myp/backend:latest container_name: myp-backend-standalone restart: unless-stopped environment: # Flask-Konfiguration - FLASK_APP=app.py - FLASK_ENV=${FLASK_ENV:-production} - PYTHONUNBUFFERED=1 # Datenbank - DATABASE_PATH=${DATABASE_PATH:-instance/myp.db} # Sicherheit - SECRET_KEY=${SECRET_KEY:-7445630171969DFAC92C53CEC92E67A9CB2E00B3CB2F} - JWT_SECRET=${JWT_SECRET:-secure-jwt-secret} # CORS-Konfiguration für Frontend-Zugriff - CORS_ORIGINS=${CORS_ORIGINS:-http://localhost:3000,https://frontend.myp.local} # Drucker-Konfiguration - "PRINTERS=${PRINTERS:-{\"Drucker 1\": {\"ip\": \"192.168.0.100\"}, \"Drucker 2\": {\"ip\": \"192.168.0.101\"}, \"Drucker 3\": {\"ip\": \"192.168.0.102\"}, \"Drucker 4\": {\"ip\": \"192.168.0.103\"}, \"Drucker 5\": {\"ip\": \"192.168.0.104\"}, \"Drucker 6\": {\"ip\": \"192.168.0.106\"}}}" # TAPO Smart Plug - TAPO_USERNAME=${TAPO_USERNAME:-till.tomczak@mercedes-benz.com} - TAPO_PASSWORD=${TAPO_PASSWORD:-744563017196A} # Netzwerk - HOST=0.0.0.0 - PORT=5000 # Logging - LOG_LEVEL=${LOG_LEVEL:-INFO} volumes: - backend_instance:/app/instance - backend_logs:/app/logs - backend_migrations:/app/migrations - ./config:/app/config:ro ports: - "5000:5000" # Direkter Port-Zugang für Backend-Server networks: - backend-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:5000/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s labels: - "service.type=backend" - "service.name=myp-backend" - "service.environment=${FLASK_ENV:-production}" # === BACKEND DATENBANK (Optional: Separate PostgreSQL) === backend-db: image: postgres:15-alpine container_name: myp-backend-db restart: unless-stopped environment: - POSTGRES_DB=${DB_NAME:-myp_backend} - POSTGRES_USER=${DB_USER:-myp_user} - POSTGRES_PASSWORD=${DB_PASSWORD:-secure_password} - POSTGRES_HOST_AUTH_METHOD=trust volumes: - backend_db_data:/var/lib/postgresql/data - ./sql/init:/docker-entrypoint-initdb.d:ro ports: - "5432:5432" networks: - backend-network healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-myp_user} -d ${DB_NAME:-myp_backend}"] interval: 10s timeout: 5s retries: 5 # === BACKEND CACHE (Redis) === backend-cache: image: redis:7.2-alpine container_name: myp-backend-cache restart: unless-stopped command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD:-backend_cache_password} volumes: - backend_cache_data:/data ports: - "6379:6379" networks: - backend-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 3 # === PERSISTENTE VOLUMES === volumes: backend_instance: driver: local driver_opts: type: none o: bind device: ./instance backend_logs: driver: local driver_opts: type: none o: bind device: ./logs backend_migrations: driver: local driver_opts: type: none o: bind device: ./migrations backend_db_data: driver: local backend_cache_data: driver: local # === BACKEND-NETZWERK === networks: backend-network: driver: bridge driver_opts: com.docker.network.enable_ipv6: "false" com.docker.network.bridge.enable_ip_masquerade: "true" labels: - "description=MYP Backend Server Netzwerk" - "project=myp-backend" - "tier=backend" # === KONFIGURATION FÜR BACKEND === x-backend-defaults: &backend-defaults restart: unless-stopped logging: driver: "json-file" options: max-size: "10m" max-file: "3" labels: "service,environment,tier" x-healthcheck-backend: &backend-healthcheck interval: 30s timeout: 10s retries: 3 start_period: 40s