- Replace gen2brain/avif, gen2brain/webp, disintegration/imaging with govips - govips uses libvips via CGO for fast native image processing - Add libheif-dev to Dockerfile for AVIF support - Add docker-test Makefile target for running tests in Docker - Update processor.go to use vips API for decode, resize, encode - Add TestMain to initialize/shutdown vips in tests - Remove WASM-based libraries (gen2brain) in favor of native codecs Performance improvement: AVIF encoding now uses native libheif instead of WASM, significantly reducing encoding time for large images.
45 lines
849 B
Docker
45 lines
849 B
Docker
# Build stage
|
|
FROM golang:1.24-alpine AS builder
|
|
|
|
ARG VERSION=dev
|
|
|
|
# Install build dependencies for CGO image libraries
|
|
RUN apk add --no-cache \
|
|
build-base \
|
|
vips-dev \
|
|
libheif-dev \
|
|
pkgconfig
|
|
|
|
WORKDIR /src
|
|
|
|
# Copy go mod files first for better layer caching
|
|
COPY go.mod go.sum ./
|
|
RUN GOTOOLCHAIN=auto go mod download
|
|
|
|
# Copy source code
|
|
COPY . .
|
|
|
|
# Build with CGO enabled
|
|
RUN CGO_ENABLED=1 GOTOOLCHAIN=auto go build -ldflags "-X main.Version=${VERSION}" -o /pixad ./cmd/pixad
|
|
|
|
# Runtime stage
|
|
FROM alpine:3.21
|
|
|
|
# Install runtime dependencies only
|
|
RUN apk add --no-cache \
|
|
vips \
|
|
libheif \
|
|
ca-certificates \
|
|
tzdata
|
|
|
|
# Copy binary from builder
|
|
COPY --from=builder /pixad /usr/local/bin/pixad
|
|
|
|
# Create non-root user
|
|
RUN adduser -D -H -s /sbin/nologin pixad
|
|
USER pixad
|
|
|
|
EXPOSE 8080
|
|
|
|
ENTRYPOINT ["/usr/local/bin/pixad"]
|