Logo Neurocoda

Hexo Webhook Auto-Deployment

Neurocoda
Neurocoda
2026-07-03 12:52:33 510 Words 3 Mins ...

¿Qué es Hexo?

Hexo es un framework de blogs rápido, conciso y eficiente. Hexo utiliza Markdown (u otros lenguajes de marcado) para analizar artículos y, en segundos, generar páginas web estáticas con atractivos temas.

Entorno correspondiente a este artículo:

  • Un servidor público
  • Una plataforma Git que aloje el sitio generado por Hexo (Github o repositorio Git propio)
  • Capacidad de ejecutar Hexo localmente

Si no tienes un servidor público, puedes omitir la parte de Configuración del servidor de este artículo y utilizar otros servicios como Github Pages. Sin embargo, la parte de Configuración local es la misma.

Esquema de construcción del sitio adoptado en este artículo:

  • Escribir artículos localmente, luego de escribirlos construir el sitio con hexo y subir el sitio mediante git push al repositorio de github. Cuando finalice el push, github enviará una notificación a mi servidor público a través de un webhook. Mi servidor público, al recibir la notificación, clonará automáticamente el sitio en el directorio del sitio servido por el proxy inverso de Nginx.

En el lado del servidor público, el contenedor neurocoda/gitrigger:latest automatiza la recepción de la notificación del webhook y el trabajo de clonación del repositorio.

Configuración de la plataforma Git

Crea un repositorio de código.

Configuración local

Instalar Nodejs

Consulta la documentación oficial para los métodos de instalación en varios sistemas: https://hexo.io/zh-cn/docs/

Yo uso Ubuntu localmente:
Según: https://github.com/nodesource/distributions

Terminal window
curl -fsSL https://deb.nodesource.com/setup_23.x -o nodesource_setup.sh
sudo -E bash nodesource_setup.sh
sudo apt-get install -y nodejs

Verificar la instalación:

Terminal window
node -v

Instalar Hexo-cli

Terminal window
npm install -g hexo-cli

Crear el repositorio Hexo

Terminal window
hexo init <folder>
cd <folder>
npm install

Configurar Git

Crear una clave ssh:

Terminal window
ssh-keygen

Obtener la clave pública:

Terminal window
cat /root/.ssh/id_ed25519.pub

Agregar la clave pública obtenida a la plataforma Git que hayas elegido

Github: https://github.com/settings/keys

Agregar Git a Hexo

En el directorio raíz de Hexo:

Instalar el plugin:

Terminal window
npm install hexo-deployer-git --save
Terminal window
vim _config.yml

Al final, encontrar y agregar la información del repositorio:

# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
type: git
repo: [email protected]:neurocoda/Hexo.git
branch: main

Configuración del servidor

Configuración del firewall

Abrir el firewall:

Terminal window
ufw allow 22
ufw allow 80
ufw allow 443

Habilitar y ver el estado del firewall:

Terminal window
ufw enable
ufw status

Instalar Nginx, Docker

Actualizar fuentes:

Terminal window
apt update
apt upgrade -y

Instalar docker-compose, nginx, python3-certbot-nginx:

Terminal window
apt install docker-compose nginx certbot python3-certbot-nginx

Asegurarse de que nginx se esté ejecutando correctamente:

Terminal window
systemctl status nginx

Configurar clave SSH

Si tu repositorio es privado, necesitas configurar la clave ssh:

Crear una clave ssh:

Terminal window
ssh-keygen

Obtener la clave pública:

Terminal window
cat /root/.ssh/id_ed25519.pub

Agregar la clave pública obtenida a la plataforma Git que hayas elegido

Github: https://github.com/settings/keys

Configurar Webhook

Configurar el webhook en el repositorio:

Iniciar el servicio

Escribir docker-compose.yml:

Terminal window
vim docker-compose.yml

Rellenar con el siguiente contenido:

version: '3.8'
services:
hexo:
image: neurocoda/gitrigger:latest
container_name: hexo
restart: unless-stopped
ports:
- "127.0.0.1:7890:5000"
environment:
REPO_URL: "[email protected]:neurocoda/Hexo.git"
volumes:
- /root/.ssh/id_ed25519:/root/.ssh/id_rsa:ro
- /var/www/sites:/clone_data

Ejecutar el comando up en el directorio donde se encuentra docker-compose.yml:

Terminal window
docker-compose up -d

Ver el estado del contenedor:

Terminal window
docker ps -a

El estado Up significa que el contenedor se está ejecutando correctamente. (Aquí tengo otros servicios, por lo que puede verse diferente)

Ver los registros del contenedor:

Terminal window
docker logs hexo

Configurar proxy inverso

Editar nginx.conf:

Terminal window
vim /etc/nginx/nginx.conf

Agregar el proxy inverso:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# My Server
##
server {
server_name neurocoda.com;
root /var/www/sites/Hexo;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~* \.(?:css|js|jpg|jpeg|png|gif|ico|svg|webp)$ {
try_files $uri =404;
expires 30d;
add_header Cache-Control "public";
}
error_page 404 /404.html;
location = /404.html {
root /var/www/sites/hexo;
}
}
server {
listen 80;
server_name webhook.neurocoda.com;
location / {
proxy_pass http://127.0.0.1:7890;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
# mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
# }

Después de modificar la configuración, verificar si la sintaxis es correcta:

Terminal window
nginx -t

Recargar la configuración de nginx:

Terminal window
systemctl reload nginx

Asegurarse de que los registros DNS estén configurados correctamente:

Configurar SSL

Configurar SSL:

Terminal window
certbot --nginx

Ingresar la información solicitada

Verificar que la sintaxis del nginx.conf modificado por certbot sea correcta:

Terminal window
nginx -t

Recargar la configuración de nginx

Terminal window
systemctl reload nginx

Prueba de sincronización

En el directorio local de Hexo:

Terminal window
hexo clean & hexo g & hexo d

Después de que termine la ejecución, accede a tu servidor. ¡Sin problemas, la página web ya debería estar visible!

Problemas comunes

Problema de permisos

Terminal window
chmod 755 /var/www/sites/Hexo
chown -R www-data:www-data /var/www/sites/Hexo
Title: Hexo Webhook Auto-Deployment Author: Neurocoda Created at: 2026-07-03 12:52:33 Link: https://neurocoda.com/es/posts/hexo-webhook-auto-deployment-es/ License: This work is licensed under CC BY-ND 4.0.

Comments