Как устроен этот сайт
Сайт, который вы читаете, — статика. Ни базы, ни админки, ни приложения на сервере. Разбираю, почему так и во что это обходится.
Контент лежит в 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, и стоит дешевле в обслуживании.
Если нужны личные кабинеты, платный доступ или пользовательский контент — половина решений отсюда не подойдёт, и честнее взять полноценный фреймворк сразу.