# syntax=docker/dockerfile:1 # ── Build stages run on the build host (amd64); Go cross-compiles for TARGETARCH. FROM --platform=$BUILDPLATFORM node:22-alpine AS ui WORKDIR /src/dashboard COPY backend/dashboard/package*.json ./ RUN npm ci COPY backend/dashboard/ ./ RUN npm run build FROM --platform=$BUILDPLATFORM golang:1.27-alpine AS go-build ARG TARGETARCH ENV GOTOOLCHAIN=auto CGO_ENABLED=0 GOARCH=$TARGETARCH WORKDIR /src COPY backend/go.mod backend/go.sum ./ RUN go mod download COPY backend/ . COPY --from=ui /src/dashboard/../internal/web/dist ./internal/web/dist RUN go build -trimpath -ldflags="-s -w" -o /lmr ./cmd/server # ── Runtime stage (Postgres bundled) ───────────────────────────────────────── FROM alpine:3.21 RUN apk add --no-cache postgresql16 postgresql16-client su-exec bash COPY --from=go-build /lmr /usr/local/bin/lmr COPY deploy/entrypoint-bundled.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENV PGDATA=/var/lib/postgresql/data ENV PGUSER=lmr ENV PGPASSWORD=lmr ENV PGDATABASE=lmr # The gateway reads GATEWAY_DB_URL; set a default that points to the local PG. ENV GATEWAY_DB_URL="postgres://lmr:lmr@localhost:5432/lmr?sslmode=disable" VOLUME ["/var/lib/postgresql/data"] EXPOSE 8080 ENTRYPOINT ["/entrypoint.sh"]