Как устроен этот блог
Блог — это markdown-файлы, скрипт сборки и nginx. Ни генератора, ни базы, ни единой строки клиентского JavaScript. Мне хотелось, чтобы через год я мог открыть папку и сразу понять, что там происходит.
Что внутри
content/posts/*.md посты с frontmatter
build.py сборка: markdown → dist/
static/style.css единственный стиль
Dockerfile python собирает, nginx отдаёт
Новый пост — это новый файл. Больше ничего делать не нужно: сборка сама подхватит его, отсортирует по дате и добавит в ленту.
Frontmatter
В начале каждого файла — четыре строки:
---
title: Как устроен этот блог
date: 2026-09-29
description: Строка для превью и og:description
---
Разбирает их не YAML-парсер, а десять строк на регулярках. Значения здесь всегда простые, а лишняя зависимость в сборке — лишняя причина ей однажды сломаться. Если в файле нет title или date, сборка его пропустит и напишет об этом в stderr: недописанный черновик в папке не должен мешать выкатить остальное.
Сборка
Контейнер двухстадийный. Python ставит markdown с подсветкой кода, прогоняет build.py и отдаёт готовый dist/ в образ с nginx:
| Стадия | Что делает |
|---|---|
build |
markdown → html, генерация ленты Atom |
runtime |
nginx отдаёт статику, ~50 МБ образ |
В финальном образе нет ни Python, ни исходников — только html, css и конфиг nginx.
Что осталось за бортом
Комментариев нет и не планирую. Аналитики нет. Тёмной темы нет — блог читают днём, а переключатель тем это ещё одна вещь, за которой надо следить.
Зато есть RSS: /feed.xml.