Initial commit
This commit is contained in:
+90
@@ -0,0 +1,90 @@
|
||||
# syntax=docker/dockerfile:1.4
|
||||
ARG NODE_VERSION=20
|
||||
|
||||
# Base development image
|
||||
FROM node:${NODE_VERSION}-slim AS base
|
||||
|
||||
# Install Python and basic build dependencies
|
||||
RUN apt-get update && apt-get install -y \
|
||||
python3 \
|
||||
python3-pip \
|
||||
git \
|
||||
curl \
|
||||
build-essential \
|
||||
procps \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Create cache directories
|
||||
RUN mkdir -p /root/.npm
|
||||
RUN mkdir -p /root/.pip
|
||||
|
||||
# Set working directory
|
||||
WORKDIR /app
|
||||
|
||||
# Development stage
|
||||
FROM base AS dev
|
||||
|
||||
# Install development tools
|
||||
RUN apt-get update && apt-get install -y \
|
||||
vim \
|
||||
ssh \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Create a non-root user for development
|
||||
ARG USERNAME=node
|
||||
ARG USER_UID=1000
|
||||
ARG USER_GID=$USER_UID
|
||||
|
||||
# Create the user
|
||||
RUN groupadd --gid $USER_GID $USERNAME \
|
||||
&& useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \
|
||||
&& apt-get update \
|
||||
&& apt-get install -y sudo \
|
||||
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
|
||||
&& chmod 0440 /etc/sudoers.d/$USERNAME
|
||||
|
||||
# Set npm config
|
||||
RUN npm config set cache /root/.npm \
|
||||
&& npm config set prefer-offline true \
|
||||
&& npm config set package-lock true
|
||||
|
||||
# Copy package files
|
||||
COPY package*.json ./
|
||||
COPY .npmrc ./
|
||||
COPY requirements.txt ./
|
||||
|
||||
# Install Node.js dependencies with cache
|
||||
RUN --mount=type=cache,target=/root/.npm \
|
||||
npm ci
|
||||
|
||||
# Install Python dependencies with cache
|
||||
RUN --mount=type=cache,target=/root/.cache/pip \
|
||||
pip3 install -r requirements.txt
|
||||
|
||||
# Switch to non-root user
|
||||
USER $USERNAME
|
||||
|
||||
# Production stage
|
||||
FROM base AS prod
|
||||
|
||||
# Copy package files
|
||||
COPY package*.json ./
|
||||
COPY .npmrc ./
|
||||
COPY requirements.txt ./
|
||||
|
||||
# Install production dependencies
|
||||
RUN --mount=type=cache,target=/root/.npm \
|
||||
npm ci --only=production
|
||||
|
||||
# Install Python production dependencies
|
||||
RUN --mount=type=cache,target=/root/.cache/pip \
|
||||
pip3 install -r requirements.txt
|
||||
|
||||
# Copy application code
|
||||
COPY . .
|
||||
|
||||
# Build the application
|
||||
RUN npm run build
|
||||
|
||||
# Production command
|
||||
CMD ["npm", "start"]
|
||||
Reference in New Issue
Block a user