Hexo Webhook Auto-Deployment
Что такое Hexo?
Hexo — это быстрый, простой и эффективный фреймворк для блогов. Hexo использует Markdown (или другие языки разметки) для разбора статей и в течение нескольких секунд генерирует статические веб-страницы с красивыми темами.
Соответствующая среда этой статьи:
- Сервер с публичным IP
- Платформа Git для хостинга сайта, сгенерированного Hexo (Github или собственный Git-репозиторий)
- Локально запущенный Hexo
Если у вас нет сервера с публичным IP, вы можете пропустить раздел Настройка сервера и использовать такие платформы, как Github Pages. Однако раздел Локальная настройка остается тем же.
Схема построения сайта в этой статье:
- Пишем статьи локально, после чего собираем сайт через hexo и пушим его в репозиторий GitHub с помощью git push. После завершения push’а GitHub отправляет уведомление через webhook на мой публичный сервер, который автоматически клонирует сайт в каталог, обслуживаемый nginx в качестве обратного прокси.
На стороне сервера автоматизация получения webhook-уведомлений и клонирования выполняется с помощью контейнера
neurocoda/gitrigger:latest.
Настройка Git-платформы
Создайте репозиторий.
Локальная настройка
Установка Node.js
Инструкции по установке для разных систем: https://hexo.io/zh-cn/docs/
У меня локально Ubuntu:
Согласно: 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 nodejsПроверка установки:
node -vУстановка Hexo-cli
npm install -g hexo-cliСоздание репозитория Hexo
hexo init <folder>cd <folder>npm installНастройка Git
Создание SSH-ключа:
ssh-keygenПолучение открытого ключа:
cat /root/.ssh/id_ed25519.pub
Добавьте полученный открытый ключ на выбранную вами Git-платформу
Github: https://github.com/settings/keys

Добавление Git в Hexo
В корневой директории Hexo:
Установка плагина:
npm install hexo-deployer-git --savevim _config.ymlНайдите внизу и добавьте информацию о репозитории:
# Deployment## Docs: https://hexo.io/docs/one-command-deploymentdeploy: type: git branch: mainНастройка сервера
Настройка брандмауэра
Открытие портов брандмауэра:
ufw allow 22ufw allow 80ufw allow 443Включение и проверка статуса брандмауэра:
ufw enableufw status
Установка Nginx, Docker
Обновление источников:
apt updateapt upgrade -yУстановка docker-compose, nginx, python3-certbot-nginx:
apt install docker-compose nginx certbot python3-certbot-nginxПроверьте, что nginx работает корректно:
systemctl status nginx
Настройка SSH-ключей
Если ваш репозиторий приватный, необходимо настроить SSH-ключи:
Создание SSH-ключа:
ssh-keygenПолучение открытого ключа:
cat /root/.ssh/id_ed25519.pub
Добавьте полученный открытый ключ на выбранную вами Git-платформу
Github: https://github.com/settings/keys

Настройка Webhook
Настройка webhook в репозитории:

Запуск службы
Создание docker-compose.yml:
vim docker-compose.ymlВставьте следующее содержимое:
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_dataВыполните команду up в каталоге с docker-compose.yml:
docker-compose up -dПросмотр статуса контейнера:
docker ps -a
Статус Up означает, что контейнер работает корректно. (Здесь у меня есть и другие службы, поэтому вид может отличаться.)
Просмотр логов контейнера:
docker logs hexo
Настройка обратного прокси
Редактирование nginx.conf:
vim /etc/nginx/nginx.confДобавление обратного прокси:
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;# }# }После изменения конфигурации проверьте синтаксис:
nginx -t
Перезагрузка конфигурации nginx:
systemctl reload nginxУбедитесь, что DNS-записи настроены правильно:

Настройка SSL
Настройка SSL:
certbot --nginxВведите запрашиваемую информацию

Проверьте синтаксис nginx.conf после изменений от certbot:
nginx -tПерезагрузка конфигурации nginx
systemctl reload nginxТестирование синхронизации
В локальной директории Hexo:
hexo clean & hexo g & hexo dПосле завершения выполнения откройте ваш сервер — с большой вероятностью веб-страница уже отображается.
Часто задаваемые вопросы
Проблемы с правами доступа
chmod 755 /var/www/sites/Hexochown -R www-data:www-data /var/www/sites/Hexo