diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ee12a0c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,30 @@ +# syntax=docker/dockerfile:1.7 + +# ─── Stage 1: web build ─── +FROM node:22-alpine AS web +WORKDIR /web +COPY web/package.json web/pnpm-lock.yaml* ./ +RUN corepack enable && (pnpm install --frozen-lockfile || pnpm install) +COPY web . +RUN pnpm build + +# ─── Stage 2: go build ─── +FROM golang:1.25-alpine AS go +WORKDIR /src +RUN apk add --no-cache git +COPY go.mod go.sum ./ +RUN go mod download +COPY . . +COPY --from=web /web/dist/. ./cmd/server/web/dist/ +RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags='-s -w' -o /out/server ./cmd/server + +# ─── Stage 3: runtime ─── +FROM alpine:3.20 +RUN apk add --no-cache ca-certificates tzdata && \ + addgroup -S app && adduser -S app -G app +WORKDIR /app +COPY --from=go /out/server /app/server +COPY migrations /app/migrations +USER app +EXPOSE 8080 +ENTRYPOINT ["/app/server"]