Личный сайт Михаила Тарасова — визитка и блог на tarassov.me.
Публичная страница-визитка + блог с заметками, на собственном C++-бэкенде. Контент блога редактируется через защищённую админку и хранится в Postgres; картинки к постам — в S3/MinIO.
- Публичный сайт (
/) — статическая визитка BookCard (frontend/public-site/): обо мне, опыт/стек, блог, контакт-форма. - Блог — посты отдаются из API (
GET /api/v1/public/posts[/{slug}]): серверные фильтры/пагинация/фасеты (?topic=&tag=&q=&page=&include=facets), соседние посты (include=adjacent), превью черновиков (?preview=); рендер Markdown на клиенте,<head>пост-страниц — SSR изtemplates/pages/с data-island. - Контакт-форма —
POST /api/v1/public/contact→ письмо через SMTP (Mailer). - Админка (
/admin/*) — React/TS SPA: CRUD постов, загрузка изображений.
| Слой | Технологии |
|---|---|
| Backend | C++20, Drogon (HTTP), libpqxx (PostgreSQL), redis-plus-plus |
| Frontend | React + TypeScript + Vite (админка), статический BookCard (визитка/блог) |
| Хранилище медиа | S3-совместимое (MinIO / R2 / S3), бэкенд local для dev |
| Инфраструктура | Docker Compose (dev), Helm (k8s), GitHub Actions |
Один nginx-контейнер раздаёт BookCard на /, React-SPA как fallback
(/admin, /login, /account/*) и проксирует /api/* в бэкенд.
src/ C++ backend (api/ domain/ repositories/ storage/ security/ email/ …)
frontend/ React-админка + public-site/ (BookCard) + nginx.conf + Dockerfile
migrations/ SQL-миграции (применяются на старте)
config/ config.json (dev) / config.production.json
helm/ чарты: tarassov-me (app) / -worker / -frontend / -env
docker/ docker-compose.yml + Dockerfile бэкенда
make up # поднять стек (postgres + redis + app) в docker-compose
make test # тесты (ctest в контейнере)
make build # пересобрать образ приложения
cd frontend && npm install && npm run dev # админка с hot-reload (проксирует /api)
make new-resource ENTITY=Foo # скаффолд CRUD-ресурса (домен+репо+контроллер+тесты)Конфигурация — через config/config.json и переменные окружения
(каждый ключ читается как ${ENV:-default}). Секреты — только через env /
external secrets, не в коде.
Образы публикуются в Docker Hub (docker.io/moveeeax/tarassov-me{,-worker,-frontend})
через GitHub Actions (.github/workflows/release.yml, по тегу vX.Y.Z).
Прод — Helm-чарт helm/tarassov-me (+ -worker / -frontend); выкат в кластер —
ручной helm upgrade. Нужные CI-переменные и storage/SMTP-настройки описаны в
values.yaml и docker/docker-compose.yml.
MIT — см. LICENSE. Шаблон визитки BookCard — коммерческий (куплен отдельно), не покрывается этой лицензией.