57 lines
2.3 KiB
Docker
57 lines
2.3 KiB
Docker
# 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
|
|
|
|
# Создаем директории
|
|
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"] |