# Этап 1: Установка зависимостей FROM node:20-alpine AS deps WORKDIR /app # Копируем package.json и package-lock.json COPY package.json package-lock.json* ./ # Устанавливаем зависимости RUN npm ci --only=production # Этап 2: Сборка приложения FROM node:20-alpine AS builder WORKDIR /app # Копируем зависимости из предыдущего этапа COPY --from=deps /app/node_modules ./node_modules COPY . . # Переменные окружения для сборки (если нужны) ENV NEXT_TELEMETRY_DISABLED=1 # Сборка Next.js RUN npm run build # Этап 3: Production runtime FROM node:20-alpine AS runner WORKDIR /app # Переменные окружения ENV NODE_ENV=production \ NEXT_TELEMETRY_DISABLED=1 \ PORT=3000 \ HOSTNAME="0.0.0.0" # Создаём группу и пользователя для безопасности RUN addgroup --system --gid 1001 nodejs \ && adduser --system --uid 1001 nextjs # Копируем собранные файлы из builder # Standalone output содержит только необходимое для запуска COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static COPY --from=builder /app/public ./public # Устанавливаем владельца файлов RUN chown -R nextjs:nodejs /app # Переключаемся на непривилегированного пользователя USER nextjs # Открываем порт EXPOSE 3000 # Команда запуска CMD ["node", "server.js"]