From 46c42cd7658db74e377c42a7b8c73ebb95c35585 Mon Sep 17 00:00:00 2001 From: Atridad Lahiji Date: Thu, 12 Feb 2026 15:04:10 -0700 Subject: [PATCH] Optimized docker --- .dockerignore | 9 +++++++++ Dockerfile | 43 +++++++++++-------------------------------- 2 files changed, 20 insertions(+), 32 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..043ce78 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +node_modules +.git +.gitignore +dist +.env* +*.md +.vscode +.idea +.DS_Store diff --git a/Dockerfile b/Dockerfile index 8ec9c7a..cb1924e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,68 +1,47 @@ FROM node:24-alpine AS base -# Install system dependencies RUN apk add --no-cache \ python3 \ make \ g++ \ libc6-compat \ - vips-dev \ - curl + vips-dev -# Install pnpm globally -RUN npm install -g pnpm - -# Configure pnpm -RUN pnpm config set store-dir /.pnpm-store -RUN pnpm config set network-timeout 300000 -RUN pnpm config set fetch-retries 10 -RUN pnpm config set fetch-retry-factor 2 +RUN npm install -g pnpm && \ + pnpm config set store-dir /.pnpm-store && \ + pnpm config set network-timeout 300000 && \ + pnpm config set fetch-retries 10 && \ + pnpm config set fetch-retry-factor 2 FROM base AS deps WORKDIR /app -# Copy package files COPY package.json pnpm-lock.yaml ./ -# Install dependencies with retry logic RUN --mount=type=cache,id=pnpm,target=/.pnpm-store \ pnpm install --frozen-lockfile || \ (sleep 5 && pnpm install --frozen-lockfile) || \ (sleep 10 && pnpm install --frozen-lockfile --no-frozen-lockfile) -FROM base AS build-deps - -WORKDIR /app - -# Copy package files -COPY package.json pnpm-lock.yaml ./ - -# Install all dependencies including dev dependencies -RUN --mount=type=cache,id=pnpm,target=/.pnpm-store \ - pnpm install --frozen-lockfile || \ - (sleep 5 && pnpm install --frozen-lockfile) || \ - (sleep 10 && pnpm install --frozen-lockfile --no-frozen-lockfile) - -FROM build-deps AS builder +FROM deps AS builder ARG PUBLIC_RSS_TIMEZONE ENV PUBLIC_RSS_TIMEZONE=${PUBLIC_RSS_TIMEZONE} COPY . . -RUN pnpm run build +RUN pnpm run build && \ + pnpm prune --prod FROM node:24-alpine AS runtime -RUN npm install -g pnpm +RUN apk add --no-cache vips libc6-compat WORKDIR /app COPY --from=builder /app/dist ./dist - -COPY --from=deps /app/node_modules ./node_modules - +COPY --from=builder /app/node_modules ./node_modules COPY package.json ./ ENV HOST=0.0.0.0 \