41 lines
1.3 KiB
Docker
41 lines
1.3 KiB
Docker
# 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.24-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"]
|