Guías de Lenguaje y Marco

Guía completa para desplegar aplicaciones Next.js con Docker

24min

Back4App Containers es una plataforma poderosa para alojar aplicaciones Next.js. Con su capacidad para desplegar automáticamente aplicaciones Next.js en contenedores Docker, puedes lanzar tu proyecto en un entorno escalable y flexible con facilidad.

En esta guía, te guiaremos a través del proceso de preparar y desplegar tu aplicación Next.js en Back4App Containers, cubriendo todo, desde proyectos simples hasta configuraciones más complejas. Comenzaremos con los preparativos necesarios, luego pasaremos a dockerizar la aplicación, probarla localmente, subir el proyecto a GitHub, configurar el proyecto en Back4App Containers, monitorear el despliegue y solucionar problemas comunes.

Si tienes alguna pregunta o comentario, no dudes en unirte a la conversación en el canal #Containers en la Comunidad de Back4app en Slack. En cualquier momento también puedes contactarnos en community@back4app.com.

En cualquier momento, si deseas revisar un proyecto Next.js de muestra funcionando en los contenedores de Back4app, ve a: https://github.com/templates-back4app/containers-nextjs-sample

1-Prepara tu aplicación Next.js:

a. Estructura del Proyecto: Verifica que tu aplicación Next.js siga una estructura de directorio adecuada, con todos los archivos y carpetas necesarios, como pages, public, components, y styles, organizados apropiadamente. El punto de entrada principal para tu aplicación debe ser el archivo pages/index.js o pages/index.jsx.

b. Dependencias: Verifique si todas las dependencias requeridas están listadas en el package.json archivo, incluyendo sus versiones correctas. Asegúrese de haber instalado todas las dependencias usando npm install o yarn install para generar un package-lock.json o yarn.lock archivo.

c. Proceso de Construcción: Para proyectos más complejos que involucren un proceso de construcción, asegúrese de que sus scripts y configuraciones de construcción (por ejemplo, Webpack, Babel o Next.js) estén correctamente configurados. Debería poder ejecutar el proceso de construcción localmente sin problemas.

d. Variables de Entorno: Si su aplicación depende de variables de entorno, asegúrese de tener un .env archivo con las variables necesarias definidas. Al desplegar en Back4App Containers, necesitará configurar estas variables de entorno en la configuración de despliegue.

e. Configuración del Servidor (si aplica): Si su aplicación Next.js incluye un servidor personalizado (por ejemplo, Express), asegúrese de que esté correctamente configurado para servir su aplicación Next.js. Pruebe su servidor localmente para asegurarse de que funcione como se espera.

f. Optimización de la Aplicación: Optimice su aplicación Next.js minimizando los tamaños de los paquetes, utilizando la división de código e implementando las mejores prácticas de rendimiento. Use herramientas como Lighthouse para auditar su aplicación y abordar cualquier problema de rendimiento o accesibilidad.

g. Compatibilidad entre navegadores: Prueba tu aplicación en múltiples navegadores y dispositivos para asegurar un renderizado y funcionalidad adecuados.

Una vez que hayas revisado y preparado a fondo tu aplicación Next.js, puedes proceder al siguiente paso, que es crear un Dockerfile para tu proyecto.

2-Dockerización:

Dockerizar una aplicación Next.js implica crear un Dockerfile en el directorio raíz de tu proyecto. El Dockerfile contiene instrucciones para construir una imagen Docker de tu aplicación, que luego puede ser desplegada en Back4App Containers. Aquí tienes una explicación detallada de cómo crear un Dockerfile para una aplicación Next.js típica:

1-Crea un nuevo archivo llamado Dockerfile (sin ninguna extensión de archivo) en el directorio raíz de tu aplicación Next.js.

2-Define la imagen base: Comienza el Dockerfile especificando una imagen base usando el comando FROM. Para una aplicación Next.js típica, la imagen base debe ser una imagen de Node.js, por ejemplo, node:14 o node:16.

