name: smart-parking-platform services: mysql: image: mysql:8.0 container_name: smart-parking-mysql restart: unless-stopped environment: MYSQL_DATABASE: ${MYSQL_DATABASE:-smart_parking} MYSQL_USER: ${MYSQL_USER:-parking} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-parking123} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123} TZ: Asia/Shanghai command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci ports: - "${MYSQL_PORT:-4012}:3306" volumes: - mysql-data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-p${MYSQL_ROOT_PASSWORD:-root123}"] interval: 10s timeout: 5s retries: 10 networks: - parking-net app: build: context: . dockerfile: front-backend.Dockerfile container_name: smart-parking-app restart: unless-stopped depends_on: mysql: condition: service_healthy environment: MYSQL_HOST: mysql MYSQL_PORT: 3306 MYSQL_DATABASE: ${MYSQL_DATABASE:-smart_parking} MYSQL_USER: ${MYSQL_USER:-parking} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-parking123} JWT_SECRET: ${JWT_SECRET:-smart-parking-secret} JWT_EXPIRES_IN: 30d PUBLIC_DIR_ABSOLUTE_PATH: /var/www/html/public TZ: Asia/Shanghai ports: - "${APP_PORT:-4010}:80" - "${RTMP_PORT:-4015}:1515" volumes: - public-data:/var/www/html/public - hls-data:/dev/shm/nginx-live healthcheck: test: ["CMD", "curl", "-fsS", "http://localhost/"] interval: 15s timeout: 5s retries: 10 start_period: 40s networks: - parking-net device-simulator: image: smart-parking-device-simulator:latest build: context: . dockerfile: simulator.Dockerfile container_name: smart-parking-device-simulator restart: unless-stopped depends_on: app: condition: service_healthy environment: HTTP_SERVER_URL: http://app RTMP_SERVER_URL: rtmp://app:1515/live ADMIN_USERNAME: ${AI_ADMIN_USERNAME:-admin} ADMIN_PASSWORD: ${AI_ADMIN_PASSWORD:-admin123} CAMERA_IDS: ${SIM_CAMERA_IDS:-1,2,3,4,5,6,7,8,9,10,11,12} ASSETS_DIR: /assets TZ: Asia/Shanghai networks: - parking-net ai-end: profiles: ["ai"] build: context: . dockerfile: ai-end.Dockerfile container_name: smart-parking-ai-end restart: unless-stopped depends_on: app: condition: service_healthy environment: HTTP_SERVER_URL: http://app RTMP_SERVER_URL: rtmp://app:1515/live ADMIN_USERNAME: ${AI_ADMIN_USERNAME:-admin} ADMIN_PASSWORD: ${AI_ADMIN_PASSWORD:-admin123} DETECTION_INTERVAL: "0.5" MODEL_DEVICE: cpu TZ: Asia/Shanghai networks: - parking-net volumes: mysql-data: public-data: hls-data: networks: parking-net: driver: bridge