version: '3.8' services: mysql: image: mysql:8.0 container_name: pfandsystem-demo-mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: pfandsystem_demo MYSQL_USER: pfandsystem MYSQL_PASSWORD: ${MYSQL_PASSWORD} volumes: - mysql_data:/var/lib/mysql - ./database/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql:ro ports: - "127.0.0.1:3308:3306" networks: - pfandsystem-demo-net healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] timeout: 20s retries: 10 phpmyadmin: image: phpmyadmin:latest container_name: pfandsystem-demo-phpmyadmin restart: unless-stopped environment: PMA_HOST: mysql PMA_PORT: 3306 PMA_USER: pfandsystem PMA_PASSWORD: ${MYSQL_PASSWORD} UPLOAD_LIMIT: 100M ports: - "127.0.0.1:8083:80" networks: - pfandsystem-demo-net depends_on: mysql: condition: service_healthy backend: build: context: ./backend dockerfile: Dockerfile container_name: pfandsystem-demo-backend restart: unless-stopped environment: DB_HOST: mysql DB_PORT: 3306 DB_USER: pfandsystem DB_PASSWORD: ${MYSQL_PASSWORD} DB_NAME: pfandsystem_demo JWT_SECRET: ${JWT_SECRET} PORT: 3001 NODE_ENV: production RESEND_API_KEY: ${RESEND_API_KEY} UPLOAD_DIR: /app/uploads MAX_FILE_SIZE: 10485760 SUPERADMIN_EMAIL: ${SUPERADMIN_EMAIL} SUPERADMIN_PASSWORD: ${SUPERADMIN_PASSWORD} volumes: - backend_uploads:/app/uploads ports: - "127.0.0.1:3003:3001" networks: - pfandsystem-demo-net depends_on: mysql: condition: service_healthy frontend: image: nginx:1.25-alpine container_name: pfandsystem-demo-frontend restart: unless-stopped volumes: - ./dist:/usr/share/nginx/html:ro networks: - pfandsystem-demo-net labels: - "traefik.enable=true" - "traefik.docker.network=pfandsystem-demo_pfandsystem-demo-net" - "traefik.http.routers.pfandsystem-demo.rule=Host(`pfandsystem.dockly.de`)" - "traefik.http.routers.pfandsystem-demo.entrypoints=web,websecure" - "traefik.http.routers.pfandsystem-demo.tls=true" - "traefik.http.routers.pfandsystem-demo.tls.certresolver=letsencrypt" - "traefik.http.services.pfandsystem-demo.loadbalancer.server.port=80" volumes: mysql_data: driver: local backend_uploads: driver: local networks: pfandsystem-demo-net: driver: bridge