name: ai-chat services: db: image: mysql:8.4 restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root} MYSQL_DATABASE: ai_chat MYSQL_USER: ${DB_USER:-ai_chat} MYSQL_PASSWORD: ${DB_PASSWORD:-chat_password} TZ: Asia/Shanghai volumes: - mysql-data:/var/lib/mysql - ./backend/database/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql:ro healthcheck: test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$$MYSQL_ROOT_PASSWORD --silent"] interval: 5s timeout: 5s retries: 30 start_period: 20s app: build: context: . target: app restart: unless-stopped environment: APP_DEBUG: ${APP_DEBUG:-false} APP_PUBLIC_URL: ${APP_PUBLIC_URL:-http://localhost:8081} DEFAULT_LANG: zh-cn DB_TYPE: mysql DB_HOST: db DB_NAME: ai_chat DB_USER: ${DB_USER:-ai_chat} DB_PASS: ${DB_PASSWORD:-chat_password} DB_PORT: 3306 DB_CHARSET: utf8mb4 JWT_SECRET: ${JWT_SECRET:-docker-development-secret-change-me} JWT_EXPIRE: ${JWT_EXPIRE:-604800} COSYVOICE_ENABLED: ${COSYVOICE_ENABLED:-false} COSYVOICE_BASE_URL: ${COSYVOICE_BASE_URL:-http://host.docker.internal:50000} SHORT_DRAMA_TTS_BASE_URL: ${SHORT_DRAMA_TTS_BASE_URL:-http://192.168.110.111:50000} extra_hosts: - "host.docker.internal:host-gateway" volumes: - uploads-data:/var/www/backend/uploads - runtime-data:/var/www/backend/runtime - storage-data:/var/www/backend/storage depends_on: db: condition: service_healthy healthcheck: test: ["CMD", "php", "-r", "$$socket=@fsockopen('127.0.0.1',9000); exit($$socket?0:1);"] interval: 10s timeout: 3s retries: 10 web: build: context: . target: web restart: unless-stopped ports: - "${APP_PORT:-8081}:80" depends_on: app: condition: service_healthy volumes: mysql-data: uploads-data: runtime-data: storage-data: