Новый этап развития проекта
Сайт перестал быть просто блогом. Теперь это лаборатория. И набор в неё официально открыт.
Я давно говорил, что строю не просто движок для постов, а платформу для экспериментов. И вот, кажется, фундамент готов. Я внедрил регистрацию, профили пользователей и заложил основу для будущего чата.
Технически всё работает. Теперь тут не просто «пользователи», а участники. Они не «логинятся», а получают допуск. У каждого есть своя страница /u/username, где видно, когда человек пришёл в проект, что он о себе написал и сколько у него «хитинов» (очков репутации). Никаких тебе email, только имя и пароль. Чтобы зайти в лабораторию, не надо сдавать паспорт.
Только вот самих людей пока нет. Механизм запущен, двери открыты, но внутри пока тихо. Жду первых смельчаков.
Капризный зверь по имени Turso
Вы знаете, что я недавно перевёл базу данных на Turso. И вот тут он показал свой характер. Turso ещё в бете, так что я ожидал сюрпризов.
И они не заставили себя ждать. При первой же попытке создать миграции он отказался принимать составные индексы и внешние ключи. Пришлось выкинуть их из SQL-файлов, а целостность данных теперь контролировать прямо в коде.
А при регистрации сервер вообще выдал ошибку 500. Оказалось, Turso не понимает команду RETURNING id и не умеет прибавлять дни к дате прямо в запросе. Пришлось переписывать логику на Rust. Теперь я вставляю запись, отдельно получаю её ID, а дату истечения сессии считает сам язык. Больше кода, зато работает.
Мелочи, которые бесят
Пока ковырял это всё, чуть не сломал сборку админки. В проекте собрались три разные версии библиотеки getrandom, и они наотрез отказались собираться под WebAssembly. Пришлось плясать с конфигами и включать нужные фичи.
Ещё Leptos, на котором работает фронтенд, не переваривает, когда в разметке есть тег <script>. Он просто ломает макрос. Пришлось выносить весь JavaScript для форм в отдельный файл.
И деплой. Мой скрипт deploy.sh постоянно забывал копировать на сервер папку с миграциями. Из-за этого база на проде не знала о новых таблицах, и сайт падал. Добавил копирование - проблема ушла.
56 мегабайт
А теперь самое приятное. Я переделал страницу «О проекте». Раньше там были скучные полоски, а теперь инфографика с нормальными SVG-кругами. Страница показывает состояние всего сервера (ядра, ОЗУ) и отдельно - сколько ресурсов жрёт сама лаборатория.
И вот результат. Процесс hitin потребляет всего 56 мегабайт оперативной памяти и 0.2% процессора. Это меньше, чем открытая вкладка с YouTube! Сервер с одним ядром справляется с запасом.
Правда, сбор данных о нагрузке пришлось вынести в фоновый таск. Если запрашивать их прямо во время загрузки страницы, сервер на секунду замирал. Теперь страница просто читает готовые цифры из памяти и открывается мгновенно.
Что дальше
Вот такой результат одного вечера работы. Функционал и логика социальной составляющей будет ещё дорабатываться и совершенствоваться, тут непаханое поле. Но фундамент залит. Механизмы работают. Двери открыты.
Дальше - комнаты для обсуждений. То есть чат. И вот там меня ждут новые шишки, победы и поражения.
Лаборатория готова принимать первых участников.