Гид по технологиям

Установка и запуск Hexo на Ubuntu 20.04

• 10 min read • Руководство • Обновлено 24 Nov 2025
Hexo на Ubuntu 20.04 — установка и запуск
Hexo на Ubuntu 20.04 — установка и запуск

Иллюстрация Hexo: логотип и пример статического сайта

Hexo — это статический генератор блогов на базе Node.js. Hexo позволяет писать записи в Markdown; при генерации Markdown конвертируется в статические HTML-файлы с использованием заданной темы.

Почему Hexo отличается от традиционных движков, например WordPress: WordPress формирует страницы динамически, исполняя PHP при каждом запросе, тогда как Hexo генерирует статические файлы заранее. Статические сайты обычно безопаснее, проще в обслуживании и быстрее при доставке через CDN.

В этом руководстве вы пройдёте все шаги: от подготовки сервера до рабочего публичного сайта, включая примеры команд, конфигурации Nginx и автоматического обновления SSL.

Для кого это руководство

  • Системные администраторы и разработчики, которые хотят быстро поднять статический блог.
  • Люди, желающие заменить динамическую CMS статическим сайтом для повышения безопасности и производительности.

Ключевые термины в одну строку:

  • Hexo: статический генератор сайтов на Node.js.
  • Hexo CLI: утилита командной строки для создания и управления блогом.
  • Netlify: платформа для статических сайтов с автоматическим SSL.

Содержание (кратко)

  • Предварительные требования
  • Настройка брандмауэра
  • Установка Node.js и Hexo
  • Настройка Hexo, тема и публикация поста
  • Установка плагина и тестовый сервер
  • Генерация статических файлов и конфигурация Nginx
  • Установка SSL через Let’s Encrypt
  • Обновление Hexo и развёртывание (Netlify и альтернативы)
  • Чек-листы, безопасность, отладка, критерии приёмки

Предварительные требования

  1. Сервер на Ubuntu 20.04 с учетной записью не-root, имеющей sudo-привилегии.
  2. Установленный Git. Если Git ещё не установлен, выполните:
$ sudo apt install git
$ git config --global user.name 'Your Name'
$ git config --global user.email '[email protected]'
  1. Аккаунт на GitHub (или другой Git-платформе) для хранения своих тем/резервных копий.

Важно: используйте сильный пароль и по возможности подключите двухфакторную аутентификацию для аккаунтов (GitHub/Netlify).

Настройка брандмауэра

Ubuntu 20.04 поставляется с Uncomplicated Firewall (UFW). Если он отсутствует, установите его:

$ sudo apt install ufw

Разрешите SSH (рекомендуется делать это до включения брандмауэра, иначе вы рискуете потерять доступ):

$ sudo ufw allow 'OpenSSH'

Включите UFW:

$ sudo ufw enable

Разрешите порт 4000, который использует тестовый сервер Hexo:

$ sudo ufw allow 4000

Откройте порты HTTP и HTTPS, которые понадобятся позже для Nginx/Let’s Encrypt:

$ sudo ufw allow http
$ sudo ufw allow https

Проверьте статус брандмауэра:

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
4000                       ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
4000 (v6)                  ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Важно: убедитесь, что ваши правила UFW соответствуют политике безопасности вашей организации. Если сервер находится за облачным балансировщиком, проверьте дополнительные правила у провайдера.

Установка Node.js

Hexo работает поверх Node.js, поэтому сначала добавим репозиторий NodeSource для стабильной ветки Node 14 (LTS на момент написания):

$ curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
$ sudo apt-get install nodejs

Проверьте версию Node.js:

$ node --version
v14.15.0

Замечание: при обновлении Hexo и плагинов иногда требуется более новая версия Node.js. Если вы работаете над долгосрочным проектом, проверьте совместимость темы и плагинов с вашей версией Node.

Установка Hexo CLI и подготовка директории сайта

Установите глобально hexo-cli:

$ sudo npm install hexo-cli -g

Создайте рабочую директорию и задайте права:

$ sudo mkdir -p /var/www/hexo
$ sudo chown -R $USER:$USER /var/www/hexo
$ sudo chmod -R 755 /var/www/hexo
$ cd /var/www/hexo

Инициализируйте проект Hexo:

$ hexo init
INFO  Cloning hexo-starter https://github.com/hexojs/hexo-starter.git
INFO  Install dependencies
... (npm install лог)
INFO  Start blogging with Hexo!

Установите зависимости (если hexo init не сделал этого автоматически):

$ npm install

Проверьте структуру директории:

