chore: Optimized Dockerfile and .dockerignore for faster deployments.

This commit is contained in:
Scott Idem
2026-03-11 12:36:34 -04:00
parent 56fd1d1760
commit ca91afbd9d
2 changed files with 22 additions and 19 deletions

View File

@@ -1,12 +1,21 @@
node_modules
build
.svelte-kit
.git
node_modules/
build/
.svelte-kit/
.git/
.env
.env.*
!.env.staging
!.env.prod
npm_deploy
test-results
test_results
documentation
npm_deploy/
test-results/
test_results/
documentation/
backups/
*.log
*.bak
.claude/
.vscode/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*

View File

@@ -1,10 +1,8 @@
# Stage 1: Build the application
# node:22-alpine — Node 22 is the current Active LTS (supported through April 2027).
FROM node:22-alpine AS builder
FROM node:24-alpine AS builder
WORKDIR /app
# Install dependencies first for better Docker layer caching.
# This step only reruns if package.json or package-lock.json changes.
COPY package*.json ./
RUN npm install
@@ -12,17 +10,13 @@ RUN npm install
COPY . .
# Build Argument to determine build environment (staging, prod, or production).
# Defaults to "staging".
ARG BUILD_MODE=staging
ENV NODE_ENV=production
# Sync the SvelteKit project to generate ./.svelte-kit/tsconfig.json
# and other required files, which avoids the build warning.
RUN npx svelte-kit sync
# Perform the build based on the BUILD_MODE argument.
# This runs the existing scripts in package.json, which already
# handle copying the correct .env file to .env.production for Vite.
RUN if [ "$BUILD_MODE" = "prod" ] || [ "$BUILD_MODE" = "production" ]; then \
npm run build:prod; \
else \
@@ -30,18 +24,18 @@ RUN if [ "$BUILD_MODE" = "prod" ] || [ "$BUILD_MODE" = "production" ]; then \
fi
# Stage 2: Final runtime image
FROM node:22-alpine AS deploy-node
FROM node:24-alpine AS deploy-node
WORKDIR /app
# Copy only the built files and necessary scripts from the builder stage.
# Copy built files and package info.
COPY --from=builder /app/build .
COPY --from=builder /app/package.json .
COPY --from=builder /app/package-lock.json .
# Install only production dependencies for a smaller, cleaner image.
# Install only production dependencies.
RUN npm install --omit=dev
# Copy the resulting .env.production file to .env.
# adapter-node reads from .env at runtime for non-PUBLIC_ variables.
COPY --from=builder /app/.env.production .env
# SvelteKit (via adapter-node) defaults to port 3000.