Crear y publicar una SPA desde cero con Next.js, React y GitLab

logo

Guía completa paso a paso para crear una Single-Page Application con Node.js, Next.js y React y publicarlo utilizando GitLab

Primeros Pasos. Instalaciones inciales

Instalar Node.js

Para empezar, tenemos que instalar varias cosas en local, como son Node.js y Git para Windows. Node.js es un entorno de ejecución de JavaScript del lado del servidor. Permite ejecutar JavaScript fuera de un navegador web. Es la base de todo proyecto Angular o React, es el backend. Git para Windows nos va a ayudar a ejecutar la aplicación en local y a subir los archivos a un repositorio Git en GitLab.

Descarga e instala la última versión de node.js

Instalar Git Windows

Descarga git para Windows

Stand alone, lo normal es que sea el de 64b. La instalación pide bastantes cosas, dejar todo por defecto.

Creación del proyecto Next.js & React

Una vez instalado node, vamos a crear el frontend. Nos situamos dentro de un directorio, por ejemplo ProyectosWeb, abrimos terminal bash (botón derecho) y ejecutamos:

npx create-next-app@latest next-react-app
Installing Next.js and React

Las instalación de los siguientes elementos es opcional, un breve comentario sobre ellos

  1. TypeScript: es un lenguaje basado en javascript que amplía su sintaxis, es el que usa por ejemplo Angular.
  2. ESLint: es un corrector de código.
  3. Tailwind CSS: es un framework de CSS que tiene clases específicas para casa elemento, por ejemplo, para los textos, para el color, etc.
  4. src directory: para anidad el directorio app en el directorio src clásico.
  5. App router:enrutador de páginas en Next.js, cada página se guarda dentro de una carpeta en /app, por ejemplo /app/home, /app/user, etc
  6. Turbopack: es un paquete de compilación incremental que está integrado en Next.js. Agiliza el desarrollo y las compilaciones locales, especialmente para aplicaciones grandes.
  7. Customize import alias, para añadir un simbólo preferido a los import.

Entramos a la carpeta que se ha creado. Si hacemos un:

npm run dev

Compila nuestra primera página y la muestra en el navegador en http://localhost:3000/



GitLab - Cuenta, repositorio y primera subida

Si no tenéis cuenta en gitlab, cread una, es gratis.

GitLab

Todos los proyectos van a colgar del usuario, un ejemplo.

Ejemplo de cuenta y proyecto en GitLab

Vamos al Homepage, icono de GitLab y creamos un nuevo proyecto: Create project - blank. Poner nombre, marcar "public" y desmarcar "Initialize repository with a README", el resto, por defecto. Con esto, tenemos creado el proyecto.


Dos consideraciones sobre Git:

Vamos a la página principal del proyecto, boton "code", y lo copiamos el que corresponda, yo he elegido "clone with https". Vamos a la ruta de nuestro proyecto en Windows con la consola git bash. Ejecutamos en orden la lista de instrucciones elegida según lo comentado más arriba. En nuestro casó será "Push an existing folder".


Git connection options

Configuración previa al despliegue

Esta parte es la más tediosa pero sólo requiere hacerse una vez. Vayamos por partes.

  1. Datos del hosting.
  2. General clave ssh en local.
  3. Agregar clave pública al dominio.
  4. Generar cadena para GitLab.
  5. Crear variables en GitLab.

1. Datos del hosting

Necesitaremos la IP, el puerto y el nombre de usuario, estos datos se pueden encontrar dentro del hosting en Sitios web, elegir el sitio, panel, menu, avanzado, acceso SSH, variará en función del proveedor del hosting.

2. General clave ssh en local

Recomiendo crear una carpeta para las claves ssh en la carpeta de proyectos web, entramos al directorio creado y ejecutamos:

ssh-keygen -t rsa -b puerto -f nombre_usuario

Se generan dos claves, una .pub, es la pública y una sin extesión, es la privada.

3. Agregar clave pública al dominio

Copiamos la clave pública recien creada y vamos al hosting, ruta descrita anteriormente y agregamos una nueva clave ssh. Pide nombre y valor, poner un nombre descriptivo y pegar el valor que tenemos copiado.

4. Generar cadena para GitLab

El el siguiente apartado crearemos la variables en GitLab necesarias para desplegar al hosting, una de ellas necesita ser generada en local de la siguiente forma:

ssh-keyscan -p puerto IP

Se genera el archivo ..._keyscan.

5. Crear variables en GitLab

Vamos a GitLab - nuestro proyecto - settings - CI/CD - Variables. Se tiene que ver así:

Git variables

Crearemos una como ejemplo, el resto igual, cambiando la clave - valor que corresponda. Pulsamos en "Add variable" y vamos rellenando:

  1. Type: Variable (default)
  2. Environments: All (default)
  3. Visibility: Visible
  4. Flags: marcar sólo "Expands..."
  5. Description: es opcional, si se quiere, poner para qué sirve la variable.
  6. Key: es el nombre de la variable, ponerlos tal cual se ve en la imagen anterior.
  7. Value: es el valor de la variable. SSH_HOST_IP, SSH_PORT y SSH_USER son los valores del hosting vistos en el apartado 1 de esta sección. SSH_PRIVATE_KEY la hemos generado en el apartado 2. SSH_HOST_KEY es el valor que acabamos de generar en el apartado 4. Por último SSH_TARGET_DIR es la ruta de despliegue en nuestro hosting, normalmente será algo como "public_html/nombre-aplicación". Ejemplo para este proyecto "public_html/next-react-app". Si va a ir en una subcarpeta del raiz del hosting, que es public_html, poner ese nombre de carpeta en la ruta, por ejemplo: "public_html/primer-proyecto/next-react-app"


Desplegar en hosting y dominio

Una vez tenemos el código y las configuraciones previas, vamos al paso final, desplegar nuestra SPA en un hosting para que esté accesible al público en internet.

Esto lo vamos a realizar mediante un archivo yaml en el raíz de nuestro proyecto. Aquí ya vamos a trabajar desde GitLab. Puede hacerse de varias formas, veremos cómo se hace con el GitLab IDE.

Antes que nada, tenemos que subir el código que hemos estado editando en local. Vamos a la carpeta, abrimos terminal git bash y hacemos:

git add .git commit -m "mensaje para esta subida"git push origin main

Normalmente en GitLab será la rama main, si es otra, poner el nombre que corresponda.

Vamos a GitLab, entramos en nuestro proyecto, en el boton code pulsamos en Open with Web IDE, se abre otra pestaña con un IDE online, ahí está nuestro código y podremos editarlo. Añadimos un archivo ".gitlab-ci.yml", poner el nombre tal cual, este archivo va a configurar el pipelines necesario para desplegar. La explicación del pipeline escapa del objetivo de este tutorial, sólo comentar que es el mecanismo que va a compilar, testear y desplegar nuestró código, todo ello de forma automática.

GitLab Web IDE

Contenido del archivo .gitlab-ci.yml:

Descarga txt con el código de .gitlab-ci.yml

Breve explicación del código: el pipeline utiliza una imagen docker para correr node, el backend, al igual que en local. Tenemos dos etapas, primero compilamos con build y luego desplegamos con deploy. El build instala lo necesario y compila el código generando los artefactos preparados para su depliegue en la carpeta out. Después para el despliegue en un hosting necesitamos más cosas: instalar rsync (herramienta que sube los archivos al hosting), configurar un agente ssh (protocolo que permita la conexión entre servidores, necesita esas variables), mover los artefactos de out a public para que sean visibles en destino y realizar la sincronización con el hosting con ese comando de rsync y esas variables.