Skip to content

Automatización de Despliegues Estáticos

Esta guía documenta el estándar para desplegar sitios web estáticos (como Landing Pages o documentación en HTML puro) en nuestra infraestructura (Gitea + n8n + VPS), utilizando un enfoque de GitOps sin fricciones.

Arquitectura del Flujo

[Desarrollador (Push)] ➔ [Gitea (Webhook)] ➔ [n8n (Orquestador)] ➔ [VPS (SSH Pull)] ➔ [Nginx (Servidor)]

1. Preparación del Servidor (VPS)

Los sitios estáticos se sirven mediante contenedores Nginx que leen los archivos locales mediante un bind mount.

1.1. Crear el entorno Docker

  1. Crea el directorio del proyecto: bash mkdir -p /opt/docker/nombre-proyecto/html
  2. Asigna la propiedad a tu usuario: bash sudo chown -R sysadmin:sysadmin /opt/docker/nombre-proyecto
  3. Crea el archivo docker-compose.yml:

yaml services: web: image: nginx:alpine container_name: web_proyecto restart: unless-stopped volumes: - ./html:/usr/share/nginx/html:ro networks: - proxy_network

  1. Levanta el contenedor: bash docker compose up -d

Nota: Recuerda configurar el Reverse Proxy (NPM) apuntando al contenedor web_proyecto en el puerto 80.

1.2. Inicializar Git localmente

Dentro de la carpeta html, inicializa el repositorio:

cd /opt/docker/nombre-proyecto/html
git init
git remote add origin ssh://git@git.farlier.org:2222/usuario/nombre-proyecto.git

2. Configuración de Seguridad (Claves de Despliegue)

CRÍTICO: Nunca usar llaves de usuario global para automatizaciones. Usar siempre Deploy Keys.

2.1. Generar la llave en el VPS (Sin contraseña)

ssh-keygen -t ed25519 -f ~/.ssh/deploy_nombre_proyecto -N ""

2.2. Autorizar en Gitea

  1. Ve al repositorio en Gitea > Configuración > Claves de despliegue.
  2. Añade la llave pública (cat ~/.ssh/deploy_nombre_proyecto.pub).
  3. Asegúrate de NO marcar la opción de acceso de escritura.

3. Automatización en n8n

El despliegue se ejecuta mediante un flujo simple de dos nodos.

3.1. Nodo 1: Webhook (Trigger)

  • Método: POST
  • Ruta: deploy-nombre-proyecto
  • Acción: Copia la Production URL

3.2. Nodo 2: SSH (Ejecución)

  • Credenciales: Usa la llave RSA (n8n_access) configurada previamente para que n8n entre al VPS.

Comando "Blindado"

Para evitar problemas con entornos no interactivos, la llave de despliegue se inyecta directamente en la variable de entorno de Git:

cd /opt/docker/nombre-proyecto/html && GIT_SSH_COMMAND="ssh -i /home/sysadmin/.ssh/deploy_nombre_proyecto -p 2222 -o IdentitiesOnly=yes -o StrictHostKeyChecking=accept-new" git pull origin main

4. Conexión Final en Gitea

  1. Ve al repositorio en Gitea > Configuración > Webhooks.
  2. Añade un Webhook tipo Gitea.
  3. Pega la Production URL de n8n.
  4. Selecciona el evento Push (opcionalmente filtrado a la rama main).
  5. Guarda y prueba.

¡El despliegue automático está configurado!