# LeoCRM - Environment Variables Template # Copy to .env and fill in real values. # === COOLIFY DEPLOYMENT (required for scripts/deploy.py) === # Coolify API token (required for deploy) COOLIFY_API_TOKEN= # Coolify base URL COOLIFY_BASE_URL=https://server.media-on.de # Application UUID (optional — resolved via API lookup by APP_NAME if absent) COOLIFY_APP_UUID= # Worker Service UUID (optional — resolved via API lookup by WORKER_NAME if absent) COOLIFY_WORKER_UUID= # Application name for API lookup APP_NAME=leocrm # Worker name for API lookup WORKER_NAME=leocrm-worker # App domain (required for deploy, used for health check and FQDN) APP_DOMAIN=https://crm.media-on.de # === COOLIFY INITIAL DEPLOY (only needed for --initial) === # Coolify project UUID COOLIFY_PROJECT_UUID= # Coolify server UUID COOLIFY_SERVER_UUID= # Coolify private key UUID (for Git deploy key) COOLIFY_PRIVATE_KEY_UUID= # Coolify environment name COOLIFY_ENVIRONMENT=production # === DATABASE (required) === # Single password for all DB roles (crm_user, crm_api, crm_auth, crm_worker, crm_migration) DB_PASSWORD= # Database name POSTGRES_DB=crm_db # Database user (superuser/owner) POSTGRES_USER=crm_user # Database host (container name in Docker network) DB_HOST=postgres # Full database URLs (constructed from DB_PASSWORD/DB_HOST if not set explicitly) DATABASE_URL=postgresql+asyncpg://crm_api:${DB_PASSWORD}@postgres:5432/${POSTGRES_DB} AUTH_DATABASE_URL=postgresql+asyncpg://crm_auth:${DB_PASSWORD}@postgres:5432/${POSTGRES_DB} WORKER_DATABASE_URL=postgresql+asyncpg://crm_worker:${DB_PASSWORD}@postgres:5432/${POSTGRES_DB} MIGRATION_DATABASE_URL=postgresql+asyncpg://crm_user:${DB_PASSWORD}@postgres:5432/${POSTGRES_DB} # === REDIS (required) === REDIS_PASSWORD= REDIS_HOST=redis REDIS_URL=redis://default:${REDIS_PASSWORD}@redis:6379/0 # === SECURITY (required) === # Secret key for signing, sessions (use a secure random string >= 32 chars) SECRET_KEY= # === SSH VERIFICATION (optional, deploy.py verification only) === SSH_KEY=/a0/usr/workdir/.ssh/coolify-01-root SERVER_IP=46.225.91.159 # Login test credentials (optional, for deploy verification) LOGIN_EMAIL= LOGIN_PASSWORD= # === APPLICATION === # Environment: development | production | testing ENVIRONMENT=production # Log level: DEBUG | INFO | WARNING | ERROR LOG_LEVEL=INFO # CORS allowed origins (comma-separated, NO wildcards) CORS_ORIGINS=https://crm.media-on.de # Frontend URL FRONTEND_URL=https://crm.media-on.de # Session cookie secure (true in production) SESSION_COOKIE_SECURE=true # === DOCKER COMPOSE (optional overrides) === # Traefik host APP_HOST=crm.media-on.de APP_PORT=8000 # === STORAGE === STORAGE_PATH=/data/storage # Storage backend: local (default) or s3 STORAGE_BACKEND=local # S3-compatible storage (when STORAGE_BACKEND=s3) S3_ENDPOINT= S3_BUCKET= S3_ACCESS_KEY= S3_SECRET_KEY= S3_REGION=us-east-1 S3_SECURE=true # === SMTP / EMAIL === SMTP_HOST=localhost SMTP_PORT=587 SMTP_USER= SMTP_PASSWORD= SMTP_FROM=no-reply@localhost SMTP_TLS=true # === RATE LIMITING === RATE_LIMIT_LOGIN_MAX=5 RATE_LIMIT_LOGIN_WINDOW=900 RATE_LIMIT_RESET_MAX=3 RATE_LIMIT_RESET_WINDOW=3600 RATE_LIMIT_RESET_CONFIRM_MAX=5 RATE_LIMIT_RESET_CONFIRM_WINDOW=3600 RATE_LIMIT_GENERAL_MAX=60 RATE_LIMIT_GENERAL_WINDOW=60 # === DATABASE POOL === DB_POOL_SIZE=10 DB_MAX_OVERFLOW=20 DB_ECHO=false # === SESSION === SESSION_TTL_SECONDS=28800 SESSION_COOKIE_NAME=leocrm_session SESSION_COOKIE_SAMESITE=strict SESSION_COOKIE_HTTPONLY=true # === PASSWORD HASHING === BCRYPT_ROUNDS=12 PASSWORD_RESET_EXPIRY_HOURS=1 # === AI / SEARCH === # Ollama Cloud API Key (for LiteLLM) API_KEY_OLLAMA_CLOUD= # Embedding model (default: ollama/nomic-embed-text) SEARCH_EMBEDDING_MODEL=ollama/nomic-embed-text # LLM model for query understanding (default: ollama/deepseek-v4) SEARCH_LLM_MODEL=ollama/deepseek-v4 # === GIT (for initial deployment) === API_GIT_REPO=https://forgejo.media-on.de/Leopoldadmin/leocrm.git API_GIT_BRANCH=main # === Admin User (auto-seeded on first start) === ADMIN_EMAIL=admin@media-on.de ADMIN_PASSWORD=Admin123!