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

Установка Jekyll на Ubuntu 18.04

5 min read DevOps Обновлено 28 Nov 2025
Установка Jekyll на Ubuntu 18.04
Установка Jekyll на Ubuntu 18.04

Требования

  • Сервер с Ubuntu 18.04.
  • Пароль root настроен и у вас есть доступ по SSH.

Начало работы

Перед установкой обновите пакеты и ядро безопасности:

apt-get update -y  
apt-get upgrade -y

После обновления перезагрузите сервер, чтобы применить изменения.

Важно: используйте sudo или подключайтесь под root, но избегайте запуска bundler под root (см. Примечание ниже).

Установка зависимостей

Установим Ruby и инструменты сборки:

apt-get install make build-essential ruby ruby-dev -y

Добавьте пользовательскую директорию для gem в файл ~/.bashrc, чтобы не требовалось sudo при установке gem-пакетов в домашнюю папку:

nano ~/.bashrc

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

export GEM_HOME=$HOME/gems
export PATH=$HOME/gems/bin:$PATH

Сохраните файл и активируйте настройки:

source ~/.bashrc

Примечание: GEM_HOME указывает на директорию пользователя и предотвращает конфликт прав при использовании system-wide gem.

Установка Bundler и Jekyll

Установим Bundler для управления зависимостями Ruby:

gem install bundler

После успешной установки вы увидите вывод, похожий на этот:

Fetching: bundler-2.0.2.gem (100%)
Successfully installed bundler-2.0.2
Parsing documentation for bundler-2.0.2
Installing ri documentation for bundler-2.0.2
Done installing documentation for bundler after 2 seconds
1 gem installed

Затем установите Jekyll:

gem install jekyll

Ожидаемый вывод после установки (с перечнем gem’ов):

Installing ri documentation for jekyll-4.0.0
Done installing documentation for public_suffix, addressable, colorator, http_parser.rb, eventmachine, em-websocket, concurrent-ruby, i18n, ffi, sassc, jekyll-sass-converter, ruby_dep, rb-inotify, rb-fsevent, listen, jekyll-watch, kramdown, kramdown-parser-gfm, liquid, mercenary, forwardable-extended, pathutil, rouge, safe_yaml, unicode-display_width, terminal-table, jekyll after 25 seconds
27 gems installed

Если встречаете ошибки при установке ffi или sassc, убедитесь, что установлены build-essential и libffi-dev/ ruby-dev (они часто требуются для компиляции нативных расширений).

Создание сайта на Jekyll

Создадим сайт с именем test.example.com:

jekyll new test.example.com

После создания вы увидите сообщение об успешной установке и установленных зависимостях:

Bundler: Fetching minima 2.5.1
Bundler: Installing minima 2.5.1
Bundler: Bundle complete! 6 Gemfile dependencies, 31 gems now installed.
Bundler: Use `bundle info [gemname]` to see where a bundled gem is installed.Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all
  Bundler: non-root users on this machine.
New jekyll site installed in /root/test.example.com. 

Перейдите в директорию сайта:

cd test.example.com

Запустите локальный сервер Jekyll, указав IP сервера (пример ниже использует IP из исходного руководства):

jekyll serve --host=136.243.240.39

Ожидаемый вывод:

Configuration file: /root/test.example.com/_config.yml
            Source: /root/test.example.com
       Destination: /root/test.example.com/_site
 Incremental build: disabled. Enable with --incremental
      Generating... 
       Jekyll Feed: Generating feed for posts
                    done in 0.168 seconds.
 Auto-regeneration: enabled for '/root/test.example.com'
    Server address: http://136.243.240.39:4000/
  Server running... press ctrl-c to stop.

Остановить сервер можно сочетанием клавиш Ctrl+C.

Проверка через браузер

Откройте в браузере URL http://136.243.240.39:4000 — вы попадёте на стартовую страницу новосозданного сайта. Пример интерфейса показан ниже:

Панель управления Jekyll и домашняя страница примера

Jekyll следит за изменениями в каталоге сайта (по умолчанию — _posts для записей) и автоматически перестраивает сайт при сохранении файлов.

Настройка Nginx как обратного прокси для Jekyll

По умолчанию Jekyll слушает порт 4000. Чтобы обеспечить доступ к сайту по стандартному HTTP-порту 80, используйте Nginx в качестве обратного прокси.

Установите Nginx:

apt-get install nginx -y

Создайте конфигурацию виртуального хоста:

nano /etc/nginx/sites-available/jekyll.conf

Добавьте содержимое:

upstream jekyll {
  server 127.0.0.1:4000 weight=100 max_fails=5 fail_timeout=5;
}

server {
  listen          80;
  server_name     136.243.240.39;

  location / {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://jekyll/;
  }
}

Сделайте символическую ссылку и перезапустите Nginx:

