version: '3.8'

services:
  # 1. Next.js前端服务
  frontend:
    build:
      context: .  # 构建上下文：当前根目录（Dockerfile所在位置）
      dockerfile: Dockerfile  # 指定Dockerfile文件名
    ports:
      - "3000:3000"  # 映射主机3000端口到容器3000端口（前端访问端口）
    environment:
      # 数据库连接配置（指向docker-compose中的db服务）
      DATABASE_URL: mysql://chat_user:chat_password@db:3306/chat_db
      # 其他生产环境变量（如JWT密钥、API地址等）
      # NEXTAUTH_SECRET: your_secret_key
    env_file:
      - .env  # 加载根目录的.env文件（优先于environment字段）
    depends_on:
      db:
        condition: service_healthy  # 确保数据库完全启动后再启动前端
    restart: unless-stopped  # 容器异常退出时自动重启

  # 2. MySQL数据库服务
  db:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: root123456 #  root用户密码（需与应用配置一致）
      MYSQL_DATABASE: chat_db # 目标数据库名（需与应用配置一致）
      MYSQL_USER: chat_user # 应用访问数据库的用户（需与应用配置一致）
      MYSQL_PASSWORD: chat_password # 应用访问数据库的密码（需与应用配置一致）
    volumes:
      - mysql-data:/var/lib/mysql # 数据持久化卷
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql # 挂载初始化脚本（关键！）
    ports:
      - "3306:3306"
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "chat_user", "-pchat_password"]
      interval: 5s
      timeout: 10s
      retries: 3

# 数据持久化卷（MySQL数据保存到主机）
volumes:
  mysql-data:
    driver: local

# 网络配置（让前端和数据库在同一网络，可通过服务名访问）
networks:
  default:
    driver: bridge