# SmartTable 统一 Docker 镜像部署配置
# 内嵌 Redis + SQLite 数据库的简化版本,适合快速部署和测试
# 单个容器包含:前端(Vue.js) + 后端(Flask) + Redis

services:
  # SmartTable 统一应用(包含前后端 + Redis)
  smarttable:
    build:
      context: .
      dockerfile: Dockerfile
    # 允许通过 SMARTTABLE_IMAGE 指定镜像(build_docker.py --run 时传入,
    # 避免构建产物镜像名与 compose 镜像名不一致导致重复构建)
    image: ${SMARTTABLE_IMAGE:-smarttable:latest}
    container_name: smarttable
    restart: unless-stopped
    ports:
      - "${APP_PORT:-80}:80"
    environment:
      # Flask 配置
      FLASK_ENV: ${FLASK_ENV:-production}
      SECRET_KEY: ${SECRET_KEY:-change-this-secret-key-in-production}
      JWT_SECRET_KEY: ${JWT_SECRET_KEY:-change-this-jwt-secret-in-production}
      JWT_ACCESS_TOKEN_EXPIRES: ${JWT_ACCESS_TOKEN_EXPIRES:-86400}
      
      # 数据库配置(使用 SQLite,不设置则 Config 自动生成正确路径)
      # 如需连接外部/网络上的 PostgreSQL,请在 .env 中设置 DATABASE_URL,例如:
      #   DATABASE_URL=postgresql+psycopg://user:pass@host:5432/dbname
      # 留空(默认)则使用容器内内置的 SQLite
      DATABASE_URL: ${DATABASE_URL:-}
      
      # Redis 配置(内嵌 Redis,连接本地)
      REDIS_URL: redis://127.0.0.1:6379/0
      REDIS_HOST: localhost
      REDIS_PORT: 6379
      SOCKETIO_MESSAGE_QUEUE: redis://127.0.0.1:6379/2
      
      # 上传配置
      UPLOAD_FOLDER: /app/uploads
      MAX_CONTENT_LENGTH: 52428800  # 50MB
      
      # 日志配置
      LOG_LEVEL: ${LOG_LEVEL:-INFO}
      # 实时协作配置
      ENABLE_REALTIME: ${ENABLE_REALTIME:-false}
    volumes:
      # 持久化数据库
      - sqlite_data:/app/data
      # 持久化 Redis 数据
      - redis_data:/data/redis
      # 持久化上传文件
      - uploads_data:/app/uploads
      # 日志文件
      - ./logs:/app/logs
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:80/api/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s
    networks:
      - smarttable-network

# 数据卷定义
volumes:
  sqlite_data:
    driver: local
  redis_data:
    driver: local
  uploads_data:
    driver: local

# 网络定义
networks:
  smarttable-network:
    driver: bridge