Dockerfile


3-Establece el directorio de trabajo: Usa el comando WORKDIR para establecer el directorio de trabajo para tu aplicación dentro del contenedor Docker. Aquí es donde se almacenarán y ejecutarán los archivos de tu aplicación.

Dockerfile


4-Copia package.json y package-lock.json: Copia los archivos package.json y package-lock.json de tu máquina local al contenedor Docker usando el comando COPY. Estos archivos son necesarios para instalar las dependencias de tu aplicación.

Dockerfile


5-Instalar dependencias: Utiliza el comando RUN para instalar las dependencias de tu aplicación desde el archivo package.json. Esto se hace típicamente usando npm ci, que instala las versiones exactas de las dependencias especificadas en el archivo package-lock.json.

Dockerfile


6-Copiar el resto de los archivos del proyecto: Utiliza el comando COPY nuevamente para copiar los archivos y carpetas restantes de tu máquina local al contenedor de Docker.

Dockerfile


7-Construir la aplicación Next.js: Agrega un comando RUN para construir tu aplicación Next.js usando tu script de construcción, típicamente npm run build. Esto genera una versión lista para producción de tu aplicación Next.js en la carpeta .next.

Dockerfile


8-Configurar el servidor: Necesitas un servidor para servir tu aplicación Next.js construida. Una opción común es el servidor integrado de Next.js. Primero, instálalo globalmente en el contenedor de Docker usando el comando RUN:

Dockerfile


9-Exponer el puerto del servidor: Utiliza el comando EXPOSE para especificar el puerto en el que tu servidor se ejecutará dentro del contenedor de Docker. Por ejemplo, puedes usar el puerto 3000.

Dockerfile


10-Iniciar el servidor: Utiliza el comando CMD para especificar el comando que inicia el servidor para servir tu aplicación Next.js construida. Con el servidor integrado de Next.js, puedes especificar el script de inicio y el número de puerto.

Dockerfile


El Dockerfile completo para una aplicación típica de Next.js debería verse así:

Dockerfile


Otros ejemplos de Dockerfiles que puedes usar como referencia:

Ejemplo 1: Usando un servidor Nginx

Si prefieres usar un servidor Nginx para servir tu aplicación Next.js, puedes crear un Dockerfile de múltiples etapas. En este caso, primero construirás la aplicación Next.js y luego copiarás los archivos generados al servidor Nginx.

Dockerfile


Asegúrate de crear un archivo nginx.conf apropiado para configurar correctamente el servidor Nginx.

Ejemplo 2: Usando un servidor personalizado

Si tienes un servidor personalizado configurado para tu aplicación Next.js, puedes modificar el Dockerfile en consecuencia. Aquí hay un ejemplo usando un archivo server.js personalizado:

Dockerfile


En este ejemplo, el servidor personalizado se inicia con el node server.js comando en lugar de usar el servidor de Next.js.

3-Construir y ejecutar el contenedor de Docker

Después de crear el Dockerfile, puedes construir la imagen de Docker y ejecutar un contenedor a partir de ella. Usa los siguientes comandos para construir y ejecutar el contenedor:

Text


Reemplaza "your-image-name" con un nombre para tu imagen de Docker.

Una vez que el contenedor esté en funcionamiento, puedes acceder a tu aplicación de Next.js en http://localhost:3000 en tu navegador web.

4-Prueba tu proyecto localmente:

Antes de desplegar tu aplicación de Next.js en Back4App Containers, es importante probarla localmente usando Docker. Esto ayuda a asegurar que tu aplicación funcione como se espera y te ayuda a identificar y solucionar cualquier problema antes del despliegue.

Construye la imagen de Docker para tu aplicación de Next.js:

En tu terminal, navega al directorio raíz de tu proyecto y ejecuta el siguiente comando, reemplazando your-app-name con el nombre de tu aplicación:

docker build -t nombre-de-tu-aplicación .

