Skip to content

Repository files navigation

Высоконагруженный менеджер задач на микросервисной архитектуре

Современное веб-приложение, спроектированное по стандартам production-ready систем. Вместо монолитной структуры проект разделен на изолированные слои и независимые микросервисы внутри контейнеров Docker, обеспечивая высокую отказоустойчивость, безопасность и скорость работы.

Интерфейс приложения полностью написан на чистом кастомном CSS с использованием гибкой адаптивной верстки (Flexbox, Grid, Media Queries), оптимизированной для мобильных устройств (защита от авто-зума полей на iOS, адаптивные кликабельные зоны тапа, динамическое скрытие элементов под мобильную клавиатуру).

🐳 Архитектура окружения (Docker Compose)

Приложение развернуто в изолированной сети Docker и состоит из следующих независимых микросервисов:

  • laravel.test (PHP 8.5 + FrankenPHP) — высокопроизводительный веб-сервер и интерпретатор приложения.
  • mysql:8.4 — реляционная база данных для хранения пользователей и бизнес-логики.
  • reverb (Laravel Reverb) — выделенный асинхронный WebSocket-сервер для обработки событий в реальном времени.
  • meilisearch (Meilisearch на Rust) — специализированный поисковый движок для высоконагруженного полнотекстового поиска.
  • phpmyadmin — изолированная панель управления базой данных для администратора.

🚀 Ключевой функционал и технологии

1. Реактивный фронтенд на Livewire Volt (Class-style)

Весь интерфейс личного кабинета, форм авторизации и админ-панели построен на декларативных компонентах Livewire Volt в классовом стиле. Это позволило объединить логику и верстку в единые независимые компоненты, обеспечивая SPA-опыт (работа без перезагрузки страниц) с полным сохранением серверного рендеринга и SEO.

🔔 2. Реаtime-вещание через WebSockets (Laravel Reverb)

Реализован критически важный бизнес-сценарий безопасности:

  • При отправке пользователя в архив из админ-панели, бэкенд Laravel генерирует событие UserArchivedEvent, которое по внутренней сети Docker улетает в микросервис сокетов reverb.
  • Фронтенд-компонент todo-list через приватный канал (PrivateChannel с авторизацией по ID пользователя) мгновенно ловит сигнал по протоколу ws://.
  • Сессия пользователя немедленно инвалидируется на лету, и интерфейс принудительно разрывает соединение, выбрасывая заблокированного пользователя на страницу логина без перезагрузки экрана.

🔍 3. Высоконагруженный поиск Meilisearch (Laravel Scout)

Обычный поиск через LIKE заменен на профессиональный полнотекстовый движок.

  • Модель Task использует трейт Searchable для автоматической фоновой синхронизации индексов.
  • Настроена кастомная толерантность к опечаткам (typoTolerance): для коротких слов разрешены 2 опечатки, что позволяет находить задачу "Купить молоко" по запросу "малоко".
  • Внедрена жесткая изоляция поисковых индексов через filterableAttributes по полю user_id. Пользователи физически не могут получить доступ к чужим задачам через поисковые запросы.

🛡️ 4. Комплексная безопасность (Security & Throttling)

  • Защита от DoS/Спама: Экшен добавления задач защищен с помощью фасада RateLimiter (индивидуальный лимит до 10 записей в минуту на пользователя).
  • Защита от Брутфорса: Форма входа защищена кастомным лимитером по связке Email + IP-клиента. После 5 неудачных попыток форма блокируется на 60 секунд.
  • Безопасность данных (Soft Deletes): В админке реализовано мягкое удаление пользователей. Данные помечаются штампом времени deleted_at. Админ может восстановить пользователя или окончательно удалить его.
  • Пароли: Все учетные данные хэшируются с помощью криптографических функций Hash::make() (bcrypt), исключая хранение в открытом виде.
  • Умный UX: Внедрена система автоматического распознавания статуса (@auth / @guest). Авторизованный пользователь на главной странице видит кнопку перехода в личный кабинет вместо форм регистрации.

🛠️ Как запустить проект локально

  1. Клонируйте репозиторий и перейдите в папку:
    git clone <ссылка_на_ваш_репозиторий>
    cd task
  2. Установите зависимости через Docker-Composer:
    docker run --rm -v "\$(pwd):/var/www/html" -w /var/www/html laravelsail/php84-composer:latest composer install
  3. Создайте файл окружения и настройте права:
    cp .env.example .env
    sudo chown -R USER:USER .
  4. Пропишите в .env переменные для Docker и лимитов сокетов:
    APP_PORT=8086
    WWWUSER=1000
    WWWGROUP=1000
    REVERB_HOST="reverb"
    VITE_REVERB_HOST="localhost"
  5. Запустите микросервисы:
    ./vendor/bin/sail up -d
  6. Выполните миграции и импорт поисковых индексов:
    ./vendor/bin/sail artisan migrate
    ./vendor/bin/sail artisan scout:sync-index-settings
    ./vendor/bin/sail artisan scout:import "App\Models\Task"

Проект станет доступен по адресу: http://localhost:8086
Панель управления phpMyAdmin: http://localhost:8085

About

таск-менеджер со сложной бэкенд-архитектурой на базе Laravel 13 и Livewire Volt. Включает изолированные Docker-контейнеры для веб-сервера, базы данных, асинхронного WebSocket-сервера Reverb и поискового движка Meilisearch. Реализована система мягкого удаления (Soft Deletes), кастомные рейт-лимитеры и адаптивная верстка.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages