feat(docker): restructure Dockerfile for multi-stage builds and frontend setup

gosunuts committed Feb 24, 2026 at 10:03 UTC fdf31145841a75894ad3f0cdd9707cfa0b664dce
1 file changed +19 -6
Dockerfile
+19 -6
@@ -1,18 +1,31 @@
1 # syntax=docker/dockerfile:1
2
3 -FROM --platform=$BUILDPLATFORM golang:1 AS builder
3 +# Stage 1: Build frontend (Node.js)
4 +FROM --platform=$BUILDPLATFORM node:22-slim AS frontend-builder
5 WORKDIR /src
6
7 RUN apt-get update && apt-get install -y --no-install-recommends \
7 - nodejs npm brotli make binaryen && rm -rf /var/lib/apt/lists/*
8 + make && rm -rf /var/lib/apt/lists/*
9 +
10 +COPY cmd/relay-server/frontend ./cmd/relay-server/frontend
11 +COPY cmd/webclient ./cmd/webclient
12 +COPY Makefile ./
13 +
14 +RUN --mount=type=cache,target=/root/.npm \
15 + make build-frontend
16 +
17 +# Stage 2: Build Go artifacts
18 +FROM --platform=$BUILDPLATFORM golang:1 AS go-builder
19 +WORKDIR /src
20 +
21 +RUN apt-get update && apt-get install -y --no-install-recommends \
22 + brotli make binaryen && rm -rf /var/lib/apt/lists/*
23
24 COPY go.mod go.sum ./
25 RUN --mount=type=cache,target=/go/pkg/mod go mod download
26
27 COPY . .
13 -
14 -RUN --mount=type=cache,target=/root/.npm \
15 - make build-frontend
28 +COPY --from=frontend-builder /src/cmd/relay-server/dist/app ./cmd/relay-server/dist/app
29
30 ARG TARGETOS
31 ARG TARGETARCH
@@ -23,7 +36,7 @@ RUN --mount=type=cache,target=/go/pkg/mod \
36
37 FROM gcr.io/distroless/static-debian12:nonroot
38
26 -COPY --from=builder /src/bin/relay-server /usr/bin/relay-server
39 +COPY --from=go-builder /src/bin/relay-server /usr/bin/relay-server
40
41 ENV PORTAL_URL=http://localhost:4017
42 ENV PORTAL_APP_URL=http://*.localhost:4017