Alışveriş Sepeti

Sepetiniz boş

Güvenlik & Altyapı · 15 dk

Docker ile Stilmerce Kurulumu & DevOps Süreçleri: Geliştirmeden Üretime Sıfır Sürpriz

1.4 GB'lık şişman imajları 138 MB'a indiren multi-stage Dockerfile, PostgreSQL/Redis sağlık kontrolleri (Healthcheck) ve GitHub Actions ile sıfır kesintili dağıtım (Zero-Downtime CD).

Yazar: Stilgen DevOps & SRE Team

Docker ile Stilmerce Kurulumu & DevOps Süreçleri: Geliştirmeden Üretime Sıfır Sürpriz

1. 'Benim Bilgisayarımda Çalışıyordu' Mazaretine Son

Büyüyen yazılım ekiplerinde yeni bir geliştiricinin işe başladığında yerel ortamı kurması (PostgreSQL sürümü, Redis portu, Node.js versiyon uyuşmazlığı) genellikle 2-3 gün kaybettirir. Daha da kötüsü; geliştiricinin bilgisayarında çalışan bir kütüphane prodüksiyondaki Linux sunucusunda derlenemeyerek sistemi çökertebilir.

Stilmerce'in DevOps felsefesi Konteyner İzolasyonu (Containerization) üzerine kuruludur. Tek bir komutla tüm ekosistem (API, Storefront, PostgreSQL 16, Redis 7 ve Kuyruk İşleyicileri) 60 saniyede ayağa kalkar:

# Tek bir komutla tüm yerel geliştirme kümesini ayağa kaldır
docker compose -f docker-compose.dev.yml up -d

2. Üretim Düzeyinde Güvenli Multi-Stage Dockerfile

Aşağıdaki Dockerfile yapısı, kaynak kod derleyicilerini nihai imaja dahil etmeyerek imaj boyutunu %90 oranında küçültür ve CVE güvenlik açıklarını minimize eder:

# -------------------------------------------------------------
# 1. Aşama: Bağımlılık Havuzu
# -------------------------------------------------------------
FROM node:20-alpine AS dependencies
WORKDIR /app
COPY package.json package-lock.json ./
# Yalnızca üretim bağımlılıklarını ayrı bir klasöre kopyala
RUN npm ci --only=production && cp -R node_modules prod_node_modules
RUN npm ci

# -------------------------------------------------------------
# 2. Aşama: TypeScript Derleme
# -------------------------------------------------------------
FROM node:20-alpine AS builder
WORKDIR /app
COPY --from=dependencies /app/node_modules ./node_modules
COPY . .
RUN npm run build

# -------------------------------------------------------------
# 3. Aşama: Hafif ve Güvenli Çalışma Zamanı (Runner)
# -------------------------------------------------------------
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production

# Güvenlik Kuralı: Konteyneri asla 'root' ile çalıştırma!
RUN addgroup -g 1001 -S nodejs && adduser -S stilmerce -u 1001
USER stilmerce

COPY --from=dependencies /app/prod_node_modules ./node_modules
COPY --from=builder /app/dist ./dist
COPY package.json ./

EXPOSE 5200
CMD ["node", "dist/main.js"]

Devasa Optimizasyon

Ham Node.js imajı 1.45 GB iken bu multi-stage yapı ile nihai imaj 138 MB boyutuna inmiştir. Kubernetes pod'ları yeni versiyonu saniyeler içinde çeker ve başlatır.

3. Docker Compose Sağlık Kontrolleri (Healthchecks)

Birçok sistemde API konteyneri veritabanından daha hızlı başlar ve veritabanı henüz hazır olmadan bağlantı kurmaya çalışıp çöker (CrashLoopBackOff). Stilmerce, Docker healthcheck kurallarıyla katı bir başlatma sırası uygular:

# docker-compose.yml kesiti
services:
  postgres:
    image: postgres:16-alpine
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U stilgen_hub"]
      interval: 5s
      timeout: 5s
      retries: 5

  api:
    build: .
    depends_on:
      postgres:
        condition: service_healthy # Yalnızca PostgreSQL hazır olduğunda başlat!
      redis:
        condition: service_healthy