src/Dockerfile
1,190 bytes · 53 lines · capsule://quake0day/[email protected]
raw on github
# syntax=docker/dockerfile:1
ARG GO_VERSION=1.26
ARG BUN_VERSION=1
FROM --platform=$BUILDPLATFORM oven/bun:${BUN_VERSION}-alpine AS web-builder
WORKDIR /src/web
COPY web/package.json web/bun.lock ./
RUN bun install --frozen-lockfile
COPY web/ ./
RUN bun run build
FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine AS go-builder
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY cmd/ ./cmd/
COPY internal/ ./internal/
ARG TARGETOS
ARG TARGETARCH
RUN target_os=${TARGETOS:-linux}; \
target_arch=${TARGETARCH:-$(go env GOARCH)}; \
CGO_ENABLED=0 GOOS=${target_os} GOARCH=${target_arch} go build -trimpath -ldflags="-s -w" -o /out/scenemint ./cmd
FROM alpine:3.22
WORKDIR /app
RUN apk add --no-cache ca-certificates tzdata \
&& addgroup -S scenemint \
&& adduser -S scenemint -G scenemint \
&& chown -R scenemint:scenemint /app
COPY --from=go-builder /out/scenemint ./scenemint
COPY --from=web-builder /src/web/dist ./web/dist
RUN mkdir -p /app/data \
&& chown -R scenemint:scenemint /app/data
USER scenemint
ENV HOST=0.0.0.0
ENV PORT=3000
ENV CHATGPT2API_IMAGE_MODEL=gpt-image-2
ENV CHATGPT2API_PROMPT_MODEL=gpt-5.5
EXPOSE 3000
CMD ["./scenemint"]