# 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"]
