# syntax=docker/dockerfile:1.7
FROM node:24-slim AS build

WORKDIR /app

COPY package*.json ./
RUN npm ci

COPY . .

ARG APP_NAME="Example Website"
ARG APP_URL="https://example.com"
ARG COMPANY_NAME="Example Company"
ARG CONTACT_EMAIL="info@example.com"
ARG CONTACT_PHONE="+49 000 000000"
ARG CONTACT_ADDRESS="Example Street 1, 12345 Example City"
ARG SKIP_IMAGE_OPTIMIZATION=false
ARG IMAGE_CACHE_NAMESPACE=shared
ENV APP_NAME=${APP_NAME} \
    APP_URL=${APP_URL} \
    COMPANY_NAME=${COMPANY_NAME} \
    CONTACT_EMAIL=${CONTACT_EMAIL} \
    CONTACT_PHONE=${CONTACT_PHONE} \
    CONTACT_ADDRESS=${CONTACT_ADDRESS}
ENV NEXT_TELEMETRY_DISABLED=1

RUN --mount=type=cache,id=website-starter-image-assets-${IMAGE_CACHE_NAMESPACE},target=/image-cache,sharing=locked \
    IMAGE_CACHE_ROOT=/image-cache \
    SKIP_IMAGE_OPTIMIZATION=${SKIP_IMAGE_OPTIMIZATION} \
    npm run build

FROM node:24-slim AS runtime

# Apply Debian security updates that may not yet be included in the Node base
# image. Clear package metadata in the same layer so it is not part of the
# runtime image.
# The server starts with Node directly and does not need npm at runtime. Removing
# npm also keeps its build-only dependency tree out of the production image.
RUN apt-get update \
    && apt-get upgrade -y \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \
    && rm -rf /usr/local/lib/node_modules/npm \
    /usr/local/bin/npm \
    /usr/local/bin/npx

ARG BUILD_DATE=""
ARG VCS_REF=""
ARG SOURCE_URL="https://example.com/repository"
LABEL org.opencontainers.image.created="$BUILD_DATE" \
      org.opencontainers.image.revision="$VCS_REF" \
      org.opencontainers.image.source="$SOURCE_URL" \
      org.opencontainers.image.title="website-starter"

ENV NODE_ENV=production \
    NEXT_TELEMETRY_DISABLED=1 \
    HOSTNAME=0.0.0.0 \
    PORT=3000

WORKDIR /app

COPY --from=build --chown=node:node /app/.next/standalone ./
COPY --from=build --chown=node:node /app/.next/static ./.next/static
COPY --from=build --chown=node:node /app/public ./public

USER node
EXPOSE 3000

CMD ["node", "server.js"]
