32 lines
1.2 KiB
Docker
32 lines
1.2 KiB
Docker
# syntax=docker/dockerfile:1
|
|
FROM node:22-alpine3.23 AS frontend-builder
|
|
ENV NODE_OPTIONS=--max-old-space-size=768
|
|
WORKDIR /src/frontend
|
|
RUN npm install --global pnpm@10.17.1
|
|
COPY frontend/package.json frontend/pnpm-lock.yaml ./
|
|
RUN --mount=type=cache,target=/root/.local/share/pnpm/store pnpm install --frozen-lockfile
|
|
COPY frontend/ ./
|
|
RUN pnpm run build
|
|
|
|
FROM golang:1.26-alpine3.23 AS backend-builder
|
|
ENV GOMAXPROCS=2 GOMEMLIMIT=768MiB GOGC=50 CGO_ENABLED=1
|
|
RUN apk add --no-cache gcc g++ musl-dev libwebp-dev
|
|
WORKDIR /src
|
|
COPY go.mod go.sum ./
|
|
RUN --mount=type=cache,target=/go/pkg/mod go mod download
|
|
COPY backend/ ./backend/
|
|
COPY main.go ./
|
|
COPY --from=frontend-builder /src/frontend/dist ./frontend/dist
|
|
COPY --from=frontend-builder /src/frontend/src/assets/fonts ./frontend/src/assets/fonts
|
|
RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache/go-build go build -p 16 -trimpath -ldflags="-s -w" -o /out/oneimg ./main.go
|
|
|
|
FROM alpine:3.23
|
|
RUN apk add --no-cache ca-certificates tzdata libwebp
|
|
WORKDIR /app
|
|
COPY --from=backend-builder /out/oneimg /app/oneimg
|
|
COPY --from=frontend-builder /src/frontend/dist ./frontend/dist
|
|
COPY ca/ ./ca/
|
|
RUN mkdir -p /app/data /app/uploads
|
|
EXPOSE 8080
|
|
CMD ["/app/oneimg"]
|