$ ls
_config.yml  node_modules  package-lock.json  package.json  scaffolds  source  themes

Короткая справка по ключевым папкам:

  • _config.yml — главный конфигурационный файл Hexo.
  • node_modules — зависимости проекта.
  • source — содержимое сайта (публикуемые страницы и медиа).
  • source/_posts и source/_drafts — папки для постов.
  • themes — темы оформления.

Конфигурация Hexo

Откройте основной файл конфигурации:

$ nano _config.yml

Найдите секцию Site и отредактируйте основные параметры:

# Site
title: Hexo
subtitle: ''
description: ''
keywords:
author: John Doe
language: en
timezone: ''

Рекомендации:

  • title — название вашего сайта.
  • description и keywords помогут при SEO и при импорте метаданных в некоторые темы.
  • language и timezone установите в соответствии с регионом.

Проверьте секцию URL и permalink, чтобы корректно настроить структуру ссылок:

# URL
url: http://example.com
root: /
permalink: :year/:month/:day/:title/
permalink_defaults:
pretty_urls:
  trailing_index: true
  trailing_html: true

Совет: используйте https:// в значении url, если вы заранее планируете SSL. Для nicer URL отключите trailing_index и trailing_html.

Рекомендация по удобству: установите default_layout: draft и post_asset_folder: true, чтобы новые посты создавались как черновики и имели отдельную папку для медиа-файлов.

Сохраните изменения (Ctrl+X, Y).

Установка темы

По умолчанию Hexo поставляется с темой Landscape. Для более продвинутых возможностей можно установить стороннюю тему из репозитория на GitHub.

Пример: установка темы Next:

$ cd /var/www/hexo
$ git clone https://github.com/theme-next/hexo-theme-next themes/next

Затем в /var/www/hexo/_config.yml замените theme: landscape на:

theme: next

Дополнительные настройки темы хранятся в themes/next/_config.yml.

Важно: после смены темы изучите её документацию — часто требуется установка дополнительных плагинов или секций в конфиге.

Создание и публикация поста

Создадим первый пост:

$ hexo new first-post
INFO  Validating config
INFO  Created: /var/www/hexo/source/_drafts/first-post.md

Откройте файл для редактирования:

$ nano ./source/_drafts/first-post.md

Каждый пост должен содержать front-matter (YAML или JSON) в начале файла. Пример front-matter:

title: Howtoforge's First Post
tags:
  - test
categories:
  - Hexo
comments: true
date: 2020-11-14 00:00:00
---

## Markdown goes here.

This is our first post!

Пример вставки изображения в пост (тег плагина asset_img используется темой):

{% asset_img "example.jpg" "This is an example image" %}

Затем поместите файл example.jpg в папку source/_posts/first-post (или source/_drafts/first-post в зависимости от статуса).

Публикуем пост (перемещаем из drafts в posts):

$ hexo publish first-post
INFO  Validating config
INFO  Published: /var/www/hexo/source/_posts/first-post.md

Пост станет виден после генерации статики или при запуске тестового сервера.

Установка плагина

Hexo имеет сотни плагинов. Все они — npm-пакеты. Для примера установим hexo-filter-nofollow:

$ cd /var/www/hexo
$ npm i hexo-filter-nofollow --save

Добавьте конфигурацию плагина в _config.yml:

nofollow:
  enable: true
  field: site
  exclude:
    - 'exclude1.com'
    - 'exclude2.com'

Опции:

  • enable: включает плагин.
  • field: область применения: site или post.
  • exclude: белый список доменов.

Тестовый сервер Hexo

Hexo включает простой локальный сервер для проверки контента до генерации статики:

$ hexo server

Откройте в браузере http://yourserverIP:4000 — вы увидите стартовую страницу блога.

Главная страница блога Hexo в браузере

Остановить сервер можно комбинацией Ctrl+C в терминале.

Генерация статических файлов

Тестовый сервер показывает сайт в режиме разработки. Чтобы получить готовые файлы для раздачи через Nginx или CDN, сгенерируйте статические файлы:

$ hexo generate

Готовые файлы находятся в /var/www/hexo/public.

Установка и настройка Nginx

Установим Nginx и настроим виртуальный хост для раздачи содержимого из /var/www/hexo/public.

$ sudo apt install nginx
$ sudo nano /etc/nginx/sites-available/hexo.conf

Пример конфигурации (отредактируйте server_name и пути под ваш домен):

