31 lines
784 B
Text
31 lines
784 B
Text
|
|
# syntax=docker/dockerfile:1
|
||
|
|
|
||
|
|
# Use the official Node.js image as the base image
|
||
|
|
ARG NODE_VERSION=22.13.1
|
||
|
|
FROM node:${NODE_VERSION}-slim AS base
|
||
|
|
|
||
|
|
# Set the working directory
|
||
|
|
WORKDIR /app
|
||
|
|
|
||
|
|
# Copy package.json and package-lock.json for dependency installation
|
||
|
|
COPY --link package.json package-lock.json ./
|
||
|
|
|
||
|
|
# Install dependencies using npm ci for deterministic builds
|
||
|
|
RUN --mount=type=cache,target=/root/.npm npm ci --production
|
||
|
|
|
||
|
|
# Copy the application source code
|
||
|
|
COPY --link . .
|
||
|
|
|
||
|
|
# Set environment variables for production
|
||
|
|
ENV NODE_ENV=production
|
||
|
|
ENV NODE_OPTIONS="--max-old-space-size=4096"
|
||
|
|
|
||
|
|
# Create a non-root user and switch to it
|
||
|
|
RUN useradd -m appuser
|
||
|
|
USER appuser
|
||
|
|
|
||
|
|
# Expose the application port
|
||
|
|
EXPOSE 8080
|
||
|
|
|
||
|
|
# Define the command to run the application
|
||
|
|
CMD ["node", "server.js"]
|