# Multi-stage build для production FROM node:18-alpine AS builder WORKDIR /app # Копируем package.json и patches COPY package*.json ./ COPY patches ./patches/ # Устанавливаем зависимости RUN npm ci # Гарантированно применяем патчи RUN npx patch-package # Копируем исходный код COPY . . # Собираем приложение (NEXT_PUBLIC_* переменные нужны на этапе сборки) ARG NEXT_PUBLIC_BASE_PATH= ENV NEXT_PUBLIC_BASE_PATH=$NEXT_PUBLIC_BASE_PATH ENV NODE_ENV=production RUN npm run build # Production stage FROM node:18-alpine AS production WORKDIR /app ENV NODE_ENV=production # Копируем собранное приложение (standalone mode) COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static # Создаём пустую директорию public (если её нет в проекте, Next.js может её использовать) RUN mkdir -p ./public # Создаем непривилегированного пользователя RUN addgroup --system --gid 1001 nodejs && \ adduser --system --uid 1001 nextjs && \ chown -R nextjs:nodejs /app USER nextjs EXPOSE 3001 ENV PORT=3001 ENV HOSTNAME="0.0.0.0" CMD ["node", "server.js"]