# Prueba tu despliegue de Next.js


## Prerrequisitos

Antes de comenzar, asegúrate de haber completado lo siguiente:
- Completa todas las secciones anteriores de esta guía, comenzando con [Contenerizar una aplicación Next.js](/guides/nextjs/deploy/containerize/).
- [Activa Kubernetes](/desktop/use-desktop/kubernetes/#enable-kubernetes) en Docker Desktop.

> **¿Eres nuevo en Kubernetes?**  
> Visita el [tutorial de conceptos básicos de Kubernetes](https://kubernetes.io/docs/tutorials/kubernetes-basics/) para familiarizarte con el funcionamiento de los clústeres, pods, despliegues (deployments) y servicios.

---

## Descripción general

Esta sección te guía a través del despliegue de tu aplicación Next.js contenerizada de forma local usando [el Kubernetes integrado de Docker Desktop](/desktop/kubernetes/). Ejecutar tu aplicación en un clúster de Kubernetes local te permite simular de cerca un entorno de producción real, lo que te permite probar, validar y depurar tus cargas de trabajo con confianza antes de promoverlas a entornos de pruebas (staging) o producción.

---

## Crear un archivo YAML de Kubernetes

Sigue estos pasos para definir tu configuración de despliegue:

1. En la raíz de tu proyecto, crea un nuevo archivo llamado: `nextjs-sample-kubernetes.yaml`

2. Abre el archivo en tu IDE o editor de texto preferido.

3. Agrega la siguiente configuración y asegúrate de reemplazar `{DOCKER_USERNAME}` y `{DOCKERHUB_PROJECT_NAME}` con tu nombre de usuario de Docker Hub y el nombre del repositorio reales de la sección anterior [Automatiza tus construcciones con GitHub Actions](/guides/nextjs/deploy/configure-github-actions/).

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nextjs-sample
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nextjs-sample
  template:
    metadata:
      labels:
        app: nextjs-sample
    spec:
      containers:
        - name: nextjs-container
          image: {DOCKER_USERNAME}/{DOCKERHUB_PROJECT_NAME}:latest
          imagePullPolicy: Always
          ports:
            - containerPort: 3000
          env:
            - name: NODE_ENV
              value: "production"
            - name: HOSTNAME
              value: "0.0.0.0"
---
apiVersion: v1
kind: Service
metadata:
  name:  nextjs-sample-service
  namespace: default
spec:
  type: NodePort
  selector:
    app:  nextjs-sample
  ports:
    - port: 3000
      targetPort: 3000
      nodePort: 30001
```

Este manifiesto define dos recursos clave de Kubernetes, separados por `---`:

- Deployment  
  Despliega una única réplica de tu aplicación Next.js dentro de un pod. El pod utiliza la imagen de Docker construida y subida por tu flujo de trabajo de CI/CD de GitHub Actions  
  (consulta [Automatiza tus construcciones con GitHub Actions](/guides/nextjs/deploy/configure-github-actions/)).  
  El contenedor escucha en el puerto `3000`, que es el puerto predeterminado para las aplicaciones Next.js.

- Service (NodePort)  
  Expone el pod desplegado a tu máquina local.  
  Reenvía el tráfico desde el puerto `30001` de tu host al puerto `3000` dentro del contenedor.  
  Esto te permite acceder a la aplicación en tu navegador en [http://localhost:30001](http://localhost:30001).

> [!NOTE]
> Para aprender más sobre los objetos de Kubernetes, consulta la [documentación de Kubernetes](https://kubernetes.io/docs/home/).

---

## Desplegar y comprobar tu aplicación

Sigue estos pasos para desplegar tu aplicación Next.js contenerizada en un clúster de Kubernetes local y verificar que se esté ejecutando correctamente.

### Paso 1. Aplicar la configuración de Kubernetes

En tu terminal, navega al directorio donde se encuentra tu archivo `nextjs-sample-kubernetes.yaml`, luego despliega los recursos usando:

```console
  $ kubectl apply -f nextjs-sample-kubernetes.yaml
```

Si todo está configurado correctamente, verás la confirmación de que tanto el Deployment como el Service fueron creados:

```shell
  deployment.apps/nextjs-sample created
  service/nextjs-sample-service created
```
   
Esta salida significa que tanto el Deployment como el Service se crearon con éxito y ahora se están ejecutando dentro de tu clúster local.

### Paso 2. Comprobar el estado del despliegue

Ejecuta el siguiente comando para verificar el estado de tu despliegue:
   
```console
  $ kubectl get deployments
```

Deberías ver una salida similar a:

```shell
  NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
  nextjs-sample        1/1     1            1           14s
```

Esto confirma que tu pod está en funcionamiento con una réplica disponible.

### Paso 3. Verificar la exposición del servicio

Comprueba si el servicio NodePort está exponiendo tu aplicación a tu máquina local:

```console
$ kubectl get services
```

Deberías ver algo como:

```shell
NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
nextjs-sample-service    NodePort    10.100.244.65    <none>        3000:30001/TCP   1m
```

Esta salida confirma que tu aplicación está disponible a través de NodePort en el puerto 30001.

### Paso 4. Acceder a tu aplicación en el navegador

Abre tu navegador y navega a [http://localhost:30001](http://localhost:30001).

Deberías ver tu aplicación de ejemplo Next.js lista para producción ejecutándose, servida por tu clúster de Kubernetes local.

### Paso 5. Limpiar los recursos de Kubernetes

Una vez que hayas terminado las pruebas, puedes eliminar el despliegue y el servicio usando:

```console
  $ kubectl delete -f nextjs-sample-kubernetes.yaml
```

Salida esperada:

```shell
  deployment.apps "nextjs-sample" deleted
  service "nextjs-sample-service" deleted
```

Esto asegura que tu clúster se mantenga limpio y listo para el próximo despliegue.
   
---

## Resumen

En esta sección, aprendiste a desplegar tu aplicación Next.js en un clúster de Kubernetes local usando Docker Desktop. Esta configuración te permite probar y depurar tu aplicación contenerizada en un entorno similar al de producción antes de desplegarla en la nube.

Lo que lograste:

- Creaste un Deployment y un Service NodePort de Kubernetes para tu aplicación Next.js  
- Usaste `kubectl apply` para desplegar la aplicación de forma local  
- Verificaste que la aplicación se estuviera ejecutando y estuviera accesible en `http://localhost:30001`  
- Limpiaste tus recursos de Kubernetes después de las pruebas  

---

## Recursos relacionados

Explora las referencias oficiales y las mejores prácticas para perfeccionar tu flujo de trabajo de despliegue en Kubernetes:

- [Documentación de Kubernetes](https://kubernetes.io/docs/home/) – Aprende sobre conceptos clave, cargas de trabajo, servicios y más.  
- [Desplegar en Kubernetes con Docker Desktop](/desktop/use-desktop/kubernetes/) – Usa el soporte de Kubernetes integrado en Docker Desktop para pruebas y desarrollo locales.
- [Referencia de CLI de `kubectl`](https://kubernetes.io/docs/reference/kubectl/) – Gestiona clústeres de Kubernetes desde la línea de comandos.  
- [Recurso Deployment de Kubernetes](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) – Comprende cómo gestionar y escalar aplicaciones utilizando Deployments.  
- [Recurso Service de Kubernetes](https://kubernetes.io/docs/concepts/services-networking/service/) – Aprende cómo exponer tu aplicación al tráfico interno y externo.

