diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b0fd082 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,62 @@ +FROM node:20-alpine AS base + +### Dependencies ### +FROM base AS deps +RUN apk add --no-cache libc6-compat git + +# Setup pnpm environment +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +RUN corepack enable +RUN corepack prepare pnpm@latest --activate + +WORKDIR /app + +COPY package.json pnpm-lock.yaml ./ +RUN pnpm install --frozen-lockfile --prefer-frozen-lockfile + +# Builder +FROM base AS builder + +RUN corepack enable +RUN corepack prepare pnpm@latest --activate + +WORKDIR /app + +COPY . . +COPY --from=deps /app/node_modules ./node_modules +COPY ./src ./src +COPY ./public ./public +COPY package.json pnpm-lock.yaml ./ +RUN pnpm install --frozen-lockfile --prefer-frozen-lockfile +RUN pnpm build + +### Production image runner ### +FROM base AS runner + +# Disable Next.js telemetry +# https://nextjs.org/telemetry +ENV NEXT_TELEMETRY_DISABLED 1 + +# Set correct permissions for nextjs user and don't run as root +RUN addgroup nodejs +RUN adduser -SDH nextjs +RUN mkdir .next +RUN chown nextjs:nodejs .next + +# Automatically leverage output traces to reduce image size +# https://nextjs.org/docs/advanced-features/output-file-tracing +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static +COPY --from=builder --chown=nextjs:nodejs /app/public ./public + +USER nextjs + +# Exposed port (for orchestrators and dynamic reverse proxies) +EXPOSE 3000 +ENV PORT 3000 +ENV HOSTNAME "0.0.0.0" +HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 CMD [ "wget", "-q0", "http://localhost:3000/health" ] + +# Run the nextjs app +CMD ["node", "server.js"] diff --git a/package.json b/package.json index bed2e36..bc7f076 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "budgetable", "version": "0.1.0", "private": true, + "packageManager": "pnpm@9.12.0", "scripts": { "dev": "next dev --turbopack", "build": "next build",