-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
56 lines (52 loc) · 2.44 KB
/
Copy pathDockerfile
File metadata and controls
56 lines (52 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# syntax=docker/dockerfile:1
#
# Imagem de deploy do ArchTime para Azure App Service (container, região Brazil South) —
# o hosting de produção. O output `standalone` só é ligado no build da imagem via
# BUILD_STANDALONE=true; fora dela, o output permanece o padrão do Next.
FROM node:22-bookworm-slim AS base
# NODE_ENV NÃO é setado aqui de propósito: `deps` herda de `base`, e `npm ci` com
# NODE_ENV=production omite devDependencies (prisma CLI, typescript, tailwind) — o
# builder precisa delas. NODE_ENV=production fica só no `runner`, como no Dockerfile
# de referência do Next.js.
ENV NEXT_TELEMETRY_DISABLED=1
# --- deps: instala dependências com o lockfile ---
FROM base AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
# --- builder: gera o Prisma client e faz o build standalone ---
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# NEXT_PUBLIC_* são valores PÚBLICOS inlinados no bundle client em build time.
# Os segredos de runtime (DATABASE_URL, ENTRY_HASH_SECRET, SERVICE_ROLE_KEY) NÃO
# entram na imagem — são injetados como env no App Service.
ARG NEXT_PUBLIC_SUPABASE_URL
ARG NEXT_PUBLIC_SUPABASE_ANON_KEY
ARG NEXT_PUBLIC_APP_URL
ARG NEXT_PUBLIC_SENTRY_DSN
ARG SENTRY_RELEASE
ENV NEXT_PUBLIC_SUPABASE_URL=$NEXT_PUBLIC_SUPABASE_URL \
NEXT_PUBLIC_SUPABASE_ANON_KEY=$NEXT_PUBLIC_SUPABASE_ANON_KEY \
NEXT_PUBLIC_APP_URL=$NEXT_PUBLIC_APP_URL \
NEXT_PUBLIC_SENTRY_DSN=$NEXT_PUBLIC_SENTRY_DSN \
SENTRY_RELEASE=$SENTRY_RELEASE \
BUILD_STANDALONE=true
# O SENTRY_AUTH_TOKEN entra só como build secret (não persiste em layer nem no cache),
# usado pelo withSentryConfig para subir source maps. Ausente → upload é pulado.
RUN --mount=type=secret,id=SENTRY_AUTH_TOKEN,env=SENTRY_AUTH_TOKEN \
npx prisma generate && npm run build
# --- runner: imagem mínima que só roda o server standalone ---
FROM base AS runner
WORKDIR /app
# App Service for Containers roteia para a porta em WEBSITES_PORT (setamos 8080).
ENV NODE_ENV=production PORT=8080 HOSTNAME=0.0.0.0
RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 nextjs
# `output: standalone` NÃO copia public/ nem .next/static automaticamente — copiamos à mão.
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 8080
CMD ["node", "server.js"]