Node.js — среда выполнения JavaScript на сервере, построенная на движке V8 от Google. В отличие от PHP-хостинга, где каждый запрос обрабатывается отдельным процессом, Node.js использует событийный цикл (event loop) и неблокирующий I/O. Это делает его эффективным для приложений с большим числом одновременных соединений: API-сервисов, чат-приложений, real-time систем.
Как работает
Node.js-приложение запускается как постоянный процесс, слушающий порт (обычно 3000 или 8080). Перед ним обычно стоит Nginx в роли reverse proxy, который проксирует HTTP-запросы на локальный порт приложения и отдаёт статику самостоятельно. Для управления процессами используют PM2 — менеджер процессов с автоматическим перезапуском, кластерным режимом и логированием.
На VPS нужно самостоятельно настроить окружение: установить Node.js через nvm (Node Version Manager), настроить systemd-сервис или PM2, сконфигурировать Nginx. На managed hosting или PaaS (Render, Railway) деплой происходит через git push — инфраструктура управляется автоматически.
История
Node.js создал Райан Даль (Ryan Dahl) в 2009 году. Первая публичная презентация состоялась на конференции JSConf EU в ноябре 2009 года. npm (Node Package Manager) появился в 2010 году и к 2024 году стал крупнейшим репозиторием пакетов в мире — более 2 миллионов пакетов. В 2014–2015 годах разработчики форкнули Node.js в io.js, но к 2015 году проекты объединились под управлением Node.js Foundation (ныне OpenJS Foundation).
Типы хостинга для Node.js
- VPS/VDS — полный контроль, нужна ручная настройка Nginx + PM2
- PaaS (Heroku, Render, Railway) — деплой через git, без настройки инфраструктуры
- Serverless (AWS Lambda, Vercel) — запуск функций по запросу, оплата за исполнение
- Docker-контейнер — портируемое окружение, работает на любом хостинге
На что обращать внимание
Node.js однопоточный по умолчанию — для использования всех ядер нужен кластерный режим PM2 или Worker Threads. Убедитесь, что хостер поддерживает нужную версию Node.js (LTS-версии поддерживаются 30 месяцев). Redis для сессий и очередей — практически обязательный компонент в production. Также важна поддержка WebSocket, если приложение использует real-time функциональность.
Типичные ошибки при деплое Node.js
Первая ошибка — запуск Node.js-приложения напрямую без PM2 или systemd. При краше процесс не перезапустится автоматически. PM2 решает это одной командой: pm2 start app.js --name myapp. Вторая ошибка — отсутствие обработки необработанных исключений (process.on('uncaughtException')): одна незаэкранированная ошибка убивает весь процесс. Третья — блокирующий ввод-вывод в event loop: тяжёлые синхронные операции (чтение больших файлов через fs.readFileSync) замораживают обработку всех входящих запросов.
Для production обязательны переменные окружения через .env (и пакет dotenv), а не захардкоженные значения. Docker Compose помогает воспроизводить одинаковое окружение на разных серверах.
Отличия Node.js-хостинга от PHP-хостинга
Принципиальное различие: PHP обрабатывает каждый запрос в отдельном процессе и «умирает» после ответа, Node.js живёт как постоянный процесс. На shared hosting PHP-процессы изолированы ядром — разные сайты не мешают друг другу. Node.js-приложение использует единый event loop и накапливает состояние в памяти между запросами (что позволяет кэшировать данные в RAM без Redis). При краше Node.js-процесса весь сайт недоступен до перезапуска, поэтому PM2 или systemd обязательны в production. Хостинг Python имеет схожую архитектуру с WSGI/ASGI-сервером, но без single-threaded event loop.