1FROM node:20-alpine AS frontend-builder
2
3WORKDIR /app/web
4COPY web/package*.json ./
5RUN npm ci
6COPY web/ ./
7RUN npm run build
8
9FROM golang:1.24-alpine AS backend-builder
10
11RUN apk add --no-cache gcc musl-dev
12
13WORKDIR /app
14COPY backend/go.mod backend/go.sum ./
15RUN go mod download
16
17COPY backend/ ./
18RUN CGO_ENABLED=1 GOOS=linux go build -a -ldflags '-linkmode external -extldflags "-static"' -o margin-server ./cmd/server
19
20FROM alpine:3.19
21
22RUN apk add --no-cache ca-certificates tzdata
23
24WORKDIR /app
25
26COPY --from=backend-builder /app/margin-server .
27COPY --from=frontend-builder /app/web/dist ./dist
28
29ENV PORT=8080
30ENV DATABASE_URL=margin.db
31
32EXPOSE 8080
33
34CMD ["./margin-server"]