- Publicado el
Guía completa para implementar Next.js independiente con Bun y Docker
- Autores
- Nombre
- Imamuzzaki Abu Salam
- https://x.com/ImBIOS_Dev
¿Por qué desplegar Next.js con Bun y Docker?
Cuando Bun alcanzó su versión estable 1 y Vercel comenzó a admitirlo como administrador de paquetes (aunque todavía depende de Node para el tiempo de ejecución), me intrigó. ¿Cómo se puede simular el proceso de despliegue de Vercel localmente? Específicamente, ¿cómo se puede desplegar una aplicación Next.js independiente con Bun y Docker? Esta guía tiene como objetivo responder a estas preguntas.
Requisitos previos
Comprensión básica de Docker, Next.js y Bun
Node.js instalado
Administrador de paquetes Bun instalado
Guía paso a paso
Paso 1: Configurar Dockerfile
Aquí tienes el dockerfile
completo que necesitarás.
FROM imbios/bun-node:18-slim AS deps
ARG DEBIAN_FRONTEND=noninteractive
# Utilizo Asia/Jakarta como mi zona horaria, puedes cambiarla a tu zona horaria
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
# Instala las dependencias en función del administrador de paquetes preferido
COPY package.json bun.lockb ./
RUN bun install --frozen-lockfile
# Construye la aplicación
FROM deps AS builder
WORKDIR /app
COPY . .
RUN bun run build
# Imagen de producción, copia todos los archivos y ejecuta next
FROM node:18-slim AS runner
WORKDIR /app
ARG CONFIG_FILE
COPY $CONFIG_FILE /app/.env
ENV NODE_ENV production
# Descomenta la siguiente línea en caso de que quieras desactivar la telemetría durante el tiempo de ejecución.
# ENV NEXT_TELEMETRY_DISABLED 1
COPY /app/.next/standalone ./
EXPOSE 3001
ENV PORT 3001
CMD ["node", "server.js"]
Paso 2: Script de shell personalizado
Crea un script de shell personalizado ./build.sh.
#!/bin/bash
set -e
# Ejecuta la compilación de Next.js con los argumentos pasados
next build "$@"
# Copia los archivos solo si no estás en un entorno de CI
if [ -z "$CI" ]; then
cp -r ./public ./.next/standalone/public
cp -r ./.next/static ./.next/standalone/.next/static
fi
Errores comunes y solución de problemas
Tuve algunos problemas durante mi primer intento, especialmente errores con el prefijo node:. Los arreglé usando imbios/bun-node
en lugar de oven/bun
como imagen base. Porque necesitamos una solución alternativa de Node.js para las funciones que aún no se han implementado en Bun.
Conclusión
Siguiendo esta guía, deberías tener una aplicación Next.js desplegada, imitando el proceso de despliegue de Vercel, con Bun y Docker. No dudes en modificar y optimizar la configuración de acuerdo con las necesidades de tu proyecto.
¿Qué sigue?
Comparte esta guía si te ha resultado útil y deja un comentario si tienes alguna pregunta o mejora. ¡Mantente atento para más!