Hexo Webhook Auto-Deployment
¿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:latestautomatiza 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
curl -fsSL https://deb.nodesource.com/setup_23.x -o nodesource_setup.shsudo -E bash nodesource_setup.shsudo apt-get install -y nodejsVerificar la instalación:
node -vInstalar Hexo-cli
npm install -g hexo-cliCrear el repositorio Hexo
hexo init <folder>cd <folder>npm installConfigurar Git
Crear una clave ssh:
ssh-keygenObtener la clave pública:
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:
npm install hexo-deployer-git --savevim _config.ymlAl final, encontrar y agregar la información del repositorio:
# Deployment## Docs: https://hexo.io/docs/one-command-deploymentdeploy: type: git branch: mainConfiguración del servidor
Configuración del firewall
Abrir el firewall:
ufw allow 22ufw allow 80ufw allow 443Habilitar y ver el estado del firewall:
ufw enableufw status
Instalar Nginx, Docker
Actualizar fuentes:
apt updateapt upgrade -yInstalar docker-compose, nginx, python3-certbot-nginx:
apt install docker-compose nginx certbot python3-certbot-nginxAsegurarse de que nginx se esté ejecutando correctamente:
systemctl status nginx
Configurar clave SSH
Si tu repositorio es privado, necesitas configurar la clave ssh:
Crear una clave ssh:
ssh-keygenObtener la clave pública:
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:
vim docker-compose.ymlRellenar 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: volumes: - /root/.ssh/id_ed25519:/root/.ssh/id_rsa:ro - /var/www/sites:/clone_dataEjecutar el comando up en el directorio donde se encuentra docker-compose.yml:
docker-compose up -dVer el estado del contenedor:
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:
docker logs hexo
Configurar proxy inverso
Editar nginx.conf:
vim /etc/nginx/nginx.confAgregar 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:
nginx -t
Recargar la configuración de nginx:
systemctl reload nginxAsegurarse de que los registros DNS estén configurados correctamente:

Configurar SSL
Configurar SSL:
certbot --nginxIngresar la información solicitada

Verificar que la sintaxis del nginx.conf modificado por certbot sea correcta:
nginx -tRecargar la configuración de nginx
systemctl reload nginxPrueba de sincronización
En el directorio local de Hexo:
hexo clean & hexo g & hexo dDespué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
chmod 755 /var/www/sites/Hexochown -R www-data:www-data /var/www/sites/Hexo