FROM node:20-alpine AS frontend-builder WORKDIR /app/frontend RUN corepack enable && corepack prepare pnpm@latest --activate COPY frontend/package.json frontend/pnpm-lock.yaml ./ RUN pnpm install --frozen-lockfile COPY frontend/ ./ RUN pnpm vite build FROM golang:1.21-alpine AS backend-builder WORKDIR /app RUN apk add --no-cache git COPY backend/go.mod backend/go.sum ./ RUN go mod download COPY backend/ ./ RUN mkdir -p embedded/dist COPY --from=frontend-builder /app/frontend/dist ./embedded/dist/ RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main ./cmd/main.go FROM alpine:latest RUN apk --no-cache add ca-certificates tzdata RUN addgroup -g 1001 -S appgroup && \ adduser -u 1001 -S appuser -G appgroup WORKDIR /app COPY --from=backend-builder /app/main . COPY --from=backend-builder /app/config.yaml . RUN mkdir -p /app/uploads && \ chown -R appuser:appgroup /app USER appuser EXPOSE 8080 VOLUME ["/app/uploads"] CMD ["./main"]