| # ============================================ | |
| # JobPortal - Environment Variables | |
| # ============================================ | |
| # Copy to .env: cp .env.example .env | |
| # Generate secrets: python -c "import secrets; print(secrets.token_urlsafe(32))" | |
| # ----- Application ----- | |
| APP_NAME="JobPortal" | |
| APP_ENV=development | |
| DEBUG=true | |
| # REQUIRED in production. Min 32 chars. Generate with command above. | |
| SECRET_KEY=change-me-to-a-random-64-char-string | |
| # REQUIRED in production. Separate from SECRET_KEY for API key encryption. | |
| ENCRYPTION_KEY= | |
| API_V1_STR=/api/v1 | |
| BACKEND_URL=http://localhost:8000 | |
| FRONTEND_URL=http://localhost:3000 | |
| # ----- Database ----- | |
| # Full URL (takes priority if set): | |
| # DATABASE_URL=postgresql://jobportal:jobportal@localhost:5432/jobportal | |
| POSTGRES_SERVER=localhost | |
| POSTGRES_PORT=5432 | |
| POSTGRES_USER=jobportal | |
| POSTGRES_PASSWORD=jobportal | |
| POSTGRES_DB=jobportal | |
| # ----- Redis ----- | |
| REDIS_URL=redis://localhost:6379/0 | |
| REDIS_PASSWORD= | |
| # ----- Auth ----- | |
| # Access token: 15 minutes (short-lived, stored in memory) | |
| ACCESS_TOKEN_EXPIRE_MINUTES=15 | |
| # Refresh token: 30 days (stored server-side with revocation) | |
| REFRESH_TOKEN_EXPIRE_DAYS=30 | |
| # Google OAuth (optional) | |
| GOOGLE_CLIENT_ID= | |
| GOOGLE_CLIENT_SECRET= | |
| # GitHub OAuth (optional) | |
| GITHUB_CLIENT_ID= | |
| GITHUB_CLIENT_SECRET= | |
| # ----- LLM Providers ----- | |
| LLM_DEFAULT_PROVIDER=ollama | |
| OLLAMA_BASE_URL=http://localhost:11434 | |
| OPENAI_API_KEY= | |
| ANTHROPIC_API_KEY= | |
| GOOGLE_API_KEY= | |
| MISTRAL_API_KEY= | |
| DEEPSEEK_API_KEY= | |
| XAI_API_KEY= | |
| HUGGINGFACE_API_KEY= | |
| # ----- Cloudflare R2 (Production only) ----- | |
| R2_ACCOUNT_ID= | |
| R2_ACCESS_KEY_ID= | |
| R2_SECRET_ACCESS_KEY= | |
| R2_BUCKET_NAME=jobportal | |
| # ----- Email (optional) ----- | |
| SMTP_HOST= | |
| SMTP_PORT=587 | |
| SMTP_USER= | |
| SMTP_PASSWORD= | |
| EMAILS_FROM_EMAIL=noreply@jobportal.dev | |
| EMAILS_FROM_NAME=JobPortal | |
| # ----- Scraper ----- | |
| SCRAPER_MAX_CONCURRENT=5 | |
| SCRAPER_DEFAULT_DELAY=2.0 | |
| SCRAPER_USER_AGENT="JobPortal/1.0 (+https://github.com/anky2002/best)" | |