версия два

10 сентября 2026 г. devlogmeta

версия два

Когда летом я выпустил первую версию этого блога, я написал, что следующий шаг: превратить «неплохой блог» в «настоящую самостоятельно размещённую систему». Версия два и была этим шагом, и теперь она готова, так что вот всё это в одном посте.

Список записей в перестроенной админке.

Список записей в перестроенной админке.

У блога появилась своя почта. Теперь небольшой почтовый сервис отвечает за всё, что уходит с сайта в виде писем, с надёжной очередью отправки, так что ничего не теряется, даже если у SMTP выдался плохой день. Это открыло кучу вещей, которых я давно хотел: письма регистрации со ссылкой подтверждения, сообщения из формы обратной связи, которые падают прямо мне в почту, ответ на эти сообщения прямо из админки, а теперь ещё и сброс пароля. Если ты забыл пароль, теперь наконец есть ссылка «забыли пароль?». Ссылка для сброса работает один раз, умирает через час, а запрос на сброс никак не выдаёт, есть ли у этого адреса аккаунт: ответ выглядит одинаково в любом случае.

Все ошибки в одном месте. Раньше авторизация, блог и почта вели каждый свой журнал ошибок, а админке приходилось сшивать их вместе прямо в браузере. Теперь всё собирает один небольшой сервис логов. Каждый сервис всё ещё сначала пишет локально, а потом пакетами отправляет данные в фоне, так что если сервис логов упал, ничего не теряется: записи просто ждут и уходят позже. Я специально его остановил, накидал ошибок на сайт, снова запустил и посмотрел, как всё приходит ровно по одному разу. Очень приятное чувство.

Бэкапы, которые правда работают. Резервные копии базы данных и медиафайлов теперь делаются по расписанию, в админке есть управление восстановлением и проверка состояния, которая жалуется, если бэкап устарел. Я протестировал полное восстановление, включая случай, когда целой базы данных не было вообще. Первый тест восстановления точно не должен быть настоящим.

Пуш и сразу в прод. Теперь слияние в main само собирает проект, прогоняет тесты и выкатывает сайт на бой. Путь к этому вышел отдельной маленькой сагой: первый деплой упал из-за отсутствующего ключа хоста, второй из-за отсутствующего секрета, а одна пустая переменная в продакшн конфиге, как оказалось, всё это время тихо отключала все функции почты. Вот это было больно. Теперь всё работает, и каждый деплой оставляет в админке черновик заметок о релизе, чтобы я больше не забывал, что вообще вышло.

Админка повзрослела. За год добавления всего подряд она превратилась в тринадцать плоских пунктов меню и три разных стиля кнопок. Я пересобрал её: сворачиваемую сгруппированную навигацию, единый набор элементов управления везде, таблицы, где кнопка удаления наконец выглядит по-настоящему опасной, и управление пользователями в одном диалоговом окне вместо пяти виджетов, втиснутых в строку таблицы. Страница настроек теперь говорит по-человечески, а не показывает сырые ключи конфигурации.

Посты на трёх языках, с подсказкой. Блог трёхъязычный с тех пор, как появился i18n, но именно ручная синхронизация en, no и es заставляет людей всё бросить. Теперь в редакторе есть кнопка перевода, которая заранее заполняет другой язык черновиком, чтобы я мог проверить и поправить его перед публикацией. Она никогда не запускается сама, и просмотр страницы её не запускает: перевод происходит один раз, когда я сам об этом прошу, и потом сохраняется. Политика конфиденциальности точно говорит, что уходит с сервера и когда, потому что для меня это важно.

Фотогалерея. Я живу на острове, который выглядит вот так, и много хожу в походы, так что теперь блог заодно служит фотоколлекцией. Массовая загрузка, альбомы, миниатюры, чтобы никто не скачивал оригинал на 12 МБ только ради того, чтобы увидеть сетку превью, и у каждой фотографии теперь есть своя страница с подписью. Оригиналы по-прежнему можно использовать внутри постов.

Серии и письма об ответах. Посты теперь могут входить в упорядоченную серию с плашкой «часть 2 из 7» и ссылками на предыдущий и следующий пост, именно этим всегда и должна была стать та история из семи частей про создание этого места. А если кто-то ответит на твой комментарий, тебе придёт письмо об этом, всего одно письмо, даже если ответят сразу пятеро, и это можно отключить в настройках аккаунта. Пока эти письма только на английском, потому что сайт намеренно не хранит, на каком языке твой аккаунт. Возможно, я ещё вернусь к этому.

Любимая мелочь: один частичный уникальный индекс делает всё схлопывание пачек ответных писем:

CREATE UNIQUE INDEX reply_notifications_unsent_parent_idx
    ON reply_notifications (parent_comment_id) WHERE sent_at IS NULL;

Версия один была тем, как я учился делать блог. Версия два была тем, как я учился его вести. Разница оказалась больше, чем я ожидал, и большая её часть невидима, и я решил, что в этом и есть смысл. Дальше: скорее всего рассылка, может быть федерация, и точно больше фотографий.

0 комментариев

Войдите , чтобы оставить комментарий.

Войти

Забыли пароль?

Нет аккаунта?