Структура каталогов и файлов
Страницы сайта хранятся в каталоге /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, порт SSH2222.
Сборка и публикация
Публикация: 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, регистр в именах, не запушены файлы |
Дополнения
- Digital Garden и TIL — заметки, которые растут