Files
mortgagefi-helper/Dockerfile

42 lines
1.2 KiB
Docker

# syntax=docker/dockerfile:1
# 1) Install dependencies
FROM --platform=linux/amd64 node:20-alpine AS deps
WORKDIR /app
ENV CI=true
# Install system deps commonly needed by Next.js
RUN apk add --no-cache libc6-compat
COPY package.json package-lock.json ./
RUN npm ci --legacy-peer-deps --no-audit --no-fund
# 2) Build the app
FROM --platform=linux/amd64 node:20-alpine AS builder
WORKDIR /app
ENV NEXT_TELEMETRY_DISABLED=1
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# Allow passing public env vars at build time
ARG NEXT_PUBLIC_NTFY_URL
ARG NEXT_PUBLIC_SCHEDY_URL
ENV NEXT_PUBLIC_NTFY_URL=${NEXT_PUBLIC_NTFY_URL:-/ntfy}
ENV NEXT_PUBLIC_SCHEDY_URL=${NEXT_PUBLIC_SCHEDY_URL:-/schedy}
RUN npm run build
# 3) Run with standalone output
FROM --platform=linux/amd64 node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
# Create non-root user
RUN adduser -D nextjs
# Copy the minimal standalone output
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/.next/BUILD_ID ./.next/BUILD_ID
# Expose and run
EXPOSE 3000
ENV PORT=3000 HOST=0.0.0.0
USER nextjs
CMD ["node", "server.js"]