diff options
| author | Fuwn <[email protected]> | 2026-01-24 13:09:50 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-01-24 13:09:50 +0000 |
| commit | 396acf3bbbe00a192cb0ea0a9ccf91b1d8d2850b (patch) | |
| tree | b9df4ca6a70db45cfffbae6fdd7252e20fb8e93c /Dockerfile | |
| download | umami-main.tar.xz umami-main.zip | |
Created from https://vercel.com/new
Diffstat (limited to 'Dockerfile')
| -rw-r--r-- | Dockerfile | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1282fd8 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,66 @@ +ARG NODE_IMAGE_VERSION="22-alpine" + +# Install dependencies only when needed +FROM node:${NODE_IMAGE_VERSION} AS deps +# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. +RUN apk add --no-cache libc6-compat +WORKDIR /app +COPY package.json pnpm-lock.yaml ./ +RUN npm install -g pnpm +RUN pnpm install --frozen-lockfile + +# Rebuild the source code only when needed +FROM node:${NODE_IMAGE_VERSION} AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . +COPY docker/middleware.ts ./src + +ARG BASE_PATH + +ENV BASE_PATH=$BASE_PATH +ENV NEXT_TELEMETRY_DISABLED=1 +ENV DATABASE_URL="postgresql://user:pass@localhost:5432/dummy" + +RUN npm run build-docker + +# Production image, copy all the files and run next +FROM node:${NODE_IMAGE_VERSION} AS runner +WORKDIR /app + +ARG PRISMA_VERSION="6.19.0" +ARG NODE_OPTIONS + +ENV NODE_ENV=production +ENV NEXT_TELEMETRY_DISABLED=1 +ENV NODE_OPTIONS=$NODE_OPTIONS + +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs +RUN set -x \ + && apk add --no-cache curl \ + && npm install -g pnpm + +# Script dependencies +RUN pnpm --allow-build='@prisma/engines' add npm-run-all dotenv chalk semver \ + prisma@${PRISMA_VERSION} \ + @prisma/adapter-pg@${PRISMA_VERSION} + +COPY --from=builder --chown=nextjs:nodejs /app/public ./public +COPY --from=builder /app/prisma ./prisma +COPY --from=builder /app/scripts ./scripts +COPY --from=builder /app/generated ./generated + +# 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 + +USER nextjs + +EXPOSE 3000 + +ENV HOSTNAME=0.0.0.0 +ENV PORT=3000 + +CMD ["pnpm", "start-docker"] |