Files
morteza 8be13b5912
deploy to danak / build_and_deploy (push) Has been cancelled
docker
2026-07-03 09:12:25 +03:30

59 lines
1.1 KiB
Docker

# -----------------------
# Base image
# -----------------------
FROM node:18-alpine AS base
WORKDIR /app
# -----------------------
# Install dependencies
# -----------------------
FROM base AS deps
WORKDIR /deps
COPY package*.json ./
RUN npm ci
# -----------------------
# Build stage
# -----------------------
FROM base AS builder
WORKDIR /build
COPY . .
# copy deps only (faster + deterministic)
COPY --from=deps /deps/node_modules ./node_modules
RUN npm run build
# -----------------------
# Production dependencies (Nitro externalizes ipx, sharp, etc.)
# -----------------------
FROM base AS prod-deps
WORKDIR /deps
COPY package*.json ./
RUN npm ci --omit=dev
# -----------------------
# Production runtime
# -----------------------
FROM node:18-alpine AS runner
WORKDIR /app
# sharp (used by ipx) needs libc compatibility on Alpine
RUN apk add --no-cache libc6-compat
# create non-root user
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
COPY --from=builder /build/.output ./.output
COPY --from=prod-deps /deps/node_modules ./node_modules
USER appuser
ENV NODE_ENV=production
EXPOSE 3000
CMD ["node", ".output/server/index.mjs"]