# Build the actual Posteando source, including branding and provider restrictions.
# Keep this separate from the unmodified upstream Dockerfile.dev.
FROM node:22.23.3-bookworm-slim@sha256:c3de60bf2f9dd0ac6370e6117950ff62d6e339527e7472301c9c78a017978392 AS build
ENV NEXT_TELEMETRY_DISABLED=1

RUN apt-get update && apt-get install -y --no-install-recommends \
    ca-certificates g++ make python3 pkg-config libcairo2-dev libpango1.0-dev \
    libjpeg-dev libgif-dev librsvg2-dev \
    && rm -rf /var/lib/apt/lists/*
RUN npm --no-update-notifier --no-fund --global install pnpm@10.6.1
WORKDIR /app
COPY . .
RUN --mount=type=cache,id=posteando-pnpm-amd64,target=/root/.local/share/pnpm/store \
    pnpm install --frozen-lockfile
# pnpm blocks dependency install scripts by default. Download the pinned Prisma
# CLI engines at build time so schema startup never needs an Internet download.
RUN node -e "require('@prisma/engines').ensureBinariesExist().catch(error => { console.error(error); process.exit(1); })"
RUN node scripts/posteando/source.mjs
ARG NEXT_PUBLIC_VERSION=posteando-internal
ARG FRONTEND_URL
ARG NEXT_PUBLIC_BACKEND_URL
ENV NEXT_PUBLIC_VERSION=${NEXT_PUBLIC_VERSION} \
    FRONTEND_URL=${FRONTEND_URL} \
    NEXT_PUBLIC_BACKEND_URL=${NEXT_PUBLIC_BACKEND_URL} \
    STORAGE_PROVIDER=local
RUN NODE_OPTIONS="--max-old-space-size=4096" pnpm run build

FROM node:22.23.3-bookworm-slim@sha256:c3de60bf2f9dd0ac6370e6117950ff62d6e339527e7472301c9c78a017978392 AS runtime
ENV NODE_ENV=production \
    NEXT_TELEMETRY_DISABLED=1 \
    PM2_HOME=/tmp/pm2
RUN apt-get update && apt-get install -y --no-install-recommends \
    ca-certificates nginx openssl libcairo2 libpango-1.0-0 libpangocairo-1.0-0 \
    libjpeg62-turbo libgif7 librsvg2-2 \
    && rm -rf /var/lib/apt/lists/*
RUN npm --no-update-notifier --no-fund --global install pnpm@10.6.1 pm2@6.0.13
WORKDIR /app
# Keep the workspace and dependencies: upstream start scripts use pnpm and dotenv.
COPY --from=build --chown=node:node /app /app
COPY deploy/nginx.conf /etc/nginx/nginx.conf
RUN mkdir -p /uploads /config /tmp/nginx /var/lib/nginx \
    && chown -R node:node /uploads /config /tmp/nginx /var/lib/nginx \
    && chmod +x /app/deploy/entrypoint.sh
USER node
EXPOSE 5000
ENTRYPOINT ["/app/deploy/entrypoint.sh"]

