Конфигурация
Licensing Server се конфигурира изцяло чрез environment variables. В development се зареждат от .env файл (чрез godotenv), а в production се подават като secrets/env vars в Docker container.
Зареждане
godotenv.Load()-- зарежда.envфайл ако съществува (dev only)config.Load()-- чете всички env vars с fallback стойности- RSA ключовете се четат от env var или от файл
- Production validation -- при
GIN_MODE=releaseсе проверяват задължителни настройки
Пълен списък на променливите
Database
| Променлива | Default | Задължителна | Описание |
|---|---|---|---|
DATABASE_URL | postgresql://dictaro:dictaro-dev@localhost:5433/dictaro?sslmode=disable | Да | PostgreSQL connection string. В production изисква sslmode=require. |
JWT / RSA Keys
| Променлива | Default | Задължителна | Описание |
|---|---|---|---|
JWT_PRIVATE_KEY | -- | Да* | PEM съдържание на RSA private key |
JWT_PUBLIC_KEY | -- | Да* | PEM съдържание на RSA public key |
JWT_PRIVATE_KEY_PATH | keys/private.pem | Не | Път до private key файл (fallback) |
JWT_PUBLIC_KEY_PATH | keys/public.pem | Не | Път до public key файл (fallback) |
JWT_EXPIRY_DAYS | 7 | Не | Дни до изтичане на JWT token |
*Задължителни са или env vars (JWT_PRIVATE_KEY/JWT_PUBLIC_KEY), или файловете на пътищата. Сървърът не стартира без тях.
Application
| Променлива | Default | Задължителна | Описание |
|---|---|---|---|
BASE_URL | http://localhost:8000 | Да | Публичен URL на сървъра (за redirect URLs, email links) |
CORS_ORIGINS | http://localhost:3000 | Да | Позволени CORS origins (JSON array или comma-separated) |
SESSION_SECRET | change-me-in-production | Да | Secret за session cookie encryption. В production: минимум 32 символа. |
PORT | 8000 | Не | HTTP порт за основния сървър |
METRICS_PORT | 9090 | Не | HTTP порт за Prometheus metrics |
GIN_MODE | release | Не | Gin framework mode (release или debug) |
OAuth -- Google
| Променлива | Default | Задължителна | Описание |
|---|---|---|---|
GOOGLE_CLIENT_ID | -- | За Google OAuth | Google OAuth Client ID |
GOOGLE_CLIENT_SECRET | -- | За Google OAuth | Google OAuth Client Secret |
OAuth -- Microsoft Azure
| Променлива | Default | Задължителна | Описание |
|---|---|---|---|
AZURE_CLIENT_ID | -- | За Azure OAuth | Azure App Registration Client ID |
AZURE_CLIENT_SECRET | -- | За Azure OAuth | Azure App Registration Client Secret |
AZURE_TENANT_ID | common | Не | Azure AD tenant. common = multi-tenant (personal + work accounts). |
OAuth -- GitHub
| Променлива | Default | Задължителна | Описание |
|---|---|---|---|
GITHUB_CLIENT_ID | -- | За GitHub OAuth | GitHub OAuth App Client ID |
GITHUB_CLIENT_SECRET | -- | За GitHub OAuth | GitHub OAuth App Client Secret |
Stripe Billing
| Променлива | Default | Задължителна | Описание |
|---|---|---|---|
STRIPE_SECRET_KEY | -- | Да | Stripe API secret key (sk_test_... или sk_live_...) |
STRIPE_WEBHOOK_SECRET | -- | Да (prod) | Stripe webhook signing secret (whsec_...). В production не може да е празен или whsec_placeholder. |
STRIPE_PRODUCT_ID | -- | Да | Stripe Product ID (prod_...) за Dictaro Pro subscription |
Email (Resend)
| Променлива | Default | Задължителна | Описание |
|---|---|---|---|
RESEND_API_KEY | -- | За email функции | Resend API key. Ако е празен, email-ите се принтират в stdout (dev mode). |
EMAIL_FROM | Dictaro <noreply@dictaro.ai> | Не | Адрес на изпращача за email-и |
Cloudflare Turnstile
| Променлива | Default | Задължителна | Описание |
|---|---|---|---|
TURNSTILE_SITE_KEY | -- | Да (prod) | Публичен ключ, вграден в login HTML |
TURNSTILE_SECRET_KEY | -- | Да (prod) | Секретен ключ за server-side верификация. В production е задължителен. |
Usage Quota
| Променлива | Default | Задължителна | Описание |
|---|---|---|---|
QUOTA_MINUTES | 10 | Не | Quota в минути per цикъл за free потребители |
COOLDOWN_HOURS | 5 | Не | Cooldown период в часове след изчерпване на quota |
TRIAL_DAYS | 7 | Не | Trial период в дни за нови потребители |
TYPING_RATIO | 4.0 | Не | Множител за изчисляване на спестено време от типене |
Device Account Limiting
| Променлива | Default | Задължителна | Описание |
|---|---|---|---|
DEVICE_ACCOUNTS_MAX | 2 | Не | Максимален брой отделни акаунти per устройство в cooldown прозорец |
Development
| Променлива | Default | Задължителна | Описание |
|---|---|---|---|
DEV_DEFAULT_PLAN | -- | Не | Default план за нови потребители. Задайте pro за да пропуснете Stripe в dev. |
Redirect URIs
| Променлива | Default | Задължителна | Описание |
|---|---|---|---|
ALLOWED_REDIRECT_URIS | http://localhost,http://127.0.0.1 | Да (prod) | Comma-separated списък от позволени redirect URI prefix-и |
Production Validation
При GIN_MODE=release сървърът отказва да стартира ако:
Тези проверки предотвратяват случайно деплойване с dev настройки в production.
Примерен .env файл
# Database
DATABASE_URL=postgresql://dictaro:dictaro-dev@localhost:5433/dictaro?sslmode=disable
# Application
BASE_URL=http://localhost:8000
CORS_ORIGINS=["http://localhost:3000","http://localhost:9876"]
SESSION_SECRET=change-me-in-production-min-32-chars
# JWT RSA Keys (PEM content или file paths за local dev)
JWT_PRIVATE_KEY=
JWT_PUBLIC_KEY=
JWT_PRIVATE_KEY_PATH=keys/private.pem
JWT_PUBLIC_KEY_PATH=keys/public.pem
JWT_EXPIRY_DAYS=7
# OAuth
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
AZURE_CLIENT_ID=
AZURE_CLIENT_SECRET=
AZURE_TENANT_ID=common
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
# Stripe
STRIPE_SECRET_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
STRIPE_PRODUCT_ID=prod_...
# Email (Resend)
RESEND_API_KEY=
EMAIL_FROM=Dictaro <noreply@dictaro.ai>
# Bot Protection (Cloudflare Turnstile)
TURNSTILE_SITE_KEY=
TURNSTILE_SECRET_KEY=
# Usage Quota
QUOTA_MINUTES=10
COOLDOWN_HOURS=5
TRIAL_DAYS=7
TYPING_RATIO=4.0
# Dev: auto-assign pro plan
DEV_DEFAULT_PLAN=