# Multi-stage build для единого образа frontend + backend # Stage 1: Build Frontend FROM node:20-alpine AS frontend-builder WORKDIR /app/frontend COPY play-life-web/package*.json ./ RUN npm ci # Копируем исходники (node_modules исключены через .dockerignore) COPY play-life-web/ . RUN npm run build # Stage 2: Build Backend FROM golang:1.21-alpine AS backend-builder WORKDIR /app/backend COPY play-life-backend/go.mod play-life-backend/go.sum ./ RUN go mod download COPY play-life-backend/ . RUN go mod tidy RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main . # Stage 3: Final image FROM alpine:latest # Устанавливаем необходимые пакеты RUN apk --no-cache add \ ca-certificates \ nginx \ supervisor \ curl \ tzdata # Создаем директории WORKDIR /app # Копируем собранный frontend COPY --from=frontend-builder /app/frontend/dist /usr/share/nginx/html # Копируем собранный backend COPY --from=backend-builder /app/backend/main /app/backend/main COPY play-life-backend/admin.html /app/backend/admin.html # Копируем конфигурацию nginx COPY nginx.conf /etc/nginx/nginx.conf COPY nginx-unified.conf /etc/nginx/conf.d/default.conf # Копируем конфигурацию supervisor для запуска backend COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf # Создаем директории для логов RUN mkdir -p /var/log/supervisor && \ mkdir -p /var/log/nginx && \ mkdir -p /var/run # Открываем порт 80 EXPOSE 80 # Запускаем supervisor, который запустит nginx и backend CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]