К содержимому

Как устроен этот сайт

6 мин

Сайт, который вы читаете, — статика. Ни базы, ни админки, ни приложения на сервере. Разбираю, почему так и во что это обходится.

Контент лежит в git

Материалы — обычные Markdown-файлы рядом с кодом. Никакой админ-панели нет, и это осознанно.

Что это даёт:

  • История правок бесплатно. Видно, когда и что поменялось в тексте.
  • Правка из редактора. Никаких вкладок с визивигом и потерянного форматирования.
  • Откат — обычный revert. Сломал вёрстку статьи в пятницу — вернул за секунду.
  • Нечего взламывать. Нет формы входа — нет и брутфорса по ней.

Чем платим: чтобы опубликовать материал, нужен git. С телефона в метро пост не напишешь. Для личного блога инженера это приемлемо, для редакции из пяти человек — уже нет.

Почему Astro

Нужен был генератор, который отдаёт HTML без обязательного JavaScript на клиенте. Astro это делает по умолчанию: страница уезжает статикой, скрипты подключаются только там, где реально нужны.

Альтернативы, которые не подошли:

ВариантПочему нет
Next.jsзакрывает будущую динамику, но сейчас её нет ни на одной странице
WordPressрегулярный патчинг и поверхность атаки ради статических текстов
Голый HTMLчерез двадцать материалов начнёшь писать свой генератор, только хуже

Поиск без сервера

Поиск работает на Pagefind: после сборки он проходит по готовым HTML-файлам и раскладывает индекс на куски. Браузер подтягивает только те фрагменты, которые нужны под конкретный запрос.

Практический смысл: поиск живёт на том же статическом хостинге, что и сайт. Нет отдельного сервиса, нет ежемесячной платы за индекс, нет утечки поисковых запросов на чужую аналитику.

Ограничение честное: индекс обновляется только на билде. Опубликовал материал — пересобрал сайт. Для блога, который обновляется несколько раз в неделю, это не проблема.

Раздача со своего сервера

Статика лежит на своей виртуалке и раздаётся Caddy. Перед ней — Cloudflare как CDN и TLS.

Почему не готовая платформа: инфраструктура уже есть и оплачена, а отдача файлов — нагрузка, которой для блога практически нет. Cloudflare спереди нужен прежде всего затем, чтобы не публиковать в DNS адрес сервера, который стоит рядом с рабочими машинами.

Чего Cloudflare при этом не делает, вопреки расхожему ожиданию: на бесплатном тарифе он не кэширует HTML. В кэш по умолчанию попадают файлы с расширениями — стили, скрипты, картинки. Страницы вида /guides/kak-ustroen-etot-sait/ расширения не имеют, поэтому за каждой из них запрос идёт до сервера. Считать проксирование страховкой от падения виртуалки — самообман: легла виртуалка, лёг и сайт. Нужна настоящая страховка — включай Cache Everything и принимай, что после выката какое-то время будет отдаваться старая версия страницы.

Чем платим: аптайм на мне, деплой пишу сам. Для сайта, который не принимает платежи, риск приемлемый.

Аналитика без баннера

Стоит self-hosted Umami. Он не ставит cookie и не собирает персональные данные, поэтому баннер согласия не нужен — тот самый, который все закрывают не читая.

Мне от аналитики нужен один ответ: какие материалы читают до конца. Для этого не требуется знать о читателе ничего личного.

Что из этого стоит копировать

Если у вас блог, документация или лендинг — почти всё. Статика закрывает эти задачи лучше, чем CMS, и стоит дешевле в обслуживании.

Если нужны личные кабинеты, платный доступ или пользовательский контент — половина решений отсюда не подойдёт, и честнее взять полноценный фреймворк сразу.

Дальше

Новые разборы выходят в Telegram раньше, чем попадают сюда. Без анонсов курсов — только материалы.

Читать в Telegram →