Ctrl K
ComunidadGuías…

deploy/docker/Dockerfile

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
ARG NODE_IMAGE=node:24-bookworm-slim
ARG GO_IMAGE=golang:1.26-bookworm
ARG RUNTIME_IMAGE=debian:bookworm-slim
ARG VIPS_VERSION=8.18.4
ARG VIPS_SHA256=2677bad6c422617fd1172d359c16af34e736965d042c214203a87187d26ff037
ARG VERSION=dev
ARG BUILD_REVISION=unknown
ARG BUILD_SOURCE=https://github.com/Willxup/imagesilo

FROM ${NODE_IMAGE} AS web-build
ARG VERSION
WORKDIR /src/web
COPY web/package.json web/package-lock.json web/.npmrc ./
RUN npm ci
COPY web/ ./
COPY api/ /src/api/
COPY assets/ /src/assets/
RUN npm run generate:api && VITE_APP_VERSION="${VERSION}" npm run build

FROM ${GO_IMAGE} AS vips-build
ARG VIPS_VERSION
ARG VIPS_SHA256
RUN apt-get update \
    && apt-get install --yes --no-install-recommends \
        build-essential ca-certificates curl libexpat1-dev libglib2.0-dev \
        libjpeg62-turbo-dev libpng-dev libwebp-dev meson ninja-build pkg-config xz-utils zlib1g-dev \
    && rm -rf /var/lib/apt/lists/*
WORKDIR /tmp/libvips
RUN curl --location --fail --silent --show-error \
        --output vips.tar.xz \
        "https://github.com/libvips/libvips/releases/download/v${VIPS_VERSION}/vips-${VIPS_VERSION}.tar.xz" \
    && echo "${VIPS_SHA256}  vips.tar.xz" | sha256sum --check --strict \
    && tar --extract --file vips.tar.xz --strip-components=1 \
    && meson setup build \
        --prefix=/opt/vips \
        --libdir=lib \
        --buildtype=release \
        -Ddeprecated=false -Dexamples=false -Dcplusplus=false -Ddocs=false \
        -Dmodules=disabled -Dintrospection=disabled -Dvapi=false \
        -Dcfitsio=disabled -Dcgif=disabled -Dexif=disabled -Dfftw=disabled \
        -Dfontconfig=disabled -Darchive=disabled -Dheif=disabled -Dheif-module=disabled \
        -Dimagequant=disabled -Djpeg=enabled -Duhdr=disabled -Djpeg-xl=disabled \
        -Djpeg-xl-module=disabled -Dlcms=disabled -Dmagick=disabled -Dmagick-module=disabled \
        -Dmatio=disabled -Dnifti=disabled -Dopenexr=disabled -Dopenjpeg=disabled \
        -Dopenslide=disabled -Dopenslide-module=disabled -Dhighway=disabled -Dorc=disabled \
        -Dpangocairo=disabled -Dpdfium=disabled -Dpng=enabled -Dpoppler=disabled \
        -Dpoppler-module=disabled -Dquantizr=disabled -Draw=disabled -Drsvg=disabled \
        -Dspng=disabled -Dtiff=disabled -Dwebp=enabled -Dzlib=enabled \
        -Dnsgif=true -Dppm=false -Danalyze=false -Dradiance=false \
    && meson compile -C build \
    && meson install -C build

FROM vips-build AS go-build
ENV PKG_CONFIG_PATH=/opt/vips/lib/pkgconfig
ENV CGO_CFLAGS=-I/opt/vips/include
ENV CGO_LDFLAGS=-L/opt/vips/lib
ENV LD_LIBRARY_PATH=/opt/vips/lib
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . ./
COPY --from=web-build /src/web/dist ./internal/webui/dist
RUN CGO_ENABLED=1 go test -tags vips ./internal/platform/processor ./internal/image ./internal/httpapi \
    && CGO_ENABLED=1 go build -tags vips -trimpath -ldflags='-s -w' -o /out/imagesilo ./cmd/imagesilo

FROM vips-build AS vips-runtime
RUN rm -rf /opt/vips/bin /opt/vips/include /opt/vips/lib/pkgconfig /opt/vips/share \
    && find /opt/vips/lib -type f \( -name '*.a' -o -name '*.la' \) -delete \
    && find /opt/vips/lib -type f -name '*.so.*' -exec strip --strip-unneeded {} +

FROM ${RUNTIME_IMAGE} AS runtime
ARG BUILD_REVISION
ARG BUILD_SOURCE
RUN apt-get update \
    && apt-get install --yes --no-install-recommends \
        libexpat1 libglib2.0-0 libjpeg62-turbo libpng16-16 libwebp7 libwebpdemux2 libwebpmux3 zlib1g \
    && rm -rf /var/lib/apt/lists/* \
    && groupadd --gid 10001 imagesilo \
    && useradd --uid 10001 --gid 10001 --no-create-home --home-dir /nonexistent --shell /usr/sbin/nologin imagesilo \
    && install -d -o 10001 -g 10001 -m 0750 /data/db /data/images /data/migrations /data/cache/thumbnails /data/tmp

COPY --from=vips-runtime /opt/vips/lib /opt/vips/lib
COPY --from=go-build /out/imagesilo /usr/local/bin/imagesilo
COPY THIRD_PARTY_NOTICES.md /usr/share/doc/imagesilo/THIRD_PARTY_NOTICES.md

LABEL org.opencontainers.image.source="$BUILD_SOURCE" \
      org.opencontainers.image.revision="$BUILD_REVISION"

ENV LD_LIBRARY_PATH=/opt/vips/lib \
    IMAGESILO_LISTEN_ADDRESS=:8080 \
    IMAGESILO_DELIVERY_CONCURRENCY=0 \
    IMAGESILO_TRUST_PROXY_HEADERS=true

USER 10001:10001
EXPOSE 8080
VOLUME ["/data"]
ENTRYPOINT ["/usr/local/bin/imagesilo"]
CMD ["serve"]
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 CMD ["/usr/local/bin/imagesilo", "healthcheck"]