Open Source
web
5 звёздTicketHub
Русский форк osTicket из 2014 года — миграция на PHP 8.4 + MySQL 8.0, сверху канбан, REST API, инвентаризация и Docker
В цифрах
0%
Ускорение запросов
0
Индексов добавлено
0
Тестовых классов
0
Уровень PHPStan
Проблема
Что я решала
Оригинальная кодовая база osTicket v1.6 (русская ветка) еле дышала на PHP 7. Современные браузеры ломали верстку на Bootstrap 3, у админки не было API, а простые запросы в дашборде занимали 2-3 секунды — индексов почти не было. Тот, кто хотел хостить тикетинг в 2025 году, сначала воевал с кодом, а уже потом настраивал SMTP.
Мой подход
Как я делала
Перестроила в три захода. Первый: миграция на PHP 8.4 со strict types, замена mysqli на PDO с prepared statements везде, прогон PHPStan на уровне 7 по всему коду. Второй: замена Bootstrap 3 на Tailwind CSS — шаблоны переписывались по одному компоненту, без ломки бэкенд-поведения. Третий: 28 индексов БД по результатам EXPLAIN ANALYZE на реальных запросах, плюс обёртка в Docker для деплоя одной командой. Написала 50+ PHPUnit-классов, покрывающих бизнес-логику, ещё до того как трогать SMTP/POP3/IMAP.
Выбор технологий
- PHP 8.4— Strict types и readonly-классы отловили 40+ багов, которые PHP 7 молча терпел годами.
- Tailwind CSS— Замена Bootstrap 3 на Tailwind сократила CSS-бандл с 180KB до 22KB и превратила тёмную тему в диф из 10 строк.
- PHPUnit 10.5— 50+ тестовых классов отрабатывают за 4 секунды на новом API с атрибутами — достаточно быстро для pre-commit-хука.
- Docker— Один docker compose up поднимает PHP-FPM, MySQL 8.0 и Nginx. Больше никаких "у меня работает".
Результат
Что получилось
Время запросов в дашборде упало с 2-3 секунд до 150-200мс — минус 92.5%. PHPStan уровня 7 чист по всему репозиторию. Полный REST API с Bearer-аутентификацией открыл двери для интеграций (Slack-боты, Zapier). Поставляется как Docker Compose-стек, поднимается меньше чем за 30 секунд. База знаний с полнотекстовым поиском и капчей защищает клиентский портал. Админ получил канбан-доски, календарный вид и трекинг времени — современные фичи, которых в старом коде не было.