Миграция с PHP на Node.js: выбор проверенного стека для коммерческого проекта

Задача: перенести существующий бэкенд с PHP на JavaScript (Node.js). Ключевая цель - выбрать технологии, проверенные в коммерческой эксплуатации, чтобы избежать типичных проблем учебных проектов: отсутствия готовых решений для WebSocket, несовершенной обработки ошибок и других «подводных камней».

Хотя переписать код - не проблема, анализ рынка показывает, что экосистема бэкенда на JS столь же разнообразна, как и на фронтенде. Требуется помощь в навигации.

Контекст проекта

Текущий бэкенд имеет следующую специфику:

  • Протоколы: Несколько HTTP-запросов (получение токена, несколько API-эндпоинтов) и основное общение через WebSocket (WS). Критично избежать создания собственной реализации WS с нуля.
  • База данных: Относительно простая схема (~10 основных таблиц и несколько связующих).
  • Асинхронные задачи: Часть изменений в БД поступает не от фронтенда, а из внешней очереди сообщений (например, RabbitMQ).
  • Нагрузка: Ожидается от 20 до 100 одновременных подключений.
  • Фронтенд: Отдается как статика (HTML+JS).
  • Работа с файлами: Интенсивные операции с файловой системой, включая работу с архивами и генерацию PDF-документов.

Ключевые требования разработчика

  • Интеграция с существующей БД: Приоритет - безопасное подключение к работающей базе данных без риска повреждения данных собственными миграциями.
  • Надежные библиотеки: Наличие проверенных решений для WebSocket-соединений, работы с архивами и генерации PDF, чтобы не изобретать велосипеды.
  • Отказоустойчивость: Четкий механизм обработки ошибок, предотвращающий полный крах приложения. Желательна возможность автоматического перезапуска в критических ситуациях.
  • Зрелость технологий: Стек должен быть пригоден для коммерческого продукта с реальными пользователями, иметь минимум 2-3 года стабильного развития и активное сообщество. Модные, но сырые решения не рассматриваются.

Уточняющие вопросы по выбору технологий

Для формирования конкретных рекомендаций необходимы ответы на следующие вопросы:

  1. Фреймворк: Какой фреймворк (Nest.js, Fastify, AdonisJS или другой) демонстрирует наименьшее количество «костылей» и наибольшую предсказуемость в коммерческой разработке?
  2. Работа с БД (ORM): Какое решение (TypeORM, Prisma, Sequelize, Knex.js) считается сегодня лучшей практикой для коммерческих проектов? В частности, интересуют стабильность и наличие всех необходимых функций (вроде корректного подсчета записей) вне учебных примеров.
  3. Миграция БД: Как правильно подключиться к существующей БД, не нарушив ее целостность? Имеются миграции, написанные для Laravel (PHP).
  4. Среда выполнения: Есть ли практический смысл использовать Bun вместо стандартного Node.js для данного кейса, или прирост производительности будет заметен лишь в синтетических тестах?