services: app: image: tiechui251/arboris-app:latest container_name: arboris-app ports: - "${APP_PORT:-80}:80" environment: SECRET_KEY: ${SECRET_KEY:?请设置SECRET_KEY} ENVIRONMENT: ${ENVIRONMENT:-production} DEBUG: ${DEBUG:-false} DB_PROVIDER: ${DB_PROVIDER:-sqlite} MYSQL_HOST: ${MYSQL_HOST:-db} MYSQL_PORT: ${MYSQL_PORT:-3306} MYSQL_USER: ${MYSQL_USER:-arboris} MYSQL_PASSWORD: ${MYSQL_PASSWORD:?请设置数据库密码} MYSQL_DATABASE: ${MYSQL_DATABASE:-arboris} ADMIN_DEFAULT_USERNAME: ${ADMIN_DEFAULT_USERNAME:-admin} ADMIN_DEFAULT_PASSWORD: ${ADMIN_DEFAULT_PASSWORD:-ChangeMe123!} ADMIN_DEFAULT_EMAIL: ${ADMIN_DEFAULT_EMAIL:-admin@example.com} OPENAI_API_KEY: ${OPENAI_API_KEY} OPENAI_API_BASE_URL: ${OPENAI_API_BASE_URL:-https://api.openai.com/v1} OPENAI_MODEL_NAME: ${OPENAI_MODEL_NAME:-gpt-3.5-turbo} WRITER_CHAPTER_VERSION_COUNT: ${WRITER_CHAPTER_VERSION_COUNT:-2} SMTP_SERVER: ${SMTP_SERVER:-smtp.example.com} SMTP_PORT: ${SMTP_PORT:-465} SMTP_USERNAME: ${SMTP_USERNAME:-no-reply@example.com} SMTP_PASSWORD: ${SMTP_PASSWORD} EMAIL_FROM: ${EMAIL_FROM:-小说生成器} ALLOW_USER_REGISTRATION: ${ALLOW_USER_REGISTRATION:-true} ENABLE_LINUXDO_LOGIN: ${ENABLE_LINUXDO_LOGIN:-false} LINUXDO_CLIENT_ID: ${LINUXDO_CLIENT_ID} LINUXDO_CLIENT_SECRET: ${LINUXDO_CLIENT_SECRET} LINUXDO_REDIRECT_URI: ${LINUXDO_REDIRECT_URI} LINUXDO_AUTH_URL: ${LINUXDO_AUTH_URL:-https://connect.linux.do/oauth2/authorize} LINUXDO_TOKEN_URL: ${LINUXDO_TOKEN_URL:-https://connect.linux.do/oauth2/token} LINUXDO_USER_INFO_URL: ${LINUXDO_USER_INFO_URL:-https://connect.linux.do/api/user} restart: unless-stopped volumes: - ${SQLITE_STORAGE_SOURCE:-sqlite-data}:/app/storage networks: - app-network healthcheck: test: ["CMD", "curl", "-f", "http://127.0.0.1:8000/api/health"] interval: 30s timeout: 10s retries: 3 start_period: 90s # MySQL 数据库服务(通过 profile mysql 启用) db: image: mysql:8.0 container_name: arboris-db profiles: - mysql environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-ChangeMe_RootPassword123} MYSQL_DATABASE: ${MYSQL_DATABASE:-arboris} MYSQL_USER: ${MYSQL_USER:-arboris} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-ChangeMe_Password123} TZ: Asia/Shanghai volumes: - mysql-data:/var/lib/mysql - ./backend/db/init.sql:/docker-entrypoint-initdb.d/init.sql:ro restart: unless-stopped networks: - app-network healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"] interval: 10s timeout: 5s retries: 5 start_period: 30s command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci - --max_connections=1000 volumes: mysql-data: driver: local sqlite-data: driver: local networks: app-network: driver: bridge