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