# --- Frontend build stage --- FROM node:22-alpine AS web WORKDIR /build/web COPY web/package.json web/package-lock.json ./ RUN npm ci COPY web/ . RUN npm run build # --- Go build stage --- FROM golang:1.27-alpine AS api WORKDIR /build COPY server/go.mod server/go.sum ./ RUN go mod download COPY server/ . RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /out/api ./cmd/api # --- Runtime stage --- FROM alpine:3.20 AS runtime RUN adduser -D -u 10001 app \ && mkdir -p /data/media /app/web \ && chown -R app:app /data /app WORKDIR /app COPY --from=api --chown=app:app /out/api /app/api COPY --from=web --chown=app:app /build/web/dist /app/web USER app ENV MESSENGER_STATIC_DIR=/app/web \ MESSENGER_MEDIA_DIR=/data/media EXPOSE 8080 ENTRYPOINT ["/app/api"]