HarborGuard_HarborGuard/Dockerfile.dashboard

44 lines
1.2 KiB
Docker

# Dashboard-only image: no scanners, no Buildah, no Docker CLI
FROM node:20-alpine AS builder
WORKDIR /app
RUN apk add --no-cache python3 make g++
COPY package.json package-lock.json* pnpm-lock.yaml* yarn.lock* ./
RUN npm ci --ignore-scripts
COPY . .
RUN mv .env.example .env
RUN npm run build:docker
FROM node:20-alpine
WORKDIR /app
# Install Prisma CLI
RUN npm install -g prisma@6.14.0 --no-save
# Chromium for PDF reports
RUN apk add --no-cache \
chromium nss freetype freetype-dev harfbuzz ttf-freefont \
ca-certificates curl bash \
&& rm -rf /var/cache/apk/*
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser \
NODE_ENV=production \
HOSTNAME=0.0.0.0
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
COPY --from=builder /app/prisma ./prisma
COPY --from=builder /app/src/generated ./src/generated
COPY --from=builder /app/scripts ./scripts
ENV PORT=3000
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \
CMD curl -f http://localhost:${PORT:-3000}/api/health || exit 1
CMD ["sh", "-c", "npx prisma migrate deploy && node server.js"]