FROM oven/bun:1 AS frontend-builder WORKDIR /app/web COPY web/package.json web/bun.lock ./ RUN bun install COPY web/ ./ RUN bun run build FROM golang:1.24-alpine AS backend-builder RUN apk add --no-cache gcc musl-dev WORKDIR /app COPY backend/go.mod backend/go.sum ./ RUN go mod download COPY backend/ ./ RUN CGO_ENABLED=1 GOOS=linux go build -a -ldflags '-linkmode external -extldflags "-static"' -o margin-server ./cmd/server FROM node:20-alpine RUN apk add --no-cache ca-certificates tzdata WORKDIR /app COPY --from=backend-builder /app/margin-server ./margin-server COPY --from=frontend-builder /app/web/dist ./dist RUN npm install @resvg/resvg-js@2.6.2 --no-save ENV PORT=8080 ENV API_PORT=8081 ENV DATABASE_URL=margin.db ENV HOST=0.0.0.0 ENV API_URL=http://localhost:8081 EXPOSE 8080 COPY <<'EOF' /app/start.sh #!/bin/sh PORT=$API_PORT ./margin-server & node ./dist/server/entry.mjs & wait -n EOF RUN chmod +x /app/start.sh CMD ["/app/start.sh"]