ln -s /etc/nginx/sites-available/jekyll.conf /etc/nginx/sites-enabled/
systemctl restart nginx

После этого сайт должен быть доступен по http://136.243.240.39 без указания порта 4000.

Примечание: если сервер использует UFW или другой брандмауэр, откройте порт 80:

ufw allow 80/tcp

Рекомендации по запуску Jekyll в продакшн

Jekyll — статический генератор, и в продакшн обычно разворачивают именно статическую сборку в каталог _site и обслуживают его напрямую веб-сервером. Варианты:

  • Генерировать сайт локально и копировать _site в /var/www/site на сервере.
  • Использовать systemd unit, который запускает jekyll serve, если нужно live-reload на сервере (не оптимально для высокой нагрузки).
  • Лучший вариант для стабильности — собирать сайт в CI (GitHub Actions/GitLab CI) и деплоить готовые файлы в CDN или на веб-сервер.

Мини-методология деплоя:

  1. Локальная сборка: jekyll build
  2. Тестирование локально: jekyll serve –detach или проверка _site
  3. Синхронизация: rsync -avz _site/ user@server:/var/www/site/
  4. Перезапуск Nginx при необходимости

Безопасность и жесткое повышение устойчивости

  • Не запускайте Bundler как root — это может нарушить права для других пользователей.
  • Если сайт доступен публично, используйте HTTPS (Let’s Encrypt) и автоматическое обновление сертификатов certbot.
  • Откройте только нужные порты (80/443) в брандмауэре.
  • Для конфиденциальных данных (пароли, API) используйте переменные окружения CI и никогда не храните секреты в репозитории.

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

  • Локально созданный сайт доступен по http:// и отображает страницу Jekyll.
  • Nginx корректно проксирует запросы с порта 80 на порт 4000.
  • При изменении файла в каталоге сайта автоматическое перестроение выполняется (если используется jekyll serve).
  • Установлены Bundler и Jekyll без ошибок компиляции нативных расширений.

Чеклист перед публикацией

  • Система обновлена: apt-get update && apt-get upgrade
  • Ruby и ruby-dev установлены
  • GEM_HOME настроен и активирован
  • bundler и jekyll установлены без ошибок
  • Nginx настроен и перезапущен
  • Порты 80/443 открыты и защищены
  • HTTPS настроен через Let’s Encrypt

Рекомендации для ролей

  • Для разработчика: работайте в ветках, используйте локальную сборку и тесты, обновляйте зависимости через bundle update.
  • Для администратора: автоматизируйте деплой с помощью CI, мониторьте доступность и SSL-сертификаты.
  • Для контент-менеджера: сохраняйте посты в _posts, следуйте формату front matter (title, date, layout).

Типичные проблемы и способы устранения

  • Проблема: Ошибки при установке ffi или sassc.
    Решение: Установите дополнительные пакеты: apt-get install libffi-dev libssl-dev -y и повторите установку.

  • Проблема: Bundler пишет “Don’t run Bundler as root”.
    Решение: Используйте GEM_HOME в домашней папке и запускайте как непользователь root; если нужно — используйте sudo только там, где требуется.

  • Проблема: Nginx возвращает 502 Bad Gateway.
    Решение: Убедитесь, что Jekyll запущен и слушает 127.0.0.1:4000; проверьте логи Jekyll и Nginx. Если Jekyll слушает другой интерфейс, скорректируйте upstream.

  • Проблема: Автопересборка не работает.
    Решение: Проверьте, установлены ли гемы listen и jekyll-watch; убедитесь, что файловая система поддерживает inotify (не все сетевые монтирования это поддерживают).

Тестовые сценарии и критерии приёмки

  • Тест 1: Создать новый пост в _posts и сохранить — сайт автоматически пересоберётся и новый пост появится на главной в течение нескольких секунд.
  • Тест 2: Остановить сервис Jekyll и попытаться открыть сайт по порту 80 — Nginx должен вернуть 502; после старта Jekyll сайт снова доступен.
  • Тест 3: Удалить GEM_HOME и попытаться установить gem — установка должна требовать sudo или завершиться ошибкой прав; после восстановления GEM_HOME установка проходит без sudo.

Короткое определение терминов

  • Jekyll — статический генератор сайтов: превращает Markdown и шаблоны в готовые HTML-файлы.
  • Bundler — менеджер зависимостей Ruby, который устанавливает гемы согласно Gemfile.

Итог

Вы настроили Jekyll на Ubuntu 18.04, установили необходимые зависимости, создали тестовый сайт и настроили Nginx как обратный прокси для доступа по порту 80. Рекомендуется для продакшна собирать статические файлы через CI и отдавать через веб-сервер или CDN.

Важное: если хотите, я могу добавить systemd unit для запуска jekyll как сервиса или показать пример 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 быстро