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