Как завести блог на Jekyll
Jekyll — генератор статичных сайтов. Грубо говоря, он просто помогает собрать из шаблонов и текстов набор HTML-файлов, которые можно разместить на любом веб-сервере. Этот сайт — Hexlet Guides — работает на Jekyll.
В отличие от движков для блогов или CMS вроде Wordpress или Ghost, конечный результат работы Jekyll — это не исполняемые программы на языке программирования, а статичные HTML-файлы. Поэтому для размещения сайта не нужен PHP, Node, базы данных и мощный хостинг. Раздача статических файлов создает минимальную нагрузку на сервер, поэтому чаще всего достаточно самого дешевого хостинга.
Jekyll-сайт можно разместить бесплатно на Github Pages, чем мы и займемся в этом руководстве.
- Обзор
- Установка Jekyll на локальную машину
- Файловая структура
- Конфигурация
- Создание постов
- Создание страниц
- Публикация в интернете
- Дополнительные возможности
Обзор
Рассмотрим схему работы Jekyll и схему публикации сайта вкратце:
- Вы создаёте шаблоны для вашего сайта: как выглядит главная страница, как выглядят страницы постов, категорий, шапки, подвалы и другие блоки сайта.
- Вы пишете посты в формате Markdown (доступны и другие форматы).
- Jekyll генерирует конечные HTML-страницы на основе шаблонов и Markdown-файлов.
- Вы публикуете HTML на веб-сервере и сайт становится доступным в интернете.
GitHub Pages позволяет размещать любые HTML-страницы, но он также поддерживает Jekyll на своей стороне. Это означает, что вы можете не отправлять сгенерированный HTML в Github, а отправлять только папку с вашим Jekyll-проектом и Markdown-файлами, а Github сам запустит генерацию HTML и разместит их у себя.
Установка Jekyll на локальную машину
Есть два способа работы с Jekyll на локальной машине: напрямую или через Docker. Второй способ намного проще и быстрее, но может быть непривычен, если вы никогда раньше не работали с Докером.
Прямая установка и запуск Jekyll
Jekyll — программа для командной строки, написанная на языке Ruby. Вам не нужно знать этот язык, чтобы работать с Jekyll, но нужно иметь интерпретатор этого языка в системе.
В зависимости от операционной системы, у вас может быть уже установлен Ruby.
В Windows можно использовать RubyInstaller. Работать с Jekyll нужно через командную строку. Для подготовки необходимого окружения в Windows используйте наш гайд Как начать разрабатывать в Windows.
В официальной документации Jekyll есть раздел, посвященный разным способам установки Ruby и Jekyll на Windows.
В macOS Ruby есть в комплекте. Проверьте его версию:
ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin16]
Нужна версия 2.0 и выше. Если у вас по какой-то причине более ранняя версия, то обновите Ruby командой sudo gem install ruby
.
Теперь установите Bundler. Это менеджер пакетов, именно через него мы в итоге установим Jekyll и другие необходимые для него пакеты:
gem install bundler
Теперь установите Jekyll:
gem install jekyll
Теперь создайте блог:
jekyll new myblog
cd myblog
bundle exec jekyll serve
Откройте в браузере http://localhost:4000.
Установка и запуск Jekyll через Docker
Если вы не знакомы с Докером, то посмотрите наш вебинар. Для более глубокого ознакомления можно прочитать большой гайд в нашем блоге на Хабре или почитать официальную документацию и поискать другие статьи в интернете.
Официальный Докер-образ Jekyll — jekyll/jekyll.
Самый простой способ начать — использовать наш пакет с готовой темой, основанной на Bootstrap 4.
git clone git@github.com:hexlet-boilerplates/jekyll-bootstrap4-docker.git
cd
make serve
Откройте в браузере http://localhost:4000.
Файловая структура
Базовая структура директории с сайтом выглядит так:
.
├── _config.yml
├── _drafts
| ├── begin-with-the-crazy-ideas.md
| └── on-simplicity-in-technology.md
├── _includes
| ├── footer.html
| └── header.html
├── _layouts
| ├── default.html
| └── post.html
├── _posts
| ├── 2007-10-29-hello.md
| └── 2009-04-26-good-stuff.md
├── _sass
| ├── _base.scss
| └── _layout.scss
├── _site
└── index.html
Вкратце:
- ваши посты (например, в формате Markdown) находятся в папке
_posts
. - шаблоны страниц — в папке
_layouts
- используемые в шаблонах повторяющиеся блоки — в папке
_includes
- главная страница сайта — в
index.html
Jekyll берет за основу шаблон, генерирует для каждого поста соответствующие страницы и собирает весь сайт в папке _site
.
Конфигурация
_config.yml
В файле _config.yml
описана конфигурация сайта.
title: "Page title"
header_title: "Header Title"
email: your@ema.il
author: Your Name
description: "My blog description"
baseurl: ""
url: "https://myblog.com"
date_format: "%-d.%m.%Y"
Важная деталь: url
— адрес вашего корневого сайта, а baseurl
— путь к Jekyll-сайту.
https://hello.goo.com/myblog/
|--------------------|======|
| |
url baseurl
Если ваш сайт находится в корне, то baseurl
будет пустым.
Кроме базовых параметров, вы можете добавлять в этот файл собственные параметры. Они будут доступны в шаблонах. Например, в нашем базовом пакете есть такая строка в конфигурации:
twitter_username: hexlet
Параметр используется в файле _includes/header.html
:
{% raw %}{% if site.twitter_username %}
<li class="nav-item">
<a class="nav-link" href="https://twitter.com/{{ site.twitter_username }}">
<span class="mr-1 fa fa-twitter"></span>
</a>
</li>
{% endif %}{% endraw %}
Здесь сказано «если в конфигурации есть параметр twitter_username
с непустым значением, то вывести ссылку на Твиттер».
Настройка темы
Jekyll идет в комплекте с базовой темой оформления. Наш пакет основан на популярном фреймворке Bootstrap 4.
Рассмотрим наш пример поближе:
_includes
— блоки, используемые в нескольких местахhead.html
— элемент<head>
, где подключаются стили, указываются мета-теги и так далееheader.html
— шапка сайтаfooter.html
— подвал сайтаpost_footer.html
— показывается под постом на странице поста (включается в конфигурации)share_buttons.html
— кнопки шеринга в соц. сетях под постом на странице поста (включаются и настраивается в конфигурации)social_links.html
— ссылки на соц. сети, показываются в шапке сайта (включается и настраиваются в конфигурации)
_layouts
— основные шаблоны сайтаdefault.html
— главный шаблон, используется на главной страницеpost.html
— шаблон поста, используется на странице поста
css
— стилиstyle.css
— основной файл стилей сайтаlikely.css
— стили для кнопок шеринга в соц. сетях
js
— скриптыlikely.js
— скрипт для кнопок шеринга в соц. сетях
images
— изображения
Front Matter
Любой файл, содержащий блок Front Matter в формате YAML будет обработан Jekyll'ом как особый файл. Блок Front Matter должен идти в самом начале файла.
Например, страница index.html
— главная страница сайта — содержит такие строчки в начале:
---
layout: default
---
А так выглядит сам default layout (файл _layouts/default.html
):
{% raw %}<!DOCTYPE html>
<html>
{% include head.html %}
<body>
{% include header.html %}
<div class="container">
<div class="row">
<div class="col">{{ content }}</div>
</div>
{% include footer.html %}
</div>
</body>
</html>{% endraw %}
Таким образом Jekyll при сборке берет содержание файла index.html
, вставляет в {% raw %}{{ content }}{% endraw %}
шаблона и создает конечный index.html
.
Создание постов
Посты находятся в папке _posts
. Мы используем формат по умолчанию — Markdown. Пример названия файла: 2017-12-18-features.md
. Как видно, дата публикации указана в названии файла. После даты идёт название, используемое для URL. Этот пост будет доступен по адресу mysite.com/features
.
Пост также начинается с блока front matter:
---
layout: post
title: Features
cover_url: "/images/tree.jpg"
---
Здесь могут содержаться как переменные Jekyll'а, так и наши собственные переменные. Здесь мы указали две собственных переменных: title
и cover_url
. Они используются в шаблонах:
В файле _layouts/post.html
:
<h1>{% raw %}{{ page.title }}{% endraw %}</h1>
В файле _includes/head.html
:
<meta property="og:image" content="{{ page.cover_url | prepend: site.baseurl | prepend: site.url }}">
Здесь задаётся полный адрес обложки для социальных сетей. Подробнее об og-тегах можно узнать из урока «Интеграция с соц. сетями и семантический веб» бесплатного курса Основы HTML, CSS и веб-дизайна на Хекслете.
Вы можете помещать картинки в любую директорию и включать их в посты и в front matter по относительному пути.
Создание страниц
Вы можете создавать любые директории и HTML-файлы самостоятельно, по аналогии с файлом index.html
.
Например, если создать директорию works
и положить внутрь новый файл index.html
(который может даже не содержать front matter, а быть полностью независимым статическим файлом), то страница будет доступна по адресу вроде mysite.com/works
(в зависимости от значений url
и baseurl
в конфигурации)
Публикация в интернете
Публикация HTML-файлов на веб-сервере
Файлы из папки _site
достаточно разместить на веб-сервере. Для этого подойдет практически любой хостинг. Подробнее о хостингах можно узнать из бесплатного курса Введение в веб-разработку на Хекслете.
Публикация на Github Pages с поддержкой Jekyll
Github — популярный хостинг git-репозиториев — поддерживает Jekyll. Это значит, что вы можете разместить всю папку со своим Jekyll-проектом в репозитории, и Github сам будет генерировать HTML-страницы. При этом вам не нужно включать папку _site
в репозиторий. Конечные HTML-файлы не будут видны в репозитории ни в каком виде. Этот сервис называется Github Pages.
Подробнее о Git и работе с Github можно узнать из бесплатного курса Системы контроля версий (GIT) на Хекслете.
-
Зарегистрируйтесь на https://github.com/ если еще не сделали этого.
-
Создайте новый репозиторий с именем username.github.io, где username — ваш ник на Github.
-
Инициализируйте репозиторий в директории с Jekyll:
git init
-
Добавьте remote:
git remote add origin git@github.com:YOUR_USERNAME/YOUR_REPO.git
-
Сделайте коммит и отправьте его в github:
git add --all git commit -m "Initial commit" git push -u origin master
-
Через несколько мгновений страница станет доступна по вашему адресу https://YOUR_USERNAME.github.io
Это удобный способ работы, но так как сборка происходит на стороне Github, вы не можете управлять этим процессом. К примеру, вы не можете устанавливать любые плагины, Github поддерживает лишь небольшой набор базовых плагинов.
Публикация на Github Pages без поддержки Jekyll
Github Pages позволяет размещать любые HTML-файлы и не работать с Jekyll на стороне Github. Это означает, что вы можете просто размещать на Github свою папку _site
. Такой способ позволяет вам использовать любые плагины, потому что генерация конечных файлов происходит на вашем компьютере, а Github выступает в роли простого веб-сервера.
Схема работы идентичная, просто храните в репозитории конечные HTML-файлы вместо Jekyll-проекта.
Подробнее о всех вариантах создания размещения сайтов можно узнать на странице pages.github.com.
Подключение своего домена
Github Pages позволяет подключить сторонний домен. При этом будет работать автоматический редирект 301 с адреса https://YOUR_USERNAME.github.io на ваш домен.
- Добавьте в репозиторий файл
CNAME
(без расширения), и внесите в него домен без указания протокола. Например,myblog.com
. - Если используете домен второго уровня, то на стороне своего DNS-провайдера выставьте ему запись типа
ALIAS
илиANAME
со значениемYOUR_USERNAME.github.io
; или две записи типаA
со значениями192.30.252.153
и192.30.252.154
. Если используете домен третьего уровня, то добавьте ему запись типаCNAME
со значениемYOUR_USERNAME.github.io
. Подробнее о своих доменах в официальной документации.
Дополнительные возможности
Всё описанное в этом руководстве касается базовых возможностей и настроек по умолчанию. Официальная документация описывает множество дополнительных возможностей, таких как:
- создание «коллекций» постов и страниц
- пагинация
- миграция из других блог-платформ
- подсветка кода и поддержка математических формул в постах
- плагины
- темы
- теги
- парсинг файлов с данными (YAML, JSON, CSV)
- continuous integration
А плагины позволяют еще сильнее расширить возможности системы.