# 应用配置
APP_HOST=0.0.0.0
APP_PORT=3000
APP_ENV=development
# APP_KEY is auto-generated on first start. Only set manually if needed.
# APP_KEY=
# Profile-based env loading:
# .env → .env.{APP_PROFILE} → .env.local
# APP_PROFILE=development
# 数据库
# SQLite 默认: sqlite:{STORAGE_ROOT_DIR}/db/raisfast.db?mode=rwc
DATABASE_URL=sqlite:./storage/db/blog.db?mode=rwc
# ── 本地文件存储根目录 ──────────────────────────────────────
# 所有本地文件(db/uploads/logs/search_index/vfs/pid)的父目录
# STORAGE_ROOT_DIR=./storage
# JWT
JWT_SECRET=change-me-in-production-at-least-32-chars
JWT_ACCESS_EXPIRES=900
JWT_REFRESH_EXPIRES=604800
# 媒体上传(默认 {STORAGE_ROOT_DIR}/uploads,目录会自动创建)
# UPLOAD_DIR=./storage/uploads
MAX_UPLOAD_SIZE=104857600
# plugin
# PLUGIN_DIR=./extensions/plugins
# 插件虚拟文件系统(默认 {STORAGE_ROOT_DIR}/vfs)
# PLUGIN_VFS_ROOT=./storage/vfs
PLUGIN_VFS_MAX_FILE_SIZE=1048576
PLUGIN_VFS_MAX_TOTAL_SIZE=10485760
# 插件实例池大小(WASM/Lua/JS)
PLUGIN_WASM_POOL_SIZE=4
PLUGIN_LUA_POOL_SIZE=4
PLUGIN_JS_POOL_SIZE=4
# 日志(默认 {STORAGE_ROOT_DIR}/logs)
RUST_LOG=raisfast=debug,tower_http=debug
# LOG_DIR=./storage/logs
LOG_MAX_FILES=7
# 限流(格式:max_requests/window_secs)
RATE_LIMIT_GLOBAL_MAX=60
RATE_LIMIT_GLOBAL_WINDOW=60
RATE_LIMIT_REGISTER_MAX=5
RATE_LIMIT_REGISTER_WINDOW=3600
RATE_LIMIT_LOGIN_MAX=10
RATE_LIMIT_LOGIN_WINDOW=60
RATE_LIMIT_COMMENT_MAX=3
RATE_LIMIT_COMMENT_WINDOW=60
# Worker 后台任务队列
WORKER_ENABLED=false
WORKER_CONCURRENCY=2
WORKER_POLL_INTERVAL_MS=500
WORKER_DEFAULT_MAX_ATTEMPTS=3
WORKER_CRON_TICK_MS=60000
CRON_SEED_ENABLED=false
CRON_LOG_RETENTION_DAYS=30
# CRON_SCHEDULES — JSON array of schedules to seed on first run, e.g.:
# CRON_SCHEDULES=[{"label":"Generate Sitemap","job_type":"generate_sitemap","payload":null,"cron_expr":"0 0 */6 * * *","enabled":true}]
# 时区(IANA 格式,默认 UTC)
# APP_TIMEZONE=UTC
# Extension 根目录(统一管理 Content Type + Plugin)
# EXTENSION_DIR=./extensions
# CORS(生产环境务必设置具体域名,多个用逗号分隔)
# CORS_ORIGINS=http://localhost:3000
# 站点公开地址(前端访问后端的 URL,默认取 APP_HOST:APP_PORT)
# BASE_URL=http://localhost:3000
# 文件存储(local | s3)
# local: 文件存到 UPLOAD_DIR,需确保该目录可写
# s3: 文件存到 S3 兼容对象存储,需配置下方 S3_* 参数
# STORAGE_DRIVER=local
# S3 / RustFS 配置(仅 STORAGE_DRIVER=s3 时需要)
# S3_ENDPOINT=http://rustfs:9000
# S3_ACCESS_KEY=rustfsadmin
# S3_SECRET_KEY=rustfsadmin
# S3_BUCKET=blog
# S3_REGION=us-east-1
# S3_PUBLIC_URL=http://localhost:9001
# GraphQL API(默认关闭,启用后可通过 /api/v1/graphql 访问)
# GRAPHQL_ENABLED=true
# WebSocket 实时推送(默认关闭,启用后可通过 /api/v1/ws 连接)
# WEBSOCKET_ENABLED=true
# ── 内置模块开关 ──────────────────────────────────────────
# 控制哪些内置 CMS 模块启用(false 则不注册对应路由和表)
# BUILTIN_BLOG=true
# BUILTIN_PAGES=true
# BUILTIN_MEDIA=true
# BUILTIN_FULLTEXT=true
# BUILTIN_WORKFLOW=true
# BUILTIN_TENANTABLE=false