# ================================ # Stage 1: сборка Vue # ================================ FROM node:20-alpine AS frontend WORKDIR /app COPY frontend/package*.json ./ RUN npm ci COPY frontend/ ./ RUN npm run build # ================================ # Stage 2: сборка Go # ================================ FROM golang:1.25-alpine AS backend WORKDIR /app # зависимости отдельно — используем кэш слоёв COPY backend/go.mod backend/go.sum ./ RUN go mod download # исходники COPY backend/ ./ # встраиваем собранную статику Vue COPY --from=frontend /app/dist ./src/api/dist # сборка бинарника RUN CGO_ENABLED=0 GOOS=linux go build -o server ./src/ # ================================ # Stage 3: финальный образ # ================================ FROM alpine:3.19 # нужен для корректной работы TLS и временных зон RUN apk add --no-cache ca-certificates tzdata WORKDIR /app COPY --from=backend /app/server ./server EXPOSE 8080 ENTRYPOINT ["./server"]