# Multi-stage build для фронтенда # Stage 1: Сборка приложения FROM node:18-alpine AS builder WORKDIR /app # Копируем файлы зависимостей COPY package*.json ./ # Устанавливаем зависимости RUN npm ci && npm cache clean --force # Копируем исходный код COPY . . # Переменные окружения для сборки # VITE_API_URL используется в runtime через import.meta.env ARG VITE_API_URL ENV VITE_API_URL=${VITE_API_URL} # Собираем приложение RUN npm run build # Stage 2: Production образ с nginx FROM nginx:alpine # Устанавливаем wget и gettext (для envsubst) RUN apk add --no-cache wget gettext # Копируем собранные файлы из builder stage COPY --from=builder /app/dist /usr/share/nginx/html # Копируем шаблон конфигурации nginx COPY nginx.conf.template /etc/nginx/templates/default.conf.template # Переменные окружения для nginx конфигурации (значения по умолчанию) # Если бэкенд использует HTTPS, используйте https://backend:443 ENV BACKEND_URL=https://backend:443 # BACKEND_SSL_VERIFY: "on" = проверка включена, "off" = проверка отключена (по умолчанию отключена для самоподписанных сертификатов) ENV BACKEND_SSL_VERIFY=off # Открываем порт 80 EXPOSE 80 # Healthcheck HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost/ || exit 1 # Запускаем nginx CMD ["nginx", "-g", "daemon off;"]