jekyll-now для персонального блога
Небольшой гайд для чайников про запуск своего блога на GitHub Pages, несколько полезных твиков для добавления в блог архива, тегов и новых иконок.
jekyll-now для персонального блога
Для ведения небольшого (хотя большой тоже можно) личного блога с заметками и статьями отлично походят движки статических сайтов или flat-file CMS (Jekyll, Grav CMS, Kirby, Hugo и тысячи их).
Преимуществом Jekyll является то, что его из коробки поддерживает GitHub Pages. Значит, что не нужно возиться с установкой ПО, запускать веб-серверы и пр, достаточно создать аккаунт GitHub, создать репозиторий для сайта, закинуть туда файлы сайта (или форкнуть репозиторий) … и все!
Сами посты блога можно писать в Markdown в любом удобном, любимом редакторе или прямо через веб-интерфейс GitHub.
Еще один гайд на английском языке: aleksandrhovhannisyan.com (2020 г.).
Создаем аккаунт и форкаем репозиторий
Нам нужно:
- зарегистрировать аккаунт на github.com. Видео на русском языке, как создавать аккаунт, например, вот это, спасибо
@ITDoctor
; - форкнуть репозиторий jekyll-now (или мой репозиторий). В этом репозитории самый простой базовый блог, который дальше можно редактировать. В нем есть парочка другая багов, но их нетрудно исправить. Чтобы форкнуть репозиторий (см. короткую анимацию из репозитория автора jekyll-now):
- нужно в верхнем правом углу (где количество просмотров и звезд) нажать кнопку Fork;
- дождаться пока репозиторий скопируется в ваш аккаунт;
- открыть репозиторий в вашем аккаунте и перейти на вкладку Settings;
- поменять имя (Repository name) на
yourgithubusername.github.io
, где yourgithubusername - ваше имя на GitHub (это обязательный формат, иначе сайт автоматически работать не будет).
- сайт с блогом будет доступен по ссылке https://yourgithubusername.github.io, где yourgithubusername - имя вашего аккаунта github. GitHub Pages ребилдит сайт каждый 10 мин. или при изменении файла
_config.yml
.
Ура, треть дела сделана.
Структура jekyll-now
Теперь в репозитории лежит набор файлов и папок. Поясню кратко для чего каждый из них. Подробнее можно узнать в документации Jekyll и вот в этом гайде.
Файл или папка | Для чего нужен |
---|---|
_config.yml |
основные настройки, название блога, ссылки на аккаунты социальных сетей (образец) |
style.css |
основной стилевой файл CSS |
index.html |
домашняя страница. Файлы в корне репозитория (например, about.md , archive.html ) также обрабатываются jekyll. |
/_layouts |
шаблоны для основных страниц блога (default.html , page.html ,post.html ) |
/_posts |
здесь хранятся записи блока в формате markdown. Имя файла должны быть в формате: YYYY-MM-DD-any-post-title.md |
/_includes |
небольшие файлы, содержащие скрипты в формате Liquid |
/_sass |
содержит дополнительные стилевые файлы, написанные на метаязыке Saas |
Конфигурация
В файле _config.yml
меняем:
name: Your Blog Name
- название вашего блогаdescription: Your Description Here
- краткое название блога (отображается под названием)avatar: https://link
- укажите ссылку на ваш логотип/фото. Можно загрузить картинку в папку images в репозитории и ссылка тогда будет вида<https://raw.githubusercontent.com/annjulyleon/yourgithubusername.github.io/master/images/jekyll-logo.png>
. Аватарка размером 40x40 px по умолчанию- в секции
footer-links
указываем username или ссылки на аккаунты в соответствующих соцсетях. Иконки с пустыми значениями отображаться не будут. Формат URL (как именно нужно указывать urename) можно посмотреть в файле_includes/svg-icons.html
url: https://yourgithubusername.github.io
- укажите URL вашего блогаbaseurl: /repository-name
- если вы хотите запускать блог из репозитория проекта http://yourusername.github.io/repository-name, а не репозитория пользователя (просто http://yourusername.github.io), то тут нужно указать название репозитория -/repository-name
Пишем пост
Чтобы добавить пост, создаем файл в формате .md с указанием даты и названия. Дата в названии файла должна быть обязательно, латиница, без пробелов: YYYY-MM-DD-any-post-title.md
или 2019-04-24-post-title.md
.
В каждом посте в начале файла должна быть секция (в формате YAML), где минимум указываем layout:
(один из шаблонов, например page
или post
) и title:
(название, как оно будет отображаться в списке постов и на главной странице). Например:
---
layout: post
title: jekyll-now для персонального блога
---
Небольшой гайд для чайников про запуск своего блога на [GitHub Pages](https://pages.github.com/), несколько полезных твиков для добавления в блог архива, тегов и новых иконок.
Текст поста набран на языке разметки markdown (см. шпаргалку на русском).
Можно редактировать текст прямо в интерфейсе GitHub или сначала писать их с помощью любого Markdown редактора, например Typora, Joplin, плагины для Atom и IDEA и тысячи их.
Добавляем иконки
Можно добавлять нужные иконки соцсетей в формате .svg. Например, я добавила иконки для Telegram и Blogger. Есть официальный гайд на английском языке, привожу его здесь:
- найдите иконку, которая вам нужна, в формате SVG. Например, можно посмотреть тут;
- скопировать XML-исходник SVG иконки (открыть в блокноте скачанный SVG файл или нажать кнопку Raw и просмотреть файла SVG в репозитории);
- нужно сериализовать XML в base64. Для этого можно использовать Notepad++ или онлайн конвертер mobilefish.com. Вставьте XML текст в поле
Enter source data*:
, укажите значение 0 в полеMax characters per line:
(нам не нужно разбивать строки), введите access code с картинке и нажмите Convert; - скопируйте сериализованный текст. В файле sass/_svg-icons.scss добавьте строку вида:
&.SOMENAME { background-image: url(data:image/svg+xml;base64,<your encoded string here>); }
SOMENAME
- название вашей иконки/соцсети. Вставьте сериализованный текст вместо <your encoded string here>
.
Например, здесь две последние строки - для добавления иконок blogger.com и Telegram.
Теперь, чтобы отобразить иконки на страницах блога, нужно отредактировать файл _includes/svg-icons.html
, добавив в него строки вида:
{% if site.footer-links.SOMENAME %}<a href="your LINK here/{{ site.footer-links.SOMENAME }}"><i class="svg-icon SOMENAME"></i></a>{% endif %}
где SOMENAME - имя иконки, которое вы назначили на предыдущем шаге, а <your LINK here>
- базовая ссылка (t.me для телеграм, blogger.com и т.д.). См. пример.
И наконец, добавим параметр конфигурации для добавленной иконки в _config.yml
:
footer-links:
SOMENAME: /yourname
Добавляем страницу со списком постов
Нужно добавить страницу со списком постов (например, вот такую) по годам с датами. Вот гайд на английском языке.
Добавьте в корень репозитория файл archive.html и скопируйте содержимое:
---
layout: page
title: Archive
permalink: /archive/
---
<section class="archive-post-list">
{% for post in site.posts %}
{% assign currentDate = post.date | date: "%Y" %}
{% if currentDate != myDate %}
{% unless forloop.first %}</ul>{% endunless %}
<h1>{{ currentDate }}</h1>
<ul>
{% assign myDate = currentDate %}
{% endif %}
<li><a href="{{ post.url }}"><span>{{ post.date | date: "%B %-d, %Y" }}</span> - {{ post.title }}</a></li>
{% if forloop.last %}</ul>{% endif %}
{% endfor %}
</section>
Затем нужно добавить эту страницу в навигацию блога. Для этого откройте файл /_layouts/default.html
и найдите секцию <nav>
. Добавить страницу:
<nav>
<a href="/">Блог</a>
<a href="/about">Обо мне</a>
<a href="/archive">Архив</a>
</nav>
Здесь же можно переименовать название пунктов меню.
Страница будет доступна в течение 10 мин.
Добавляем теги и облако тегов
Чтобы проще было ориентироваться в блоге и находить похожие статьи, можно добавить в блог теги. Есть несколько способов реализации тегов и категорий (например, вот с коллекциями), я выбрала самый простой (взяла отсюда).
Добавьте к каждому своему посту в начальную секцию (front matter) теги через пробел или запятую. Например:
---
layout: post
title: jekyll-now для персонального блога
tags: docops jekyll
---
Затем нужно вывести теги для каждого поста на странице. Мне нравится выводить их перед текстом, сразу после даты, кому-то больше нравится в конце, после поста.
В файл /_layouts/post.html/
нужно в начало или конец файла добавить секцию с тегами (секция <small>
ниже). Я добавила в секцию с отображением даты (прямо перед <div class="entry">
):
<div class="date">
Written on {{ page.date | date: "%B %e, %Y" }}
<br />
<small>
{% for tag in page.tags %}
<a href="/tags/{{ tag }}/">{{ tag }}</a>
{% endfor %}
</small>
</div>
Теперь нужно создать страницы для каждого тега. на каждой страницы будут перечислены все посты с тегом. Создадим файл _layouts/tagpage.html
и добавим содержимое:
---
layout: page # This template inherits from my basic page template
---
<!-- We're going to give each page a tag when we create it.
This will be the title -->
<h1>{{ page.tag | capitalize }}</h1>
<ul>
{% for post in site.tags[page.tag] %}
<li>
{{ post.date | date: "%B %d, %Y" }}: <a href="{{ post.url }}">{{ post.title }}</a>
</li>
{% endfor %}
</ul>
Теперь создадим папку /tags
в репозитории и для каждого тега создадим файл <имя тега>.md
. В файле только начальная секция с именем тега:
---
layout: tagpage
tag: jekyll
---
Готово!
Теперь добавим на главную страницу облако тегов. Для этого отредактируем index.html
, добавив в начало или в конец (как вам больше нравится) следующую секцию:
<p>
{% for tag in site.tags %}
<!-- Here's a hack to generate a "tag cloud" where the size of
the word is directly proportional to the number of posts with
that tag. -->
<a href="/tags/{{ tag[0] }}/"
style="font-size: {{ tag[1] | size | times: 2 | plus: 10 }}px">
{{ tag[0] }} |
</a>
{% endfor %}
</p>
Исправляем баг с подсветкой кода
В умолчальном jekyll-now есть досадный баг: фреймы с кодом дублируются (один внутри другого). Решений этой проблемы несколько (например, тут).
В файле _sass/_highlights.scss
измените строчку .highlight
на pre.highlight
. Также измените строчку overflow: scroll;
на overflow: auto;
, чтобы полосы прокрутки отображались, только если это необходимо.
Ставим git для Windows
Все указанные выше действия можно выполнить в интерфейсе GitHub, однако это не всегда удобно. Можно установить на компьютер Git и редактировать файлы в вашем любимом редакторе.
Вот отличный гайд с картинками на русском языке по установке и работе с Git и TortoiseGit.
Для Windows нам нужно установить сначала Git, потом TortoiseGit. После установки команды Git появятся в контекстном меню проводника.
Создайте папку для ваших исходников, откройте ее и кликните по пустому месту ПКМ. Выберите Git Clone…. В появившемся окне в поле URL скопируйте ссылку на ваш репозиторий и нажмите ОК. Вот где можно взять эту ссылку:
Файлы и репозитория склонируются в вашу папку.
Теперь, если вы внесли в какой-то файл или файлы изменения, то необходимо также кликнуть правой кнопкой в любом месте папки и нажать Git commit > master. Ввести краткое описание изменений и нажать Commit, а затем ПКМ > Tortoise Git > Push или Git Sync. Локальные изменения попадут в ваш репозиторий на GitHub.
Чтобы добавить новый файл в репозиторий, нужно кликнуть по нему или по пустому месту в репозитории и выбрать команду Add (или TortoiseGit > Add ). Затем также выполнить Commit и Push для загрузки файлов в удаленный репозиторий.
Стили
В стандартном jekyll-now не очень красивые таблицы. Чтобы это поправить нужно создать свой стиль. jekyll использует как обычный .css, так и продвинутый .scss. Добавим оформление таблиц как на GitHub.
В папке /_sass
создадим файл _table.scss
и скопируем туда стили GitHub для таблицы, например отсюда. Содержимое файла _table.css
:
table {
padding: 0; }
table tr {
border-top: 1px solid #cccccc;
background-color: white;
margin: 0;
padding: 0; }
table tr:nth-child(2n) {
background-color: #f8f8f8; }
table tr th {
font-weight: bold;
border: 1px solid #cccccc;
text-align: left;
margin: 0;
padding: 6px 13px; }
table tr td {
border: 1px solid #cccccc;
text-align: left;
margin: 0;
padding: 6px 13px; }
table tr th :first-child, table tr td :first-child {
margin-top: 0; }
table tr th :last-child, table tr td :last-child {
margin-bottom: 0; }
В файл style.scss в корне репозитория добавим строку в начало или конец файла:
@import "table";
Стили на GitHub кэшируются, поэтому их обновление может занять до 2-3 ч.
Плагины
Для jekyll есть множество полезных плагинов, но к несчастью самые классные из них GitHub Pages не поддерживаются.
Вот список тех плагинов, которые GitHub Pages поддерживает. Чтобы подключить плагин, нужно отредактировать файл _config.yml
, добавив в него секцию plugins:
со списком нужных плагинов, например:
plugins:
- jekyll-feed
- jekyll-redirect-from
- jekyll-seo-tag
- jekyll-sitemap
- jekyll-avatar
- jemoji
- jekyll-mentions
- jekyll-include-cache
Интересные статьи:
- Продвинутый Jekyll
- Очень симпатичный шаблон с интересными решениями.