Клиент и контекст
Североамериканский провайдер обучения эксплуатировал мультиарендный учебный портал, которым пользовались несколько корпоративных клиентов. Платформа была построена на Laravel и современном front-end, однако:
- Локальная разработка была непонятной в настройке и поддержании в рабочем состоянии.
- Обновления были рискованными из‑за архитектурных несоответствий.
- В legacy-коде, вёрстке и мультиарендном поведении было множество мелких багов.
Я присоединился в роли senior full-stack инженера, чтобы стабилизировать и развивать платформу.
Задачи
- Сложная мультиарендная конфигурация с настройками на арендатора, кастомными доменами и background jobs.
- Боль dev-окружения: конфигурация Docker, сертификаты и инициализация были сложными и хрупкими.
- Обновления и безопасность: требовалось обновить фреймворк и библиотеки, сохранив доступность для арендаторов.
- Регрессии UI и UX: проблемы загрузки CSS/JS, сломанные адаптивные макеты и дублирование кода в legacy-разделах.
Что я сделал
1. Упростил локальную разработку и онбординг
- Привёл в порядок и упростил настройку Docker Compose и
Dockerfile.
- Исправил автоматическую генерацию сертификатов и процедуры инициализации, включая cron jobs.
- Обновил и прояснил документацию по онбордингу, сделав старт работы и вклад в проект значительно проще для новых разработчиков.
2. Архитектурная чистка и обновления
- Исправил архитектурные несоответствия, из‑за которых обновления были сложными и подверженными ошибкам.
- Обновил backend с Laravel 8 до Laravel 9.
- Обновил библиотеки Node.js и инструменты сборки до состояния, когда все известные уязвимости были устранены.
- Актуализировал архитектурную документацию, чтобы будущие изменения было проще планировать.
3. Улучшения качества и консистентности
- Провёл ручное тестирование legacy- и новых функций.
- Исправил баги в legacy-функциональности, включая:
- Условную логику и крайние случаи.
- Проблемы адаптивного дизайна (responsive layouts).
- Проблемы порядка загрузки JavaScript и CSS, а также дубликаты.
- Объединил миграции базы данных и обновил реализации функций, чтобы привести старый код в соответствие с более новыми паттернами.
4. Улучшения мультиарендности
- Интегрировал AWS Route 53 API для автоматического управления субдоменами и DNS.
- Реализовал создание субарендаторов из интерфейса администратора арендатора.
- Добавил процессы фоновой инициализации арендаторов.
- Улучшил параметры конфигурации для полей, колонок, фильтров, валидаций и многоязычных подписей.
Результаты
- Новые разработчики могли получить рабочее локальное окружение значительно быстрее, снизив трение при онбординге.
- Платформа перешла на Laravel 9 с обновлённым front-end стеком и закрытыми уязвимостями безопасности.
- Управление мультиарендностью стало более надёжным и удобным, включая автоматизированную обработку доменов.
- Кодовая база стала более цельной и поддерживаемой, что позволило клиенту сосредоточиться на новых функциях вместо постоянного «тушения пожаров».
Технологии и обязанности
- Роль: Senior full-stack инженер для мультиарендной SaaS-платформы
- Технологии: Laravel 8→9, PHP, Node.js, Docker, Docker Compose, AWS Route 53, multi-tenancy, JavaScript, CSS, responsive design
- Объём работ: Dev-окружение и документация, обновления фреймворка и библиотек, исправление багов, улучшения мультиарендности и архитектурная чистка
Если вы эксплуатируете мультиарендную SaaS, которую сложно обновлять и ещё сложнее запускать локально, я помогу упростить настройку, модернизировать стек и убрать трение для вашей команды.
Назад ко всем кейсам