Ana içeriğe geç

Docker Mimarisi

Bu sayfa docker-compose.yml ve docker-compose.prod.yml dosyalarından çıkarılmıştır; tahmini bilgi içermez.

Servisler (docker-compose.yml)

Servis Container adı Image / build Portlar (host) Volumes Ağ Restart
mongo ${COMPOSE_PROJECT_NAME:-iqvflex}-mongo mongo:7 127.0.0.1:${MONGO_PORT:-27017}:27017 mongo_data:/data/db, mongo_config:/data/configdb iqv_network unless-stopped
backend ${COMPOSE_PROJECT_NAME:-iqvflex}-backend build: ./iqvflex/backend (Dockerfile) 127.0.0.1:${BACKEND_PORT:-3001}:3001 — iqv_network unless-stopped
frontend ${COMPOSE_PROJECT_NAME:-iqvflex}-frontend build: ./dashboard (Dockerfile) ${FRONTEND_PORT:-8080}:80 — iqv_network unless-stopped

mongo servisi yalnızca managed-mongo profiliyle çalışır (profiles: ['managed-mongo']); harici bir MongoDB kullanılacaksa .env içindeki COMPOSE_PROFILES boşaltılır ve servis hiç başlamaz (required: false sayesinde compose yine geçerli kalır).

Env kullanımı

Backend servisine geçirilen değişkenler (özet): NODE_ENV, PORT, CORS_ORIGIN, MONGODB_URI (verilmezse compose'un yönettiği MongoDB'ye bağlanır), MONGODB_DATABASE, MONGODB_ERP_MAPPING_COLLECTION, MONGODB_ERP_USERS_COLLECTION, MONGODB_AUTH_SOURCE, MONGODB_APP_NAME, ERP_AUTH_SECRET (zorunlu), ERP_AUTH_TOKEN_TTL_SECONDS, GO_API_BASE_URL (zorunlu), GO_API_TIMEOUT_MS, GO_API_CLIENT_ID, GO_API_CLIENT_SECRET, GO_API_TOKEN_PATH.

Frontend imajı VITE_API_BASE_URL build-arg'ını alır; Docker dağıtımında boş bırakılır (SPA, backend'e nginx vekili üzerinden aynı köken ile ulaşır).

Healthcheck

Servis Kontrol Aralık / start_period / retries
mongo mongosh --quiet --eval "db.adminCommand('ping').ok" 15s / 40s / 5
backend Node'un kendi fetch çağrısıyla http://127.0.0.1:3001/health → data.status === 'ok' 15s / 40s / 5
frontend wget ile http://127.0.0.1/__nginx_health 15s / 10s / 5

frontend servisi backend'in service_healthy durumuna, backend ise (profil açıksa) mongo'nun service_healthy durumuna bağımlıdır (depends_on: condition: service_healthy).

Ağ ve günlükleme

Tüm servisler tek bir bridge ağında (iqv_network) çalışır. Tüm servisler ortak json-file log sürücüsünü kullanır (max-size: 10m, max-file: 5) — disk dolmasını engellemek için.

Sıkılaştırılmış üretim override'ı (docker-compose.prod.yml)

docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

(install.sh --profile prod / install.ps1 -Profile prod bunu otomatik uygular.) Farklar:

  • mongo ve backend portları dışarıya hiç açılmaz (ports: !override []).
  • backend kök dosya sistemi salt okunur (read_only: true), yalnızca /tmp yazılabilir (tmpfs).
  • no-new-privileges:true (backend, frontend).
  • Bellek sınırları: mongo 2g, backend 1g, frontend 512m.
  • Tüm servisler restart: always.

Tek giriş noktası her koşulda nginx (frontend servisi, host portu FRONTEND_PORT varsayılan 8080) olur.