-
Notifications
You must be signed in to change notification settings - Fork 43
Expand file tree
/
Copy pathDockerfile
More file actions
55 lines (41 loc) · 1.2 KB
/
Dockerfile
File metadata and controls
55 lines (41 loc) · 1.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# Stage 1: Build the web UI
FROM --platform=$BUILDPLATFORM node:22-alpine AS ui-builder
RUN corepack enable && corepack prepare pnpm@10.18.2 --activate
WORKDIR /app/src/http/ui
COPY src/http/ui/package.json src/http/ui/pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
COPY src/http/ui/ ./
ARG VERSION=dev
ENV VITE_APP_VERSION=${VERSION}
RUN pnpm build
# Stage 2: Build the Go binary
FROM --platform=$BUILDPLATFORM golang:1.25-alpine AS go-builder
WORKDIR /app
COPY src/go.mod src/go.sum ./src/
RUN cd src && go mod download
COPY src/ ./src/
COPY --from=ui-builder /app/src/http/ui/dist ./src/http/ui/dist
COPY Makefile ./
ARG VERSION=dev
ARG TARGETARCH
ARG TARGETVARIANT
RUN COMMIT=$(echo "docker" ) && \
DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ) && \
GOARM=${TARGETVARIANT#v} \
CGO_ENABLED=0 GOOS=linux GOARCH=${TARGETARCH} go -C src build \
-trimpath \
-ldflags "-s -w -X main.Version=${VERSION} -X main.Commit=${COMMIT} -X main.Date=${DATE}" \
-o /b4
# Stage 3: Runtime image
FROM alpine:3.23.3
RUN apk add --no-cache \
iptables \
ip6tables \
nftables \
kmod \
iproute2 \
tzdata
COPY --from=go-builder /b4 /usr/local/bin/b4
VOLUME /etc/b4
EXPOSE 7000
ENTRYPOINT ["b4"]