# 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.24-alpine AS backend-builder
WORKDIR /app/backend
# Устанавливаем GOPROXY для более надежной загрузки модулей
ENV GOPROXY=https://proxy.golang.org,direct
ENV GOSUMDB=sum.golang.org
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

# Устанавливаем необходимые пакеты
# tzdata — данные о часовых поясах для корректной работы планировщика
RUN apk --no-cache add \
    ca-certificates \
    nginx \
    supervisor \
    curl \
    tzdata

# Создаем директории
WORKDIR /app

# Создаем директорию для загруженных файлов
RUN mkdir -p /app/uploads/wishlist && \
    chmod 755 /app/uploads

# Копируем собранный 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
# Копируем миграции для применения при запуске
COPY play-life-backend/migrations /migrations
# Копируем файл версии
COPY VERSION /app/VERSION

# Копируем конфигурацию 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"]

