- use current-alpine3.22 AS builder - The node:24-slim has a high vulnerability CVE as yet unfixed which allows running commands on the host as root
52 lines
1.2 KiB
Docker
52 lines
1.2 KiB
Docker
# Build stage
|
|
FROM node:current-alpine3.22 AS builder
|
|
|
|
# Set working directory
|
|
WORKDIR /app
|
|
|
|
# Copy package files for installation
|
|
COPY package*.json ./
|
|
COPY .npmrc ./
|
|
COPY client/package*.json ./client/
|
|
COPY server/package*.json ./server/
|
|
COPY cli/package*.json ./cli/
|
|
|
|
# Install dependencies
|
|
RUN npm ci --ignore-scripts
|
|
|
|
# Copy source files
|
|
COPY . .
|
|
|
|
# Build the application
|
|
RUN npm run build
|
|
|
|
# Production stage
|
|
FROM node:24-slim
|
|
|
|
WORKDIR /app
|
|
|
|
# Copy package files for production
|
|
COPY package*.json ./
|
|
COPY .npmrc ./
|
|
COPY client/package*.json ./client/
|
|
COPY server/package*.json ./server/
|
|
COPY cli/package*.json ./cli/
|
|
|
|
# Install only production dependencies
|
|
RUN npm ci --omit=dev --ignore-scripts
|
|
|
|
# Copy built files from builder stage
|
|
COPY --from=builder /app/client/dist ./client/dist
|
|
COPY --from=builder /app/client/bin ./client/bin
|
|
COPY --from=builder /app/server/build ./server/build
|
|
COPY --from=builder /app/cli/build ./cli/build
|
|
|
|
# Set default port values as environment variables
|
|
ENV CLIENT_PORT=6274
|
|
ENV SERVER_PORT=6277
|
|
|
|
# Document which ports the application uses internally
|
|
EXPOSE ${CLIENT_PORT} ${SERVER_PORT}
|
|
|
|
# Use ENTRYPOINT with CMD for arguments
|
|
ENTRYPOINT ["npm", "start"]
|