41 lines
1.2 KiB
Docker
41 lines
1.2 KiB
Docker
# Etapa 1: Construir a aplicação
|
|
FROM node:20-alpine AS builder
|
|
|
|
# Define o diretório de trabalho
|
|
WORKDIR /app
|
|
|
|
# Copia os arquivos de configuração do pacote
|
|
COPY package.json package-lock.json ./
|
|
|
|
# Instala as dependências do projeto
|
|
RUN npm install
|
|
|
|
# Copia todo o código da aplicação para o container
|
|
COPY . .
|
|
|
|
# Constrói a aplicação com o output 'standalone'
|
|
RUN npm run build
|
|
|
|
# Etapa 2: Executar a aplicação
|
|
# Usa uma imagem Node.js leve
|
|
FROM node:20-alpine AS runner
|
|
|
|
# Define o diretório de trabalho
|
|
WORKDIR /app
|
|
|
|
# Copia o diretório 'standalone' da etapa de build, que já contém o servidor e as dependências
|
|
# O diretório 'standalone' é a pasta .next/standalone gerada pela configuração 'output: standalone'
|
|
COPY --from=builder /app/.next/standalone ./
|
|
|
|
# Copia os arquivos públicos
|
|
COPY --from=builder /app/public ./public
|
|
|
|
# Copia os arquivos estáticos gerados pelo build. É aqui que os arquivos CSS e JS ficam.
|
|
COPY --from=builder /app/.next/static ./.next/static
|
|
|
|
# Expõe a porta padrão do Next.js
|
|
EXPOSE 3000
|
|
|
|
# Define o comando para iniciar a aplicação
|
|
# O 'start' do package.json não é necessário, o próprio servidor standalone já está no container
|
|
CMD ["node", "server.js"]
|