# Multi-stage build для бэкенда # Stage 1: Сборка зависимостей FROM node:18-alpine AS dependencies WORKDIR /app # Копируем файлы зависимостей COPY package*.json ./ # Устанавливаем зависимости RUN npm ci --only=production && npm cache clean --force # Stage 2: Production образ FROM node:18-alpine # Устанавливаем wget для healthcheck RUN apk add --no-cache wget WORKDIR /app # Создаем пользователя для запуска приложения (безопасность) RUN addgroup -g 1001 -S nodejs && \ adduser -S nodejs -u 1001 # Копируем зависимости из stage dependencies COPY --from=dependencies --chown=nodejs:nodejs /app/node_modules ./node_modules # Копируем исходный код COPY --chown=nodejs:nodejs . . # Создаем директории для логов и сертификатов RUN mkdir -p logs tsl && \ chown -R nodejs:nodejs logs tsl # Переключаемся на пользователя nodejs USER nodejs # Открываем порты (HTTP и HTTPS) # Порты можно настроить через переменные окружения WEB_HTTP_PORT и WEB_HTTPS_PORT EXPOSE 80 443 # Переменные окружения по умолчанию # Все переменные можно переопределить через docker-compose или docker run ENV NODE_ENV=production \ LOG_LEVEL=info \ STDOUT_LOG_LEVEL=info # Healthcheck для проверки работоспособности # Используем wget или curl (должны быть установлены в alpine) HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:80/health || exit 1 # Запускаем приложение CMD ["node", "app.js"]