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:
mongovebackendportları dışarıya hiç açılmaz (ports: !override []).backendkök dosya sistemi salt okunur (read_only: true), yalnızca/tmpyazılabilir (tmpfs).no-new-privileges:true(backend,frontend).- Bellek sınırları:
mongo2g,backend1g,frontend512m. - Tüm servisler
restart: always.
Tek giriş noktası her koşulda nginx (frontend servisi, host portu
FRONTEND_PORT varsayılan 8080) olur.