magicui
/
Dockerfile
86 строк · 2.6 Кб
1FROM node:20-alpine AS base
2
3ARG DATABASE_URL
4ARG NEXTAUTH_SECRET
5ARG NEXTAUTH_URL
6ARG NEXT_PUBLIC_APP_URL
7ARG RESEND_API_KEY
8ARG STRIPE_API_KEY
9ARG NEXT_PUBLIC_STRIPE_PAYMENT_LINK
10ARG NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY_LIVE
11ARG NEXT_PUBLIC_POSTHOG_API_KEY
12ARG NODE_ENV
13ARG SERVER_URL
14ARG STRIPE_SECRET_KEY_LIVE
15ARG STRIPE_WEBHOOK_SECRET
16
17# Install dependencies only when needed
18FROM base AS deps
19# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
20RUN apk add --no-cache libc6-compat
21WORKDIR /app
22
23# Install dependencies based on the preferred package manager
24COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
25RUN \
26if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
27elif [ -f package-lock.json ]; then npm ci; \
28elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && corepack use pnpm@9 && NODE_ENV=development pnpm i --frozen-lockfile; \
29else echo "Lockfile not found." && exit 1; \
30fi
31
32
33# Rebuild the source code only when needed
34FROM base AS builder
35WORKDIR /app
36RUN npm i -g turbo
37COPY --from=deps /app/node_modules ./node_modules
38COPY . .
39RUN npx prisma generate
40
41# Next.js collects completely anonymous telemetry data about general usage.
42# Learn more here: https://nextjs.org/telemetry
43# Uncomment the following line in case you want to disable telemetry during the build.
44# ENV NEXT_TELEMETRY_DISABLED 1
45
46RUN \
47if [ -f yarn.lock ]; then yarn run build; \
48elif [ -f package-lock.json ]; then npm run build; \
49elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm run build; \
50else echo "Lockfile not found." && exit 1; \
51fi
52
53# Production image, copy all the files and run next
54FROM base AS runner
55WORKDIR /app
56
57ENV NODE_ENV production
58# Uncomment the following line in case you want to disable telemetry during runtime.
59# ENV NEXT_TELEMETRY_DISABLED 1
60
61RUN addgroup --system --gid 1001 nodejs
62RUN adduser --system --uid 1001 nextjs
63
64COPY --from=builder /app/public ./public
65
66# Set the correct permission for prerender cache
67RUN mkdir .next
68RUN chown nextjs:nodejs .next
69
70# Automatically leverage output traces to reduce image size
71# https://nextjs.org/docs/advanced-features/output-file-tracing
72COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
73COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
74
75
76USER nextjs
77
78EXPOSE 3000
79
80ENV PORT 3000
81# set hostname to localhost
82ENV HOSTNAME "0.0.0.0"
83
84# server.js is created by next build from the standalone output
85# https://nextjs.org/docs/pages/api-reference/next-config-js/output
86CMD ["node", "server.js"]
87