# ================================ # 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.26-bookworm 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 # Миграции кладём туда, откуда Go их ищет COPY backend/migrations ./migrations # сборка бинарника RUN CGO_ENABLED=0 GOOS=linux go build -o server ./src/ # ================================ # Stage 3: финальный образ # ================================ FROM scratch COPY --from=backend /app/server /server COPY --from=backend /app/migrations /migrations COPY --from=backend /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ COPY --from=backend /usr/share/zoneinfo /usr/share/zoneinfo ENTRYPOINT ["/server"]