- Add SQLAlchemy models for User, Translation, ApiKey, UsageLog, PaymentHistory - Add database connection management with PostgreSQL/SQLite support - Add repository layer for CRUD operations - Add Alembic migration setup with initial migration - Update auth_service to automatically use database when DATABASE_URL is set - Update docker-compose.yml with PostgreSQL service and Redis (non-optional) - Add database migration script (scripts/migrate_to_db.py) - Update .env.example with database configuration
135 lines
3.9 KiB
Plaintext
135 lines
3.9 KiB
Plaintext
# Document Translation API - Environment Configuration
|
|
# Copy this file to .env and configure your settings
|
|
# ⚠️ NEVER commit .env to version control!
|
|
|
|
# ============== Translation Services ==============
|
|
# Default provider: google, ollama, deepl, libre, openai, openrouter
|
|
TRANSLATION_SERVICE=google
|
|
|
|
# DeepL API Key (required for DeepL provider)
|
|
# Get from: https://www.deepl.com/pro-api
|
|
DEEPL_API_KEY=
|
|
|
|
# OpenAI API Key (required for OpenAI provider)
|
|
# Get from: https://platform.openai.com/api-keys
|
|
OPENAI_API_KEY=
|
|
|
|
# OpenRouter API Key (required for OpenRouter provider)
|
|
# Get from: https://openrouter.ai/keys
|
|
OPENROUTER_API_KEY=
|
|
|
|
# Ollama Configuration (for local LLM-based translation)
|
|
OLLAMA_BASE_URL=http://localhost:11434
|
|
OLLAMA_MODEL=llama3
|
|
OLLAMA_VISION_MODEL=llava
|
|
|
|
# ============== File Limits ==============
|
|
# Maximum file size in MB
|
|
MAX_FILE_SIZE_MB=50
|
|
|
|
# ============== Rate Limiting (SaaS) ==============
|
|
# Enable/disable rate limiting
|
|
RATE_LIMIT_ENABLED=true
|
|
|
|
# Request limits
|
|
RATE_LIMIT_PER_MINUTE=30
|
|
RATE_LIMIT_PER_HOUR=200
|
|
|
|
# Translation-specific limits
|
|
TRANSLATIONS_PER_MINUTE=10
|
|
TRANSLATIONS_PER_HOUR=50
|
|
MAX_CONCURRENT_TRANSLATIONS=5
|
|
|
|
# ============== Cleanup Service ==============
|
|
# Enable automatic file cleanup
|
|
CLEANUP_ENABLED=true
|
|
|
|
# Cleanup interval in minutes
|
|
CLEANUP_INTERVAL_MINUTES=15
|
|
|
|
# File time-to-live in minutes
|
|
FILE_TTL_MINUTES=60
|
|
INPUT_FILE_TTL_MINUTES=30
|
|
OUTPUT_FILE_TTL_MINUTES=120
|
|
|
|
# Disk space warning thresholds (GB)
|
|
DISK_WARNING_THRESHOLD_GB=5.0
|
|
DISK_CRITICAL_THRESHOLD_GB=1.0
|
|
|
|
# ============== Security ==============
|
|
# Enable HSTS (only for HTTPS deployments)
|
|
ENABLE_HSTS=false
|
|
|
|
# CORS allowed origins (comma-separated)
|
|
# ⚠️ IMPORTANT: Set to your actual frontend domain(s) in production!
|
|
# Example: https://yourdomain.com,https://www.yourdomain.com
|
|
# Use "*" ONLY for local development
|
|
CORS_ORIGINS=http://localhost:3000
|
|
|
|
# Maximum request size in MB
|
|
MAX_REQUEST_SIZE_MB=100
|
|
|
|
# Request timeout in seconds
|
|
REQUEST_TIMEOUT_SECONDS=300
|
|
|
|
# ============== Database ==============
|
|
# PostgreSQL connection string (recommended for production)
|
|
# Format: postgresql://user:password@host:port/database
|
|
# DATABASE_URL=postgresql://translate_user:secure_password@localhost:5432/translate_db
|
|
|
|
# SQLite path (used when DATABASE_URL is not set - for development)
|
|
SQLITE_PATH=data/translate.db
|
|
|
|
# Enable SQL query logging (for debugging)
|
|
DATABASE_ECHO=false
|
|
|
|
# Redis for sessions and caching (recommended for production)
|
|
# REDIS_URL=redis://localhost:6379/0
|
|
|
|
# ============== Admin Authentication ==============
|
|
# ⚠️ REQUIRED: These must be set for admin endpoints to work!
|
|
ADMIN_USERNAME=admin
|
|
|
|
# Use SHA256 hash of password (recommended for production)
|
|
# Generate with: python -c "import hashlib; print(hashlib.sha256(b'your_password').hexdigest())"
|
|
ADMIN_PASSWORD_HASH=
|
|
|
|
# Or use plain password (NOT recommended for production)
|
|
# ADMIN_PASSWORD=
|
|
|
|
# Token secret for session management
|
|
# Generate with: python -c "import secrets; print(secrets.token_hex(32))"
|
|
ADMIN_TOKEN_SECRET=
|
|
|
|
# ============== User Authentication ==============
|
|
# JWT secret key for user tokens
|
|
# Generate with: python -c "import secrets; print(secrets.token_urlsafe(64))"
|
|
JWT_SECRET_KEY=
|
|
|
|
# Frontend URL for redirects
|
|
FRONTEND_URL=http://localhost:3000
|
|
|
|
# ============== Stripe Payments ==============
|
|
# Get your keys from https://dashboard.stripe.com/apikeys
|
|
STRIPE_PUBLISHABLE_KEY=pk_test_...
|
|
STRIPE_SECRET_KEY=sk_test_...
|
|
STRIPE_WEBHOOK_SECRET=whsec_...
|
|
|
|
# Stripe Price IDs (create products in Stripe Dashboard)
|
|
# https://dashboard.stripe.com/products
|
|
STRIPE_PRICE_STARTER_MONTHLY=price_xxx
|
|
STRIPE_PRICE_STARTER_YEARLY=price_xxx
|
|
STRIPE_PRICE_PRO_MONTHLY=price_xxx
|
|
STRIPE_PRICE_PRO_YEARLY=price_xxx
|
|
STRIPE_PRICE_BUSINESS_MONTHLY=price_xxx
|
|
STRIPE_PRICE_BUSINESS_YEARLY=price_xxx
|
|
|
|
# ============== Monitoring ==============
|
|
# Log level: DEBUG, INFO, WARNING, ERROR
|
|
LOG_LEVEL=INFO
|
|
|
|
# Enable request logging
|
|
ENABLE_REQUEST_LOGGING=true
|
|
|
|
# Memory usage threshold (percentage)
|
|
MAX_MEMORY_PERCENT=80 |