Ctrl K
ComunidadGuías…

Dockerfile

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

Archivo original ↗Preguntar a KiBot
# syntax=docker/dockerfile:1

FROM --platform=$BUILDPLATFORM node:24.17.0-bookworm AS web
WORKDIR /src/web

ARG NPM_REGISTRY=""
ARG PNPM_REGISTRY=""

RUN if [ -n "$NPM_REGISTRY" ]; then npm config set registry "$NPM_REGISTRY"; fi \
  && npm install -g pnpm@11.24.0

COPY web/package.json web/pnpm-lock.yaml web/pnpm-workspace.yaml ./
RUN if [ -n "$PNPM_REGISTRY" ]; then pnpm config set registry "$PNPM_REGISTRY"; elif [ -n "$NPM_REGISTRY" ]; then pnpm config set registry "$NPM_REGISTRY"; fi \
  && pnpm install --frozen-lockfile

COPY web/ ./
RUN pnpm build

FROM --platform=$BUILDPLATFORM golang:1.27.0-bookworm AS catalog
WORKDIR /src

COPY go.mod ./
COPY scripts/generate-ruleset-catalog.sh ./scripts/generate-ruleset-catalog.sh
COPY internal/tools/ruleset-catalog-gen/main.go internal/tools/ruleset-catalog-gen/sources.lock ./internal/tools/ruleset-catalog-gen/
RUN RULESET_CATALOG_CACHE_DIR= ./scripts/generate-ruleset-catalog.sh /out

FROM --platform=$BUILDPLATFORM golang:1.27.0-bookworm AS build
WORKDIR /src

ARG GOPROXY=""
ARG TARGETOS
ARG TARGETARCH
ARG VERSION="dev"
ARG REVISION=""
ARG BUILD_TIME=""

COPY go.mod go.sum ./
RUN if [ -n "$GOPROXY" ]; then go env -w GOPROXY="$GOPROXY"; fi \
  && go mod download

RUN if [ -z "$REVISION" ] && [ "$VERSION" != "dev" ]; then \
    printf '%s\n' 'VERSION requires a complete REVISION; use VERSION=dev for untraceable builds' >&2; \
    exit 1; \
  fi

COPY . .
COPY --from=web /src/web/build/client ./internal/entry/webui/static
COPY --from=catalog /out/catalog.json.gz ./internal/service/catalog_builtin/catalog.json.gz
RUN build_time="$BUILD_TIME"; \
  if [ -z "$build_time" ]; then build_time="$(date -u +%Y-%m-%dT%H:%M:%SZ)"; fi; \
  CGO_ENABLED=0 GOOS="$TARGETOS" GOARCH="$TARGETARCH" \
  make build-check BUILD_BIN=/out/sandrone VERSION="$VERSION" REVISION="$REVISION" BUILD_TIME="$build_time"

FROM debian:bookworm-slim AS runtime

RUN apt-get update \
  && apt-get install -y --no-install-recommends ca-certificates curl \
  && rm -rf /var/lib/apt/lists/* \
  && useradd --system --create-home --home-dir /app --shell /usr/sbin/nologin sandrone \
  && mkdir -p /app/data \
  && chown -R sandrone:sandrone /app

COPY --from=build /out/sandrone /usr/local/bin/sandrone

USER sandrone
WORKDIR /app
VOLUME ["/app/data"]
EXPOSE 1137

ARG VERSION="dev"
ARG REVISION=""
LABEL org.opencontainers.image.version=$VERSION \
  org.opencontainers.image.revision=$REVISION \
  org.opencontainers.image.source=https://github.com/kuuvahki-labs/sandrone

ENTRYPOINT ["sandrone"]
CMD ["serve", "--listen", "0.0.0.0:1137", "--data-dir", "/app/data"]