Документация Jekyll-темы LinuxGik

Структура каталогов и файлов

Страницы сайта хранятся в каталоге /pages/. Блог и его посты хранятся в каталоге /_posts/. TIL(Today I Learned / Вот что сегодня выяснил) короткие заметки хранятся в каталоге /til/.

Сайт (/pages/ разделен на разделы. Раздел делится на подразделы. Любой подраздел так же может делиться на дополнительные подразделы, и так по цепочке по мере надобности.

Переход по разделам осуществляется через главное меню сайта. Главное меню сайта отображается на любой странице сайта.

Разделы сайта (то что в /pages/

Сайт разделен на разделы. Имя каждого раздела отображается в главном меню сайта

В структуре каталогов, у каждого раздела свой каталог в pages/

Каталог раздела содержит главную страницу, которая подключается к главному меню сайта.

Страницы раздела

Все страницы раздела находятся в каталоге своего раздела.

Конфигурация: _config.yml

title: LinuxGik         #подставляется в head, если у FrontMatter страницы нет своего title
        
ПараметрНазначение
titleназвание сайта: идёт в <title> и в подвал сайта
urlадрес сайта
langязык, попадает в атрибут lang страницы
permalinkформат адресов постов: /2026/10/30/rsync/

Внимание: смена permalink меняет адреса всех постов. Ссылки, прописанные вручную (например, на главной), придётся поправить.

После правки _config.yml локальный сервер нужно перезапустить.

Макеты

Макеты лежат в _layouts/. Страница выбирает макет переменной layout в front matter.

МакетНаследуетЧто выводит
default — каркас страницы: <head> (заголовок вкладки, описание, main.css), меню, <main> с содержимым, подвал сайта
post default статья: заголовок h1 из title, дата, теги, текст поста. Если в front matter есть page, внизу ссылка на страницу-выжимку
theme default страница темы и разделов: заголовок h1 из pagesH1, текст страницы. Если есть post, внизу ссылка на пост

Главная страница index.html макета не использует, потому что у неё нет front matter.

Правила для макетов

  • В макете обязательно должна быть строка {{ content }}. Без неё страница выводится пустой.
  • Макет-наследник начинается с front matter layout: default. Его содержимое подставляется на место {{ content }} родителя.
  • <header> и <footer> в default стоят прямо в <body> и относятся к сайту. Внутри <article> они относятся к статье. В CSS различайте их: body > footer и article > footer.
  • Адреса внутри макетов пишите через фильтр {{ '/путь/' | relative_url }}.

Front matter

Front matter — блок YAML между двумя строками --- в самом начале файла. Jekyll обрабатывает файл (Liquid, макет) только если такой блок есть. Без него файл копируется в _site/ как есть.

Переменные из front matter доступны в шаблонах как page.имя.

Внимание: в файле с front matter Liquid обрабатывается и в теле. Чтобы показать {{ page.title }} как текст, оборачивайте его в {% raw %}...{% endraw %}.

Связь поста и страницы

Пост хранит полный разбор, страница — выжимку. Они ссылаются друг на друга через переменные page (в посте) и post (на странице). Значение — URL от корня сайта.

Front matter поста

Файл лежит в _posts/ и называется ГГГГ-ММ-ДД-имя.md.

ПеременнаяОбязательнаНазначение
layoutдазначение post
titleдазаголовок поста, выводится как h1 и в заголовке вкладки. Если есть двоеточие, берите в кавычки
dateнетдата, по умолчанию берётся из имени файла
tagsнетсписок тегов: [rsync, ssh]
descriptionдакраткое содержание для <meta name="description">
pageнетURL страницы-выжимки. Не задаётся, пока страницы нет: иначе макет выведет ссылку на несуществующую страницу
---
layout: post
title: "Основы rsync: синхронизация каталога"
date: 2026-10-30
tags: [rsync, ssh, деплой]
description: "Краткое содержание поста."
page: /pages/rsync/
---

В description не используйте двойной дефис --: Jekyll заменит его на тире.

Front matter страницы

Файл лежит в pages/, в каталоге своего раздела.

ПеременнаяОбязательнаНазначение
layoutдазначение theme
titleдазаголовок вкладки браузера
pagesH1датекст заголовка h1 страницы
descriptionда<meta name="description">
postдаURL поста с подробным разбором. Макет выводит из него ссылку внизу страницы
---
layout: theme
title: rsync
pagesH1: rsync
description: "Шпаргалка по rsync."
post: /2026/10/30/rsync/
---

Что идёт на страницу

Команды, подводные камни и одна строка «зачем». Объяснения, варианты и разбор ошибок остаются в посте.

Ссылки

ОткудаКудаКак писать
пост другой пост [текст]({% post_url ГГГГ-ММ-ДД-имя %}) — имя файла без .md. При опечатке сборка падает
главная пост /ГГГГ/ММ/ДД/имя/ — вручную, так как у index.html нет front matter и Liquid в нём не работает
любая страница путь от корня: /pages/раздел/имя.html
любая внешний сайт полный адрес https://.... Для утверждений о чужих продуктах и версиях давайте ссылку на первоисточник

Относительные пути вида pages/имя.html без начального слеша ломаются на вложенных страницах, не используйте их.

Оформление команд

  • На страницах: команда в <code> с приглашением ~]$ (обычный пользователь) или ~]# (root). Несколько строк — в <pre><code> без приглашения.
  • В постах: блоки кода с указанием языка (bash, powershell, apache), без приглашения, чтобы команды копировались целиком.
  • Отличия систем: отдельные блоки с подписью «AlmaLinux 8» и «Debian». Непроверенное помечается явно.
  • Условные обозначения: your_domain.com, your_username, host, порт SSH 2222.

Сборка и публикация

Публикация: git push в ветку main. Сборку можно отслеживать на вкладке Actions репозитория.

ЛокальноGitHub Pages
Версия Jekyllиз Gemfile.lock (4.4.1)собственная (на момент написания 3.10.0)
Gemfileиспользуетсяигнорируется
Регистр в именах файловWindows не различаетразличает

Чтобы локальная сборка совпадала с публикуемой, в Gemfile можно заменить jekyll на github-pages.

Файл CNAME удалять нельзя: в нём домен сайта.

Типичные ошибки

СимптомПричина
Страницы открываются пустымив макете нет {{ content }}
Макет не применяетсяопечатка в имени _layouts или значения layout; Jekyll молчит
Пост не появился на сайтеимя файла не по формату ГГГГ-ММ-ДД-имя.md или дата в будущем
Сборка упала на post_urlнет поста с таким именем файла
Фигурные скобки {{ }} пропали из текстаLiquid обработал их; оберните в {% raw %}
В описании вместо -- появилось тиретипографика Jekyll; перепишите описание
Локально работает, онлайн нетразные версии Jekyll, регистр в именах, не запушены файлы

Дополнения