services: app: build: context: . depends_on: db: condition: service_healthy environment: TZ: ${TZ:-Asia/Shanghai} DB_HOST: db DB_PORT: 3306 DB_NAME: ${DB_NAME:-qiangchewei} DB_USER: ${DB_USER:-qiangchewei} DB_PASS: ${DB_PASS:-qiangchewei_password} DB_CHARSET: utf8mb4 ports: - "${APP_PORT:-8080}:80" volumes: - ./assets:/var/www/html/assets restart: unless-stopped healthcheck: test: ["CMD", "php", "/usr/local/bin/healthcheck.php"] interval: 30s timeout: 5s retries: 5 start_period: 30s websocket: build: context: . command: ["php", "api/ws_server.php", "8080"] depends_on: db: condition: service_healthy environment: TZ: ${TZ:-Asia/Shanghai} DB_HOST: db DB_PORT: 3306 DB_NAME: ${DB_NAME:-qiangchewei} DB_USER: ${DB_USER:-qiangchewei} DB_PASS: ${DB_PASS:-qiangchewei_password} DB_CHARSET: utf8mb4 ports: - "${WS_PORT:-8081}:8080" restart: unless-stopped ai-worker: build: context: . command: ["php", "api/ai_cron.php", "--daemon"] depends_on: db: condition: service_healthy environment: TZ: ${TZ:-Asia/Shanghai} DB_HOST: db DB_PORT: 3306 DB_NAME: ${DB_NAME:-qiangchewei} DB_USER: ${DB_USER:-qiangchewei} DB_PASS: ${DB_PASS:-qiangchewei_password} DB_CHARSET: utf8mb4 profiles: - ai restart: unless-stopped db: image: mysql:8.0 command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci environment: TZ: ${TZ:-Asia/Shanghai} MYSQL_DATABASE: ${DB_NAME:-qiangchewei} MYSQL_USER: ${DB_USER:-qiangchewei} MYSQL_PASSWORD: ${DB_PASS:-qiangchewei_password} MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS:-root_password} WS_PORT: ${WS_PORT:-8081} volumes: - db_data:/var/lib/mysql - ./database.sql:/docker-entrypoint-initdb.d/01-schema.sql:ro - ./docker/mysql/02-docker-defaults.sh:/docker-entrypoint-initdb.d/02-docker-defaults.sh:ro restart: unless-stopped healthcheck: test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -u$${MYSQL_USER} -p$${MYSQL_PASSWORD} --silent"] interval: 10s timeout: 5s retries: 10 start_period: 30s volumes: db_data: