Üç servis de geliştirmede depo kökündeki .env'i okur; Compose altında değerler environment: bloklarından gelir. Doğrulama açılışta zod ile bir kez çalışır — bozuk bir değer süreci değişkenin adıyla hemen düşürür.
Sırlar
| Değişken | Kullanan | Zorunlu | Notlar |
|---|
ENCRYPTION_KEY | api (admin), worker | evet | 64 hex karakter (32 bayt). Saklanan her kimlik bilgisinin AES-256-GCM anahtarı. Public API onsuz çalışır; admin yüzeyi ve worker çalışmaz. |
HMAC_SECRET | api, worker | evet | ≥ 16 karakter. İzleme kimliklerini imzalar. Değiştirmek yoldaki push'ların izlemesini geçersizleştirir. |
ADMIN_API_TOKEN | api, panel | yalnızca panel | ≥ 24 karakter. Yoksa /v1/admin 404 döner. |
SESSION_SECRET | panel | evet | Oturum çerezini imzalar. |
ADMIN_PASSWORD_HASH | panel | evet | bun run generate:admin-password'dan argon2id hash, yazdırıldığı gibi base64 kodlu. Yalnızca üye yokken kullanılır. |
Veri depoları
| Değişken | Varsayılan | Notlar |
|---|
MONGO_URL | mongodb://localhost:27017 | Compose mongodb://mongo:27017 yapar. |
MONGO_DB_NAME | opennotification | |
REDIS_URL | redis://localhost:6379 | API açılışında ulaşılabilir olmalı, yoksa API 1 ile çıkar. |
MONGO_CACHE_GB | 1 | WiredTiger önbelleği; ayırabildiğiniz RAM'in yaklaşık yarısı. Yalnızca Compose. |
REDIS_MAXMEMORY | 512mb | Yalnızca Compose; politika her zaman noeviction. |
API
| Değişken | Varsayılan | Notlar |
|---|
API_PORT | 3000 | |
API_PUBLIC_URL | http://localhost:3000 | SDK'ların çağırdığı URL. Bilgilendirme amaçlı (kurulum ipuçları), yönlendirme değil. |
CORS_ORIGINS | (yok) | /v1/subscriptions ve /v1/e için izinli tarayıcı origin'leri, virgülle. |
SUBSCRIBE_RATE_LIMIT | 10 | subscribe/rotate için istemci IP başına, dakikada — public anahtar sır değildir. |
SEND_RATE_LIMIT | 100 | /v1/notifications için API anahtarı başına, dakikada. |
EVENT_RATE_LIMIT | 600 | İzleme pingleri için istemci IP başına, dakikada. |
EVENT_RETENTION_DAYS | 180 | events time-series koleksiyonunun TTL'i. Koleksiyon oluşturulurken uygulanır. |
API_KEY_CACHE_TTL | 60000 ms | Doğrulanmış anahtarın bcrypt'i ne kadar süre atladığı. |
Rate limit'ler süreç başınadır. N API kopyasıyla gerçek tavan N × limit'tir; korunan şey için (kaçak SDK döngüsü, subscribe'a saldıran scraper) bu yeterlidir.
Worker
| Değişken | Varsayılan | Notlar |
|---|
APNS_CONCURRENCY | 200 | push-ios kuyruğunda uçuştaki iş. Tek HTTP/2 bağlantısı çoğullar. |
FCM_CONCURRENCY | 100 | push-android. |
WEBPUSH_CONCURRENCY | 100 | push-web. |
FANOUT_CONCURRENCY | 4 | Aynı anda fan-out edilen kampanya. |
WEBHOOK_CONCURRENCY | 10 | Uçuştaki webhook batch'i. |
PUSH_RATE_LIMIT_MAX / PUSH_RATE_LIMIT_DURATION_MS | 5000 / 1000 | Push kuyruğu başına BullMQ limiter. |
PUSH_MAX_ATTEMPTS | 3 | Yalnızca geçici hatalar için (429, 503, UNAVAILABLE, INTERNAL). Kalıcı hatalar asla tekrar denenmez. |
PUSH_BACKOFF_MS | 2000 | Üstel backoff tabanı. |
INACTIVE_SUBSCRIPTION_DAYS | 90 | Bakım taraması bu kadar süre dokunulmamış abonelikleri çıkmış yapar. |
SHUTDOWN_TIMEOUT_MS | 30000 | SIGTERM'in süren işleri ne kadar beklediği. Compose'un stop_grace_period'unu bunun üstünde tutun. |
Panel
| Değişken | Varsayılan | Notlar |
|---|
API_URL | — | Panel sunucusunun API'ye ulaştığı adres. Tarayıcıya hiç inmez. Compose altında http://api:3000'e sabittir. |
DASHBOARD_PORT | 3001 | Panel konteynerinin loopback host portu. |
INSECURE_COOKIES | false | true düz http localhost çalışması için Secure bayrağını kaldırır. |
Dokploy / Traefik dosyası
| Değişken | Varsayılan | Notlar |
|---|
API_DOMAIN | — | docker-compose.dokploy.yml için zorunlu. |
DASHBOARD_DOMAIN | — | docker-compose.dokploy.yml için zorunlu. |
DOCS_DOMAIN | — | docker-compose.dokploy.yml için zorunlu. |
TRAEFIK_NETWORK | dokploy-network | Harici Traefik ağı. |
TRAEFIK_CERT_RESOLVER | letsencrypt | |
API_IMAGE / WORKER_IMAGE / DASHBOARD_IMAGE | ghcr.io/aproder/opennotification-*:latest | Derlemek yerine çek. |
LOG_LEVEL | info | |
Yedekler (--profile backup)
| Değişken | Varsayılan | Notlar |
|---|
BACKUP_INTERVAL_HOURS | 24 | İki mongodump çalışması arasındaki süre. |
BACKUP_KEEP_DAYS | 14 | Bundan eski arşivler her başarılı çalışmadan sonra silinir. |
BACKUP_DIR | mongo_backups volume'u | Bir host yolu verilirse dökümler oraya yazılır. |
VAPID (bilgi amaçlı)
.env'deki VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY, VAPID_SUBJECT kolaylık için generate:keys tarafından üretilir. Uygulama başınadır, bir uygulamaya web push yapılandırırken veritabanına yazılır ve servisler tarafından ortamdan okunmaz.