- Publicado em
Guia Completo para Implantar um Aplicativo Next.js Autônomo com Bun e Docker
- Autores
- Nome
- Imamuzzaki Abu Salam
- https://x.com/ImBIOS_Dev
Por que Implementar o Next.js com Bun e Docker?
Quando o Bun atingiu sua versão estável 1 e a Vercel começou a suportá-lo como um gerenciador de pacotes (embora ainda dependendo do Node para o tempo de execução), fiquei intrigado. Como você poderia simular o processo de implantação da Vercel localmente? Especificamente, como você pode implantar um aplicativo Next.js autônomo com Bun e Docker? Este guia tem como objetivo responder a essas perguntas.
Pré-requisitos
Compreensão básica de Docker, Next.js e Bun
Node.js instalado
Gerenciador de pacotes Bun instalado
Guia Passo a Passo
Passo 1: Configurando o Dockerfile
Aqui está o dockerfile
completo que você precisará.
FROM imbios/bun-node:18-slim AS deps
ARG DEBIAN_FRONTEND=noninteractive
# Eu uso Asia/Jakarta como meu fuso horário, você pode alterá-lo para seu fuso horário
RUN apt-get -y update && \
apt-get install -yq openssl git ca-certificates tzdata && \
ln -fs /usr/share/zoneinfo/Asia/Jakarta /etc/localtime && \
dpkg-reconfigure -f noninteractive tzdata
WORKDIR /app
# Instale as dependências com base no gerenciador de pacotes preferido
COPY package.json bun.lockb ./
RUN bun install --frozen-lockfile
# Crie o aplicativo
FROM deps AS builder
WORKDIR /app
COPY . .
RUN bun run build
# Imagem de produção, copie todos os arquivos e execute o próximo
FROM node:18-slim AS runner
WORKDIR /app
ARG CONFIG_FILE
COPY $CONFIG_FILE /app/.env
ENV NODE_ENV production
# Descomente a linha a seguir caso você queira desabilitar a telemetria durante o tempo de execução.
# ENV NEXT_TELEMETRY_DISABLED 1
COPY /app/.next/standalone ./
EXPOSE 3001
ENV PORT 3001
CMD ["node", "server.js"]
Passo 2: Script de Shell Personalizado
Crie um script de shell personalizado ./build.sh.
#!/bin/bash
set -e
# Execute a construção do Next.js com os argumentos passados
next build "$@"
# Copie os arquivos apenas se não estiver em um ambiente CI
if [ -z "$CI" ]; then
cp -r ./public ./.next/standalone/public
cp -r ./.next/static ./.next/standalone/.next/static
fi
Erros Comuns e Solução de Problemas
Encontrei alguns problemas durante minha primeira tentativa, especialmente erros com o prefixo node:. Eu os corrigi usando imbios/bun-node
em vez de oven/bun
como a imagem base. Porque precisamos do Node.js de fallback para os recursos ainda não implementados do Bun.
Conclusão
Seguindo este guia, você deve ter um aplicativo Next.js implantado, imitando o processo de implantação da Vercel, com Bun e Docker. Sinta-se à vontade para ajustar e otimizar a configuração de acordo com as necessidades do seu projeto.
O que vem a seguir?
Compartilhe este guia se você o achou útil e deixe um comentário se tiver alguma dúvida ou melhoria. Fiquem ligados para mais!