Repository navigation
Expand file tree
/
Copy path.env.example
More file actions
149 lines (135 loc) Β· 5.08 KB
/
Copy path.env.example
File metadata and controls
149 lines (135 loc) Β· 5.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# Application
APP_NAME=Dependency Intelligence
APP_ENV=development
APP_DEBUG=true
APP_URL=http://localhost:3000
API_URL=http://localhost:8000
SECRET_KEY=change-me-to-a-long-random-secret-key-in-production
# Production (APP_ENV=production or prod) rejects:
# this SECRET_KEY placeholder, GITHUB_WEBHOOK_SECRET placeholder,
# localhost APP_URL/API_URL/GITHUB_REDIRECT_URI, empty GitHub OAuth,
# Mailhog/localhost SMTP_HOST, Redis URLs without a password,
# ALLOWED_HOSTS that omit the API hostname, APP_DEBUG=true,
# and the development DATABASE_URL password.
# Also required at frontend image build: NEXT_PUBLIC_APP_URL, NEXT_PUBLIC_API_URL
# (must not be localhost). Stripe/Razorpay may stay empty for evaluation-only;
# checkout returns 503 until configured.
ALLOWED_HOSTS=localhost,127.0.0.1,backend,frontend
# Database
POSTGRES_USER=depintel
POSTGRES_PASSWORD=depintel_secret
POSTGRES_DB=dependency_intelligence
DATABASE_URL=postgresql+asyncpg://depintel:depintel_secret@postgres:5432/dependency_intelligence
DATABASE_URL_SYNC=postgresql://depintel:depintel_secret@postgres:5432/dependency_intelligence
# Redis
# Production Compose requires REDIS_PASSWORD (no default). Development Compose has no Redis auth.
REDIS_PASSWORD=
REDIS_URL=redis://redis:6379/0
CELERY_BROKER_URL=redis://redis:6379/1
CELERY_RESULT_BACKEND=redis://redis:6379/2
# GitHub OAuth
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
GITHUB_REDIRECT_URI=http://localhost:8000/api/v1/auth/github/callback
GITHUB_WEBHOOK_SECRET=change-me-webhook-secret
# Production: must not remain change-me-webhook-secret
# AI / LLM (provider-agnostic β switch with AI_PROVIDER)
# Local default: ollama. Production: gemini | openai | openrouter | groq
AI_PROVIDER=ollama
AI_FALLBACK_PROVIDERS=openai,gemini,openrouter,groq
# When AI_PROVIDER=ollama, cloud fallbacks stay off unless this is true
AI_ENABLE_CLOUD_FALLBACK=false
OPENAI_API_KEY=
OPENAI_MODEL=gpt-4.1-mini
GEMINI_API_KEY=
GROQ_API_KEY=
OPENROUTER_API_KEY=
OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
# Ollama (local) β from Docker use host.docker.internal; from host use localhost
OLLAMA_BASE_URL=http://host.docker.internal:11434
OLLAMA_MODEL=qwen3:8b
LLM_MODEL=
# Development default: 180s so local Ollama can finish Dynamic Upgrade Intelligence.
# Production: set LLM_TIMEOUT explicitly. Do not hardcode in application logic.
LLM_TIMEOUT=180
LLM_MAX_TOKENS=4096
# Cap for scan-time dependency summaries (local inference)
LLM_SUMMARY_MAX_TOKENS=512
LLM_TEMPERATURE=0.2
AI_CACHE_TTL_SECONDS=86400
# Google OAuth (optional)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_REDIRECT_URI=http://localhost:8000/api/v1/auth/google/callback
# Billing provider: stripe | razorpay
BILLING_PROVIDER=stripe
# Stripe (used when BILLING_PROVIDER=stripe)
STRIPE_SECRET_KEY=
STRIPE_PUBLISHABLE_KEY=
STRIPE_WEBHOOK_SECRET=
STRIPE_PRICE_STARTER_MONTHLY=
STRIPE_PRICE_STARTER_YEARLY=
STRIPE_PRICE_PRO_MONTHLY=
STRIPE_PRICE_PRO_YEARLY=
STRIPE_PRICE_TEAM_MONTHLY=
STRIPE_PRICE_TEAM_YEARLY=
# Razorpay (used when BILLING_PROVIDER=razorpay)
# Create Plans in Razorpay Dashboard β Subscriptions β Plans
RAZORPAY_KEY_ID=
RAZORPAY_KEY_SECRET=
RAZORPAY_WEBHOOK_SECRET=
RAZORPAY_PLAN_STARTER_MONTHLY=
RAZORPAY_PLAN_STARTER_YEARLY=
RAZORPAY_PLAN_PRO_MONTHLY=
RAZORPAY_PLAN_PRO_YEARLY=
RAZORPAY_PLAN_TEAM_MONTHLY=
RAZORPAY_PLAN_TEAM_YEARLY=
# SMTP (development Compose uses Mailhog on smtp:1025)
SMTP_HOST=localhost
SMTP_PORT=1025
SMTP_USER=
SMTP_PASSWORD=
SMTP_FROM=noreply@dependency-intelligence.local
SMTP_TLS=false
SLACK_WEBHOOK_URL=
# License Policy
LICENSE_POLICY_REJECT=GPL-2.0,GPL-3.0,AGPL-3.0,AGPL-1.0
LICENSE_POLICY_WARN=LGPL-2.1,LGPL-3.0
# Scanner
SCAN_CLONE_DIR=/tmp/depintel/repos
SCAN_MAX_FILE_SIZE_MB=5
SCAN_CONCURRENCY=4
# Background jobs β worker lifecycle (Repository Scan + Upgrade Simulator)
# Seconds a job may wait in the queue before it is failed as "no worker".
SCAN_PICKUP_TIMEOUT_SECONDS=60
# Maximum wall-clock runtime for a scan before it is reaped as timed out.
SCAN_RUNNING_TIMEOUT_MINUTES=30
# How often a running worker refreshes last_heartbeat_at.
WORKER_HEARTBEAT_SECONDS=15
# Missing heartbeats for this long means the job is treated as dead.
STALE_SCAN_TIMEOUT_MINUTES=5
# Celery execution guards for the scan pipeline.
SCAN_SOFT_TIME_LIMIT_SECONDS=1800
SCAN_HARD_TIME_LIMIT_SECONDS=2100
# Upgrade Simulator equivalents.
SIMULATION_PICKUP_TIMEOUT_SECONDS=60
SIMULATION_RUNNING_TIMEOUT_MINUTES=15
SIMULATION_SOFT_TIME_LIMIT_SECONDS=900
SIMULATION_HARD_TIME_LIMIT_SECONDS=1080
# Queue is reported as blocked once this many jobs are waiting.
QUEUE_BLOCKED_DEPTH_THRESHOLD=25
# Automatic retries for transient task failures.
JOB_MAX_AUTO_RETRIES=2
# Worker health probing (Celery inspect is a blocking broadcast).
WORKER_HEALTH_PROBE_TIMEOUT_SECONDS=0.75
WORKER_HEALTH_CACHE_SECONDS=10
# JWT
JWT_ALGORITHM=HS256
JWT_ACCESS_TOKEN_EXPIRE_MINUTES=60
JWT_REFRESH_TOKEN_EXPIRE_DAYS=30
# Frontend (baked into the production image β must be public origins in production)
NEXT_PUBLIC_API_URL=http://localhost:8000
NEXT_PUBLIC_APP_URL=http://localhost:3000
# Unused by the application (legacy Compose env). Not required.
# NEXTAUTH_URL=
# NEXTAUTH_SECRET=