Ana içeriğe geç

Environment Değişkenleri

Veritabanı

DeğişkenVarsayılanAçıklama
POSTGRES_PASSWORDPostgreSQL şifresi
DATABASE_URLpostgresql+asyncpg://...
TIMESCALE_RETENTION_DAYS730Veri saklama süresi (gün)
TIMESCALE_COMPRESS_AFTER_DAYS90Sıkıştırma başlangıcı

Güvenlik

DeğişkenVarsayılanAçıklama
SECRET_KEYJWT imzalama (min 32 karakter)
ACCESS_TOKEN_EXPIRE_MINUTES30Access token süresi
REFRESH_TOKEN_EXPIRE_DAYS7Refresh token süresi

MQTT

DeğişkenVarsayılanAçıklama
MQTT_BROKER_HOSTemqxBroker adresi
MQTT_BROKER_PORT1883Broker portu
MQTT_BROKER_USERNAMEbackendBackend MQTT kullanıcısı
MQTT_BROKER_PASSWORDBackend MQTT şifresi
MQTT_EXTERNAL_HOSTESP32'ye iletilecek broker adresi
MQTT_EXTERNAL_PORT8883ESP32 TLS portu
MQTT_EXTERNAL_TLStrueESP32 TLS aktif
MQTT_GATEWAY_USERNAMEgatewayGateway MQTT kullanıcısı
MQTT_GATEWAY_PASSWORDGateway MQTT şifresi

Redis & Celery

DeğişkenVarsayılanAçıklama
REDIS_URLredis://redis:6379/0Redis bağlantısı
CORS_ORIGINSİzin verilen origin'ler (virgülle ayrılmış)

Firmware & OTA

DeğişkenVarsayılanAçıklama
FIRMWARE_STORAGE_PATH/app/storage/firmwareFirmware dosya yolu
FIRMWARE_SIGNING_KEY_PATHECDSA P-256 private key
FIRMWARE_SIGNING_REQUIREDtrueİmza zorunluluğu

Frontend

DeğişkenVarsayılanAçıklama
BACKEND_URLhttp://backend:8000Docker internal URL
NEXT_PUBLIC_WS_URLWebSocket URL (build-time)
NEXT_PUBLIC_GOOGLE_MAPS_API_KEYGoogle Maps API key

Feature Flags

DeğişkenVarsayılanAçıklama
ENABLE_WEBSOCKETtrueWebSocket desteği
ENABLE_LOTOtrueLOTO modülü
ENABLE_SLDtrueSLD modülü
ENABLE_PAYMENTSfalseÖdeme modülü

PostgreSQL OOM Tuning (4GB Host)

Hetzner CAX serisi 4GB RAM ARM64 host'ta TimescaleDB OOM-kill'leri yaşandı. Aşağıdaki tuning ile bellek kullanımı sabit ~1.5GB aralığına çekildi.

docker-compose.yml — Postgres Servisi

postgres:
image: timescale/timescaledb:2.16.1-pg15
shm_size: 256m # parallel sort/hash join shared memory
command:
- "postgres"
- "-c"
- "max_connections=60"
- "-c"
- "work_mem=8MB"
- "-c"
- "effective_cache_size=512MB"
- "-c"
- "maintenance_work_mem=64MB"
- "-c"
- "shared_buffers=256MB"

Parametre Açıklamaları

ParametreDeğerÖncekiAçıklama
shm_size256m64m (default)TimescaleDB chunk işlemlerinde parallel worker shared memory ihtiyacı
max_connections60100Connection-bazlı RAM tüketimi: ~10-15MB/conn × 100 = riskli
work_mem8MB4MBSort/join operasyonu başına bellek; düşük → temp file artar
effective_cache_size512MB4GB (default)Planner'a OS page cache tahmini; 4GB host'ta 512MB gerçekçi
maintenance_work_mem64MB64MBVACUUM, CREATE INDEX, ALTER TABLE için

Connection Budget Hesabı (Worst-Case)

max_connections=60 ile worst-case kullanım:

ServisConn
backend (gunicorn 2 worker × 8 pool)16
celery-worker (8 prefork worker)8
celery-beat (1 conn)1
celery scheduled tasks havuzu7
modbus-poller10
Süper kullanıcı / migration / debug3
Buffer (saturate önleme)10
Toplam55/60

5 connection saf güvenlik buffer'ı olarak ayrılmıştır.

Backend Pool Recycle (Faz 3)

DATABASE_POOL_RECYCLE=3600

SQLAlchemy connection'ları 1 saat sonra otomatik kapatır ve yeniden açar. Faydaları:

  • Dead connection tespiti (network NAT timeout, postgres idle_in_transaction reset)
  • Postgres restart sonrası backend'in stale connection tutmasını engeller
  • Long-lived process (gunicorn worker) memory bloat'ı azaltır

pool_pre_ping=True ile birlikte kullanılır; her checkout öncesi SELECT 1 ile connection canlılığı doğrulanır.