51 lines
1.7 KiB
Docker
51 lines
1.7 KiB
Docker
# 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;"]
|