server {
    server_name hexo.example.com;

    root /var/www/hexo/public;
    index index.html index.htm;

    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/hexo.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hexo.example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES25>
    ssl_prefer_server_ciphers off;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    
    location / {
        try_files $uri $uri/ =404;
    }
}
server {
    if ($host = hexo.example.com) {
        return 301 https://$host$request_uri;
    }
    server_name hexo.example.com;
    listen 80;
    listen [::]:80;
    return 404;
}

Активируйте конфигурацию:

$ sudo ln -s /etc/nginx/sites-available/hexo.conf /etc/nginx/sites-enabled/

Отредактируйте /etc/nginx/nginx.conf — увеличьте server_names_hash_bucket_size и types_hash_max_size, если Nginx жалуется:

Добавьте перед include /etc/nginx/conf.d/*.conf:

server_names_hash_bucket_size 64;

И обновите types_hash_max_size до 4096:

types_hash_max_size 4096;

Проверка синтаксиса и перезапуск:

$ sudo nginx -t
$ sudo systemctl restart nginx

Совет: используйте systemd timer или watch файлов на предмет изменений конфигурации, если вы часто меняете виртуальные хосты.

Установка SSL через Let’s Encrypt (Certbot)

Установим Certbot, остановим Nginx на время выдачи сертификата, создадим dhparam и настроим автоматическое обновление.

$ sudo apt install certbot
$ sudo systemctl stop nginx
$ sudo certbot certonly --standalone -d hexo.yourdomain.com --preferred-challenges http --agree-tos -n -m [email protected] --keep-until-expiring
$ sudo systemctl start nginx
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Настройка автоматического обновления сертификата в crontab (пример запуска certbot каждый день в 02:25):

$ sudo crontab -e

Добавьте строку:

25 2 * * * /usr/bin/certbot renew --quiet --pre-hook 'systemctl stop nginx' --post-hook 'systemctl start nginx'

Важно: используйте прямые одинарные кавычки в crontab для корректной подстановки команд.

Обновление Hexo

Перейдите в папку проекта:

$ cd /var/www/hexo

При обновлении на мажорную версию Hexo вручную измените package.json, например:

{"hexo": "^5.0.0"}

(Отредактируйте зависимость hexo до нужной версии, затем запустите):

$ npm update

Примечание: всегда делайте резервную копию package.json и package-lock.json перед крупным обновлением.

Развёртывание: Nginx vs. Netlify и другие варианты

Hexo можно раздавать несколькими способами:

  • Nginx/Apache на собственном сервере (как в этом руководстве).
  • Платформы для статических сайтов: Netlify, Vercel — простая интеграция и автоматический SSL.
  • Облачные хранилища + CDN (GitHub Pages, S3 + CloudFront).
  • Контейнеры: собрать и раздавать через Docker.

Пример публикации на Netlify с использованием CLI (быстрый способ развернуть /var/www/hexo/public):

$ sudo npm install netlify-cli -g
$ netlify login
$ cd /var/www/hexo/public
$ netlify deploy
# При проверке, если всё хорошо
$ netlify deploy --prod

Netlify имеет автоматическое управление SSL — если вы используете Netlify, конфигурация Nginx и Certbot не потребуется.

Отладка и часто встречаемые проблемы

  • Проблема: 403/404 при доступе к статическим файлам. Проверьте права файлов и root в конфигурации Nginx.
  • Проблема: тема ломает сборку. Верните package.json и node_modules из резервного состояния, удалите node_modules и выполните npm install.
  • Проблема: Certbot не может получить доступ к порту 80 — убедитесь, что Nginx остановлен или укажите –webroot и укажите корректную папку.

Полезная команда для очистки и повторной генерации:

$ hexo clean
$ hexo generate

Безопасность и жёсткая настройка

  • Обновляйте Ubuntu и пакеты: sudo apt update && sudo apt upgrade.
  • Используйте ограниченные права для файлов сайта, например 755 для директорий и 644 для файлов.
  • Закройте ненужные порты и доступ по SSH только с доверенных IP или через VPN.
  • Если используете Netlify, включите двухфакторную аутентификацию в аккаунте.
  • Периодически проверяйте зависимости npm на уязвимости: npm audit.

Чек-листы (быстрое действие)

Чек-лист для первоначальной настройки сервера:

  • Добавлен и настроен non-root пользователь с sudo.
  • Установлен Git и настроен git config.
  • Настроен UFW и разрешён OpenSSH, http, https, 4000.
  • Установлен Node.js и hexo-cli.
  • Создана папка /var/www/hexo и заданы права.
  • Инициализирован Hexo и установлены зависимости.

Чек-лист перед выходом в продакшн:

  • Сгенерированы статические файлы в public.
  • Nginx настроен и протестирован (nginx -t).
  • Получен SSL сертификат и настроено автоматическое обновление.
  • Проверены права доступа и SELinux/AppArmor политики (если применимо).

Чек-лист обновления Hexo:

  • Сделана резервная копия package.json и source.
  • Обновлены зависимости в тестовом окружении.
  • Прогнан hexo generate и проверена сборка.

Модель принятия решений при выборе способа хостинга

Mermaid-диаграмма выбора способа развёртывания:

flowchart TD
  A[Нужен контролируемый сервер?] -->|Да| B[Использовать Nginx на VPS]
  A -->|Нет| C[Использовать Netlify / Vercel]
  B --> D[Настроить Let's Encrypt]
  C --> E[Настроить CI/CD деплой из Git]
  D --> F[Мониторинг и автообновление сертификата]
  E --> F

Критерии приёмки

  • Сайт доступен по HTTPS и возвращает 200 при запросе главной страницы.
  • Сгенерированные статические файлы находятся в /var/www/hexo/public.
  • После публикации новой записи и вызова hexo generate содержимое обновилось и доступно.
  • Автообновление SSL работает (проверить после симуляции истечения сертификата или вручную вызвать certbot renew –dry-run).

Плейбук: развёртывание и откат

Плейбук для развёртывания:

  1. На локальной машине: git pull; hexo generate.
  2. Скопировать public на сервер (rsync/scp) или запустить CI, который пушит в Netlify.
  3. На сервере: sudo systemctl reload nginx.
  4. Проверить страницу и логи /var/log/nginx/error.log.

Откат:

  1. Если новая версия сломала сайт, восстановите public из резервной копии.
  2. sudo systemctl reload nginx.
  3. Если проблема в зависимости — восстановите package-lock.json и node_modules и перезапустите сборку.

Тесты и критерии приёмки (коротко)

  • Open http://localhost:4000 и проверить, что тестовый сервер отвечает.
  • Проверить, что все статические ресурсы (css/js/images) возвращают код 200.
  • Проверить корректную работу плагина nofollow при включённой опции.

Совместимость и миграционные заметки

  • Если у вас старая версия Hexo (v3/v4), перед обновлением на мажорную версию внимательно читайте changelog темы и плагинов.
  • При переходе между версиями Node используйте nvm для тестирования: nvm install && nvm use .

Локальные альтернативы и подводные камни

  • GitHub Pages — простая и бесплатная альтернатива для простых блогов, но ограничена в настройке HTTPS/доменов.
  • S3 + CloudFront — хорош для глобальной доставки, но потребует управления сертификатами и политиками.
  • Если тема использует сборщики фронтенда (webpack, gulp), убедитесь, что все dev-зависимости установлены локально при генерации.

Маленькая сводка ключевых чисел

  • Порт тестового сервера: 4000
  • Порты для WWW: 80 (HTTP), 443 (HTTPS)
  • Рекомендуемый DH параметр: 2048 бит
  • Рекомендуемая версия Node: LTS (например, 14.x на момент примера)

Краткий глоссарий (1 строка каждый)

  • front-matter: метаданные поста в YAML/JSON в начале Markdown-файла.
  • draft: черновик поста, не опубликован в папке _posts.
  • public: директория с готовыми статическими файлами, которые раздаёт Nginx.

Советы по SEO и предпросмотру в соцсетях

  • Укажите title, description и keywords в _config.yml.
  • Темы часто поддерживают Open Graph мета-теги — проверьте настройки темы.

Social preview suggestion (пример):

  • OG title: Hexo на Ubuntu 20.04 — быстрый старт
  • OG description: Полное руководство по установке Hexo, настройке Nginx и SSL, плюс варианты развертывания и чек-листы.

Короткое объявление (100–200 слов)

Hexo — лёгкий и быстрый статический генератор блогов на Node.js. Это руководство подробно описывает установку Hexo на сервер с Ubuntu 20.04: от подготовки окружения и настройки брандмауэра до публикации постов, настройки Nginx и автоматического SSL с помощью Let’s Encrypt. Также рассматриваются варианты развёртывания через Netlify, чек-листы перед публикацией, меры безопасности и план отката. Рекомендуется для разработчиков и администраторов, стремящихся к быстрому, безопасному и простому в обслуживании блогу.


Если вам нужна помощь с конкретной темой, шаблоном или CI/CD для автоматизации сборки и выкладки — напишите, укажу конфигурацию для вашего случая и подготовлю пример рабочего CI-пайплайна.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро