Установка 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 следит за изменениями в каталоге сайта (по умолчанию — _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 или на веб-сервер.
Мини-методология деплоя:
- Локальная сборка: jekyll build
- Тестирование локально: jekyll serve –detach или проверка _site
- Синхронизация: rsync -avz _site/ user@server:/var/www/site/
- Перезапуск 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-пайплайна для автоматического деплоя.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента