All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 44s
63 lines
2.0 KiB
Docker
63 lines
2.0 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
|
||
|
||
# Устанавливаем необходимые пакеты
|
||
# tzdata — данные о часовых поясах для корректной работы планировщика
|
||
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
|
||
# Копируем файл версии
|
||
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"]
|
||
|