Сервисы

Инженерный разбор

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

Инженерный разбор production-подхода к портфолио и публикационной платформе: архитектура, локализация, управление контентом, качество, безопасность и инфраструктура.

Задача

Сайт объединяет статьи, матрицу компетенций и разбор собственной архитектуры. Он должен быть полезным читателям, удобным для автора и одновременно показывать реальные инженерные решения, а не только список технологий.

Архитектура

Backend

Litestar, SQLAlchemy, Dishka и PostgreSQL образуют API-first backend с явными границами между доменной логикой, HTTP-слоем, инфраструктурой и хранением. Статьи, матрица компетенций, управление командой и служебные инструменты сохраняют собственные контракты, а общие механизмы остаются ниже транспортной границы. Общий Swagger на /api/docs и OpenAPI на /api/openapi.json объединяют внешние API всех сервисов, включая пользовательские методы Personal Workspace с авторизацией.

LitestarSQLAlchemyPostgreSQLDishkaTaskIQ

Frontend

Angular hybrid SSR/CSR и backend-driven i18n дают SEO для публичных страниц, а read-only матрица и статьи отделены от protected workspaces: контентом управляют владелец, администраторы и модераторы, а командой — владелец и администраторы.

AngularSSRTypeScriptBootstrap

Infrastructure

nginx, Docker, MinIO с S3-compatible media storage, Valkey и TaskIQ разделяют edge routing, файлы, кэш, фоновые задачи и runtime frontend/backend контейнеров, а публичный трафик переключается между blue/green слотами после health checks. Для public-media PostgreSQL отслеживает жизненный цикл ссылок, а фоновая TaskIQ-задача безопасно удаляет неиспользуемые объекты после настраиваемого периода хранения и повторяет неудачные операции. Edge nginx самовосстанавливается после устойчивого отказа локального liveness endpoint и использует restart policy для перезапуска Docker или VPS.

nginxDockerMinIOValkeyGitHub Actions

Персональный доступ к API

Именованные персональные токены дают скриптам и AI-агентам доступ к обычным API от имени пользователя. Каждый токен ограничен выбранными операциями, сроком действия и текущей ролью аккаунта; его можно независимо отозвать. Для создания, просмотра и копирования нужен пароль. Документация API описывает доступные операции.

Litestar RESTBearerPATGranular permissions

Инженерные решения

  • Clean Architecture: доменная логика не зависит от Litestar, SQLAlchemy или внешних сервисов.
  • RU/EN локализация разделена на UI-каталог и контентные поля, чтобы не смешивать интерфейс со статьями и матрицей.
  • Анонимная аналитика показывает динамику чтения статей, вопросов матрицы и посещений сайта. Суточные признаки браузера меняются каждый день; IP, аккаунты и полные URL переходов не сохраняются.
  • Деплой оформлен как управляемый release process с ручным запуском: runtime-конфигурация собирается из manifest, CI quality gates отделены от deploy workflow, ручное подтверждение production environment остаётся явным, а blue/green переключение с health checks снижает риск релиза.

Качество и эксплуатация

Качество держится на коротких проверках: стиль, типы, unit/integration тесты, безопасность, SSR smoke, производительность и SQL-планы. Они остаются CI evidence перед релизом, а production deploy запускается вручную и переключает blue/green трафик только после health checks. В эксплуатации фоновые задачи, кэш, файлы и runtime контейнеры разделены по ответственности; публичные ассеты обслуживаются с CSP и immutable caching.

Что дальше

Ближайшие направления: RSS/Atom, публичный roadmap и дальнейшая работа над наблюдаемостью, производительностью и качеством контента.

Перейти к статьям