Современное веб-приложение, спроектированное по стандартам production-ready систем. Вместо монолитной структуры проект разделен на изолированные слои и независимые микросервисы внутри контейнеров Docker, обеспечивая высокую отказоустойчивость, безопасность и скорость работы.
Интерфейс приложения полностью написан на чистом кастомном CSS с использованием гибкой адаптивной верстки (Flexbox, Grid, Media Queries), оптимизированной для мобильных устройств (защита от авто-зума полей на iOS, адаптивные кликабельные зоны тапа, динамическое скрытие элементов под мобильную клавиатуру).
Приложение развернуто в изолированной сети Docker и состоит из следующих независимых микросервисов:
laravel.test(PHP 8.5 + FrankenPHP) — высокопроизводительный веб-сервер и интерпретатор приложения.mysql:8.4— реляционная база данных для хранения пользователей и бизнес-логики.reverb(Laravel Reverb) — выделенный асинхронный WebSocket-сервер для обработки событий в реальном времени.meilisearch(Meilisearch на Rust) — специализированный поисковый движок для высоконагруженного полнотекстового поиска.phpmyadmin— изолированная панель управления базой данных для администратора.
Весь интерфейс личного кабинета, форм авторизации и админ-панели построен на декларативных компонентах Livewire Volt в классовом стиле. Это позволило объединить логику и верстку в единые независимые компоненты, обеспечивая SPA-опыт (работа без перезагрузки страниц) с полным сохранением серверного рендеринга и SEO.
Реализован критически важный бизнес-сценарий безопасности:
- При отправке пользователя в архив из админ-панели, бэкенд Laravel генерирует событие
UserArchivedEvent, которое по внутренней сети Docker улетает в микросервис сокетовreverb. - Фронтенд-компонент
todo-listчерез приватный канал (PrivateChannelс авторизацией по ID пользователя) мгновенно ловит сигнал по протоколуws://. - Сессия пользователя немедленно инвалидируется на лету, и интерфейс принудительно разрывает соединение, выбрасывая заблокированного пользователя на страницу логина без перезагрузки экрана.
Обычный поиск через LIKE заменен на профессиональный полнотекстовый движок.
- Модель
Taskиспользует трейтSearchableдля автоматической фоновой синхронизации индексов. - Настроена кастомная толерантность к опечаткам (
typoTolerance): для коротких слов разрешены 2 опечатки, что позволяет находить задачу "Купить молоко" по запросу "малоко". - Внедрена жесткая изоляция поисковых индексов через
filterableAttributesпо полюuser_id. Пользователи физически не могут получить доступ к чужим задачам через поисковые запросы.
- Защита от DoS/Спама: Экшен добавления задач защищен с помощью фасада
RateLimiter(индивидуальный лимит до 10 записей в минуту на пользователя). - Защита от Брутфорса: Форма входа защищена кастомным лимитером по связке
Email + IP-клиента. После 5 неудачных попыток форма блокируется на 60 секунд. - Безопасность данных (Soft Deletes): В админке реализовано мягкое удаление пользователей. Данные помечаются штампом времени
deleted_at. Админ может восстановить пользователя или окончательно удалить его. - Пароли: Все учетные данные хэшируются с помощью криптографических функций
Hash::make()(bcrypt), исключая хранение в открытом виде. - Умный UX: Внедрена система автоматического распознавания статуса (
@auth/@guest). Авторизованный пользователь на главной странице видит кнопку перехода в личный кабинет вместо форм регистрации.
- Клонируйте репозиторий и перейдите в папку:
git clone <ссылка_на_ваш_репозиторий> cd task
- Установите зависимости через Docker-Composer:
docker run --rm -v "\$(pwd):/var/www/html" -w /var/www/html laravelsail/php84-composer:latest composer install - Создайте файл окружения и настройте права:
cp .env.example .env sudo chown -R USER:USER . - Пропишите в
.envпеременные для Docker и лимитов сокетов:APP_PORT=8086 WWWUSER=1000 WWWGROUP=1000 REVERB_HOST="reverb" VITE_REVERB_HOST="localhost"
- Запустите микросервисы:
./vendor/bin/sail up -d
- Выполните миграции и импорт поисковых индексов:
./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