Files
pulse/Dockerfile
T
2025-03-10 21:01:45 +00:00

108 lines
2.3 KiB
Docker

# Frontend build stage
FROM node:18-slim AS frontend-builder
WORKDIR /app/frontend
# Copy frontend package files for dependency caching
COPY frontend/package*.json ./
# Install frontend dependencies
RUN npm ci
# Copy frontend source files
COPY frontend/src ./src
COPY frontend/index.html ./
COPY frontend/vite.config.js ./
COPY public ./public
# Build the frontend
RUN npm run build
# Backend build stage
FROM node:18-slim AS backend-builder
WORKDIR /app
# Install dependencies for canvas
RUN apt-get update && apt-get install -y --no-install-recommends \
python3 \
python-is-python3 \
make \
g++ \
build-essential \
libcairo2-dev \
libpango1.0-dev \
libjpeg-dev \
libgif-dev \
librsvg2-dev \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Copy package files for dependency caching
COPY package*.json ./
# Install dependencies
RUN npm ci
# Copy backend source files
COPY src ./src
COPY tsconfig*.json ./
# Build the backend
RUN npm run build
# Production stage
FROM node:18-slim
# Add metadata
LABEL version="1.5.4"
LABEL description="Pulse - A lightweight monitoring application for Proxmox VE"
LABEL maintainer="Richard Courtman <richard@courtman.me>"
# Install runtime dependencies for canvas and create a non-root user
RUN apt-get update && apt-get install -y --no-install-recommends \
dumb-init \
python3 \
python-is-python3 \
make \
g++ \
build-essential \
pkg-config \
libpixman-1-dev \
libcairo2-dev \
libpango1.0-dev \
libjpeg-dev \
libgif-dev \
librsvg2-dev \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& groupadd -r pulse && useradd -r -g pulse pulse
WORKDIR /app
# Copy only production dependencies
COPY package*.json ./
RUN npm ci --omit=dev
# Copy built files from builder stages
COPY --from=backend-builder /app/dist ./dist
COPY --from=frontend-builder /app/frontend/dist ./frontend/dist
# Create logs directory with proper permissions
RUN mkdir -p /app/logs && chown -R pulse:pulse /app/logs
# Set environment variables
ENV PORT=7654
ENV NODE_ENV=production
# Switch to non-root user
USER pulse
# Expose the backend port
EXPOSE 7654
# Use dumb-init to handle signals properly
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
# Start the application
CMD ["node", "dist/server.js"]