# --- Build Stage --- FROM node:20-alpine AS builder WORKDIR /app # Raspberry Pi ve Prisma uyumluluğu için gerekli kütüphaneler RUN apk add --no-cache openssl libc6-compat # pnpm kurulumu (workspace kuralı gereği) RUN corepack enable && corepack prepare pnpm@latest --activate # Paket dosyalarını kopyala COPY package.json pnpm-lock.yaml ./ RUN pnpm install --frozen-lockfile # Kaynak kodları kopyala COPY . . # Prisma client üret (Database şeması için şart) RUN npx prisma generate # Build al (NestJS/Backend için) RUN pnpm build # --- Production Stage (Canlı Sistem) --- FROM node:20-alpine AS production # Prisma için gerekli kütüphaneleri buraya da ekliyoruz RUN apk add --no-cache openssl libc6-compat # pnpm kurulumu RUN corepack enable && corepack prepare pnpm@latest --activate WORKDIR /app COPY package.json pnpm-lock.yaml ./ # Sadece production (canlıda lazım olan) paketleri kur RUN pnpm install --frozen-lockfile --prod # Prisma şemasını taşı ve client üret COPY prisma ./prisma RUN npx prisma generate # Build edilen dosyaları taşı # Güvenlik için dosyaları 'node' kullanıcısına zimmetliyoruz COPY --chown=node:node --from=builder /app/dist ./dist # Eğer i18n varsa onu da taşı COPY --chown=node:node --from=builder /app/src/i18n ./dist/i18n # Ortam değişkeni ENV NODE_ENV=production # Portu aç EXPOSE 3000 # Güvenlik: Root yerine 'node' kullanıcısına geç USER node # Uygulamayı başlat CMD ["node", "dist/main.js"]