55 lines
1.9 KiB
Docker
55 lines
1.9 KiB
Docker
# 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"]
|