# SPDX-FileCopyrightText: 2026 Authelia # # SPDX-License-Identifier: Apache-2.0 # ======================================== # ===== Build image for the frontend ===== # ======================================== FROM node:26-alpine@sha256:40cd011b55415bc894e45b02fdd5a5dfde056921b7d23a64c74f80497af48797 AS builder-frontend WORKDIR /node/src/app ENV \ SHELL="/bin/sh" \ PNPM_HOME="/usr/local" COPY --link web ./ RUN --mount=type=cache,id=pnpm-store,target=/pnpm/store \ wget -qO /tmp/pnpm-install.sh https://raw.githubusercontent.com/pnpm/get.pnpm.io/0feb8888a1a9aa97f4aded675eab12548141da5c/install.sh && \ ENV="/root/.profile" sh /tmp/pnpm-install.sh && \ pnpm install --frozen-lockfile --ignore-scripts --store-dir /pnpm/store && \ pnpm coverage # ======================================= # ===== Build image for the backend ===== # ======================================= FROM golang:1.27.3-bookworm@sha256:972b4110ba0f47539a975c31e52c64765e1ff19f2d74469ae4a595c6676e80a5 AS builder-backend WORKDIR /go/src/app COPY --link go.mod go.sum ./ RUN \ echo ">> Downloading go modules..." && \ go mod download COPY --link / ./ # Prepare static files to be embedded in Go binary COPY --link --from=builder-frontend /node/src/internal/server/public_html internal/server/public_html ARG LDFLAGS_EXTRA RUN \ mv api internal/server/public_html/api && \ echo ">> Starting go build (coverage via -cover)..." && \ CGO_ENABLED=1 CGO_CPPFLAGS="-D_FORTIFY_SOURCE=2 -fstack-protector-strong" CGO_LDFLAGS="-Wl,-z,relro,-z,now" go build -tags dev -cover -covermode=atomic \ -ldflags "${LDFLAGS_EXTRA}" -o authelia ./cmd/authelia # =================================== # ===== Authelia official image ===== # =================================== FROM authelia/base:latest@sha256:e372a26a50ecb769441386508de59e7c394c936ba75e015b02390e4f8f3d1080 WORKDIR /app COPY --link --from=builder-backend /go/src/app/authelia /go/src/app/LICENSE /go/src/app/healthcheck.sh ./ COPY --link --from=builder-backend --chmod=666 /go/src/app/.healthcheck.env ./ EXPOSE 9091 ENV \ PATH="/app:${PATH}" \ GOCOVERDIR="/authelia/coverage/" \ X_AUTHELIA_CONFIG="/config/configuration.yml" CMD ["authelia"] HEALTHCHECK --interval=30s --timeout=3s CMD /app/healthcheck.sh