Ejecuta el contenedor de Docker localmente:

A continuación, ejecuta el siguiente comando para iniciar el contenedor de Docker localmente. Este comando mapea el puerto expuesto del contenedor (por ejemplo, 3000) a un puerto en tu máquina local (por ejemplo, 3000):

docker run -p 3000:3000 nombre-de-tu-aplicación

Prueba tu aplicación:

Abre un navegador web y navega a http://localhost:3000 para ver tu aplicación Next.js. Asegúrate de que todo funcione como se espera. Si encuentras algún problema, resuélvelo antes de pasar al siguiente paso.

5-Pulsa tu proyecto a GitHub:

Crea un .gitignore archivo en el directorio raíz de tu proyecto para excluir archivos innecesarios o sensibles de tu repositorio (por ejemplo, node_modules, .env, build, etc.). Inicializa un repositorio Git, confirma los archivos de tu proyecto y súbelos a un repositorio remoto (por ejemplo, en GitHub).

Text


6-Despliega tu aplicación en Back4app Containers

Después de crear tu cuenta de Back4app, puedes seguir los pasos listados en la documentación:

En resumen, los contenedores seguirán las instrucciones detalladas en tu Dockerfile y comenzarán a crear tu aplicación.

7-Monitorea el despliegue y aborda posibles errores:

Mantén un ojo en los registros de despliegue y el estado en el panel de control de Contenedores de Back4App. Aborda cualquier error o problema que surja durante el despliegue. En caso de proyectos más complejos, asegúrate de que todos los servicios necesarios (como bases de datos o APIs externas) estén correctamente configurados y accesibles.

8-Solucionando problemas comunes

Los errores comunes de despliegue al ejecutar una aplicación Next.js en los Contenedores de Back4App están listados aquí. Otros posibles errores comunes al desplegar una aplicación Next.js son:

Configuración de puerto incorrecta

Las aplicaciones Next.js deben configurarse para ejecutarse en un puerto especificado cuando se despliegan en los Contenedores de Back4App. Si la aplicación aún no es accesible, verifica el Dockerfile para asegurarte de que el puerto correcto esté expuesto (por ejemplo, EXPOSE 3000 para el puerto 3000).

Dependencias incompatibles o faltantes

Asegúrate de que todas las dependencias requeridas estén listadas en el archivo package.json y que sus versiones sean compatibles entre sí y con el código de tu aplicación. Las dependencias faltantes o incompatibles pueden provocar errores en tiempo de ejecución.

Variables de entorno o configuración no válidas

Verifica si tu aplicación depende de variables de entorno específicas o archivos de configuración, y asegúrate de que estén configurados correctamente en el entorno de Back4App Containers. Establece cualquier variable de entorno necesaria en tu Dockerfile utilizando el comando ENV.

Caídas de la aplicación o excepciones no controladas

Excepciones no controladas o caídas en el código de tu aplicación Next.js pueden causar fallos en el despliegue o comportamientos inesperados. Examina los registros de tu aplicación en busca de mensajes de error y aborda cualquier problema en tu código. Verifica los registros del contenedor ejecutando docker logs your-app-name para ver si hay errores o excepciones que se estén lanzando. Utiliza una herramienta como Sentry para rastrear y monitorear errores en tu aplicación.

Configuración de renderizado del lado del servidor

Si tu aplicación Next.js utiliza renderizado del lado del servidor (SSR), asegúrate de que tu configuración de SSR esté correctamente configurada en tu Dockerfile y que inicie tu aplicación utilizando el punto de entrada correcto.

9-Escala tu aplicación

Para proyectos más complejos que requieren recursos adicionales o escalado horizontal/vertical, considera actualizar tu plan de Back4app Containers para manejar el aumento de tráfico y carga.

10-Aplicación de muestra

Para un proyecto de aplicación Next.js de muestra, puedes ir a: https://github.com/templates-back4app/containers-nextjs-sample