
🔧 Исправления: - Обновлена версия Node.js с 18 до 20 (поддержка NestJS 11+) - Исправлена установка зависимостей в builder stage (нужны dev зависимости для сборки) - Оптимизирована финальная стадия (только production зависимости) - Восстановлен файл stack.env.example - Использован --omit=dev вместо устаревшего --only=production ✅ Теперь Docker сборка должна работать корректно
49 lines
1.5 KiB
Docker
49 lines
1.5 KiB
Docker
# Многоступенчатая сборка для оптимизации размера образа
|
||
FROM node:20-alpine AS builder
|
||
|
||
# Устанавливаем рабочую директорию
|
||
WORKDIR /app
|
||
|
||
# Копируем файлы зависимостей
|
||
COPY package*.json ./
|
||
|
||
# Устанавливаем ВСЕ зависимости (включая dev для сборки)
|
||
RUN npm ci && npm cache clean --force
|
||
|
||
# Копируем исходный код
|
||
COPY . .
|
||
|
||
# Собираем приложение
|
||
RUN npm run build
|
||
|
||
# Финальный образ
|
||
FROM node:20-alpine AS production
|
||
|
||
# Создаем пользователя для безопасности
|
||
RUN addgroup -g 1001 -S nodejs
|
||
RUN adduser -S nestjs -u 1001
|
||
|
||
# Устанавливаем рабочую директорию
|
||
WORKDIR /app
|
||
|
||
# Копируем package files
|
||
COPY package*.json ./
|
||
|
||
# Устанавливаем только production зависимости
|
||
RUN npm ci --omit=dev && npm cache clean --force
|
||
|
||
# Копируем собранное приложение из builder
|
||
COPY --from=builder --chown=nestjs:nodejs /app/dist ./dist
|
||
|
||
# Устанавливаем пользователя
|
||
USER nestjs
|
||
|
||
# Открываем порт
|
||
EXPOSE 3000
|
||
|
||
# Проверка здоровья
|
||
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
||
CMD node -e "require('http').get('http://localhost:3000/health', (res) => { process.exit(res.statusCode === 200 ? 0 : 1) })"
|
||
|
||
# Запускаем приложение
|
||
CMD ["npm", "run", "start:prod"] |