Как выбрать хостинг для Node.js под своё приложение

Как выбрать хостинг для Node.js и запустить приложение

Марина
Марина
📅 25 сентября 2026
Как выбрать хостинг для Node.js и запустить приложение

Приложению на Node.js нужен сервер, где можно держать постоянно работающий процесс и самому решать, какой порт он слушает. Такие условия даёт только виртуальный сервер (VPS) — арендованная часть физической машины с полным доступом к системе; в каталоге это раздел VPS для сайтов и приложений. Обычный виртуальный хостинг для этого не годится по самому своему устройству, и ниже разберём почему.

Материал для тех, кто написал первый сервис на Express, Fastify или Telegraf и упёрся в вопрос, куда его положить. Разберём, сколько памяти реально ест приложение, что такое процесс-менеджер и обратный прокси, сколько стоит подходящий сервер и как запустить проект на чистой Ubuntu по шагам.

Чем приложение на Node.js отличается от сайта на PHP

Сайт на PHP живёт короткими вспышками. Пришёл запрос — веб-сервер запустил интерпретатор, тот собрал HTML, отдал его и умер. Между запросами на сервере не крутится ничего, что относится к вашему сайту.

Node.js устроен наоборот. Вы запускаете процесс командой node app.js, и он живёт непрерывно: сам слушает TCP-порт (номер «двери», через которую в сервер стучатся запросы), сам держит соединения, сам хранит состояние в оперативной памяти. Если процесс убить — сайт перестаёт отвечать целиком, а не «одна страница отвалилась».

Отсюда три следствия, которые определяют выбор площадки. Приложению нужно право открыть порт. Нужен кто-то, кто перезапустит процесс после падения или перезагрузки машины. И нужна гарантированная оперативная память, потому что процесс держит её всё время, а не по секунде на запрос. Термины разбираются в глоссарии — например, хостинг с поддержкой Node.js.

Почему виртуальный хостинг не запускает Node.js

На виртуальном хостинге вы получаете папку на общей машине и настроенный владельцем веб-сервер. Ваш код там — это файлы, которые кто-то другой исполняет по запросу. Собственный долгоживущий процесс в такую схему не вписывается: панель не даёт запустить его вручную, а если он и стартует, сторожевой скрипт провайдера (watchdog) прибьёт его через несколько минут как «зависший».

Вторая преграда — порты. Наружу с общего сервера смотрят только 80/TCP и 443/TCP, и они заняты общим Nginx или Apache, который обслуживает сотни чужих сайтов. Открыть свой порт 3000/TCP вам не дадут: это дырка в общей изоляции.

Некоторые провайдеры продают «хостинг с Node.js», но под этим обычно понимают Passenger или похожий менеджер: он запускает приложение по своим правилам, с ограничением по памяти в 256–512 МБ и без доступа к системным службам. WebSocket-соединения там часто рвутся по таймауту — что это такое, объясняет статья про WebSocket. Разница между схемами подробно разобрана в сравнении виртуального хостинга и VPS.

Схема работы PHP-сайта и постоянного процесса Node.js
Именно из-за долгоживущего процесса и своего порта Node.js не помещается в схему обычного виртуального хостинга.

Сколько памяти и ядер нужно приложению

Главный ресурс для Node.js — оперативная память. Один процесс V8 (движок, на котором работает Node.js) в покое занимает примерно 40–70 МБ, дальше всё зависит от того, что вы в него положили: кеши, очереди, буферы загружаемых файлов.

Ориентир по практике такой. Голому API на Express хватает 512 МБ. Как только на том же сервере появляется база данных и сборка фронтенда, планка поднимается до 2 ГБ. Процессор при этом почти не нужен: одно ядро держит десятки запросов в секунду, потому что Node.js обрабатывает их в одном потоке и не тратит время на ожидание. Что именно измеряется в гигабайтах, поясняет справка про оперативную память.

Что запускаете Память Ядра Диск
Telegram-бот, небольшой webhook-приёмник 512 МБ 1 10 ГБ
API на Express без фронтенда 512 МБ–1 ГБ 1 10 ГБ
Приложение + PostgreSQL на той же машине 2 ГБ 1–2 20 ГБ
Next.js со сборкой прямо на сервере 2 ГБ и выше 2 30 ГБ
Два-три сервиса под PM2 плюс Redis 4 ГБ 2 40 ГБ

Сколько стоит VPS под Node.js

В каталоге раздела 44 провайдера, и стартовые тарифы у них расходятся почти в десять раз. Нижняя граница — 59 ₽/мес, у крупных площадок стартовый тариф доходит до 600 ₽/мес за формально ту же конфигурацию. Разница — в качестве дисков, скорости ядра и в том, сколько соседей сидит на одной физической машине.

Для первого проекта разумно смотреть на связку «1 ядро, 1–2 ГБ памяти, NVMe-диск». Подборка стартовых предложений собрана в разделе недорогих VPS, а конфигурации с запасом по памяти — в серверах с преднастроенным Nginx.

Провайдер Цена от Стартовая конфигурация Тарифов
Cloudcore 59 ₽/мес 1 ядро, 1 ГБ, 10 ГБ NVMe 12
Hosting-Russia 99 ₽/мес стартовый VPS —
HostVDS 127 ₽/мес 1 ядро, 1 ГБ, 10 ГБ NVMe 12
RuVDS 139 ₽/мес 1 ядро, 0,5 ГБ, 10 ГБ HDD 440
4VPS 150 ₽/мес 1 ядро, 1 ГБ, 10 ГБ NVMe 487
Selectel 200 ₽/мес 1 ядро, 1 ГБ, 10 ГБ NVMe 69
Aéza 593 ₽/мес 1 ядро, 2 ГБ, 30 ГБ NVMe 151

Данные проверены 04.09.2026.

На тарифе с 0,5 ГБ памяти Node.js стартует, но сборка проекта на нём почти наверняка упадёт. Если бюджет позволяет только такой вариант, собирайте фронтенд на своём компьютере и заливайте на сервер готовые файлы.

Процесс-менеджер: PM2 или systemd

Запустить приложение командой node app.js в терминале можно, но при закрытии SSH-сессии процесс умрёт вместе с ней. Нужен процесс-менеджер — программа, которая держит ваш сервис живым: стартует его при загрузке машины и поднимает заново после падения.

Выбор сводится к двум вариантам. PM2 — утилита из мира Node.js, ставится через npm, умеет запускать несколько копий приложения на разных ядрах и показывать потребление памяти командой pm2 monit. systemd — штатный менеджер служб Linux, он уже стоит в системе и ничего дополнительно есть не будет.

Критерий PM2 systemd
Установка npm i -g pm2 уже в системе
Расход памяти самим менеджером около 40 МБ 0 МБ дополнительно
Перезапуск по лимиту памяти есть, флаг --max-memory-restart через MemoryMax
Просмотр логов pm2 logs journalctl -u имя
Кому подойдёт первый проект, несколько сервисов один сервис, минимум лишнего

Для старта проще PM2: одна команда pm2 start app.js и одна pm2 startup, чтобы приложение поднималось после перезагрузки сервера. На машине с 512 МБ памяти сорок мегабайт под сам менеджер уже заметны — там честнее systemd.

Nginx перед приложением: порт, SSL и статика

Отдавать приложение наружу напрямую с порта 3000 неудобно и небезопасно. Стандартная схема — поставить перед ним Nginx в роли обратного прокси: он принимает запросы на портах 80/TCP и 443/TCP, а внутрь машины передаёт их вашему процессу на localhost (это адрес «сам себе», доступный только изнутри сервера). Механика описана в справке про обратный прокси.

Такая прослойка снимает с Node.js сразу три задачи. Nginx завершает на себе HTTPS-шифрование, отдаёт картинки, шрифты и собранные JS-файлы напрямую с диска и держит медленных клиентов, не занимая ими единственный рабочий поток приложения. Раздача статики через Nginx экономит десятки мегабайт памяти на буферах.

Минимальный конфиг умещается в одну секцию: слушаем порт 443/TCP, ставим proxy_pass http://127.0.0.1:3000; и обязательно добавляем заголовки Upgrade и Connection, иначе WebSocket-соединения работать не будут. Пошаговая настройка с готовыми файлами разобрана в гайде по настройке Nginx.

Сборка фронтенда съедает память пиками

Самая частая причина падений на маленьком сервере — не рабочая нагрузка, а сборка. Webpack, Vite или встроенный сборщик Next.js на несколько минут разворачивают в памяти дерево модулей целиком, и потребление подскакивает в три-четыре раза относительно обычной работы приложения.

Выглядит это так: на 1 ГБ памяти сервис месяцами держит 200 МБ, а первая же команда npm run build упирается в потолок, ядро Linux убивает процесс и в логах остаётся строка про OOM killer. Приложение при этом тоже перезапускается, потому что памяти не хватило всей машине.

Лечится это тремя способами. Первый и самый дешёвый — включить файл подкачки на 2 ГБ, тогда пик уйдёт на диск и сборка доедет до конца, пусть и медленнее; что это за механизм, объясняет статья про swap. Второй — собирать проект на своём компьютере и отправлять на сервер готовую папку. Третий — взять тариф с 2 ГБ памяти сразу.

Команды запуска Node.js приложения под PM2
Без pm2 save и pm2 startup приложение не поднимется после перезагрузки машины.

Запуск приложения на чистой Ubuntu по шагам

Дальше — рабочая последовательность для свежего сервера с Ubuntu 24.04. Она рассчитана на один сервис, который слушает порт 3000/TCP и должен открываться по домену с сертификатом. Все команды выполняются от пользователя с правами sudo — то есть с возможностью выполнять административные действия.

Перед началом убедитесь, что у вас на руках IP-адрес машины и пароль или SSH-ключ от неё — провайдер присылает их письмом через 1–3 минуты после оплаты. Домен лучше направить на этот IP заранее: A-запись — строка в настройках домена, которая связывает имя сайта с IP-адресом, — расходится по DNS-серверам от 15 минут до нескольких часов, и ждать её на седьмом шаге обидно.

  1. Подключитесь по SSH и обновите пакеты: apt update && apt upgrade -y — это подтянет свежие версии и закроет известные уязвимости.
  2. Поставьте Node.js LTS-версии из официального репозитория NodeSource. LTS означает долгую поддержку: такие версии получают исправления около 30 месяцев.
  3. Создайте отдельного пользователя для приложения командой adduser --system app, чтобы код не работал от root.
  4. Залейте проект и выполните npm ci --omit=dev — установятся только рабочие зависимости, без инструментов разработчика.
  5. Запустите сервис под процесс-менеджером и закрепите автозапуск: pm2 start app.js --name api, затем pm2 save и pm2 startup.
  6. Настройте Nginx на проксирование с порта 443/TCP на 127.0.0.1:3000 и закройте порт 3000/TCP снаружи в файрволе — программе, которая решает, какие порты видны из интернета.
  7. Выпустите бесплатный сертификат Let’s Encrypt — он действует 90 дней и продлевается автоматически; порядок описан в гайде про установку SSL от Let’s Encrypt.

На всё уходит около 30–40 минут, если домен уже направлен A-записью на IP сервера. Проверить результат просто: остановите процесс командой pm2 stop api, убедитесь, что сайт отдаёт ошибку 502 (Nginx не достучался до приложения), и запустите обратно.

База данных: на том же сервере или отдельно

Пока проект маленький, PostgreSQL или MySQL спокойно живут рядом с приложением. Экономия очевидна: один сервер вместо двух и нулевая задержка между кодом и базой, потому что запросы идут через localhost.

Считать память при этом надо на двоих. PostgreSQL со стандартными настройками резервирует около 128 МБ под общие буферы плюс по 4 МБ на соединение. На машине с 1 ГБ памяти после этого приложению остаётся немного, и первая же тяжёлая выборка положит обоих.

Разносить базу на отдельный сервер стоит, когда данные важнее скорости разработки: так падение приложения не тянет за собой СУБД, а бэкап базы делается независимо от кода. Ориентир для разделения — 4 ГБ памяти или момент, когда база перевалила за 5 ГБ на диске.

Логи и мониторинг: как понять, что приложение упало

Node.js по умолчанию пишет всё в стандартный вывод, и без процесс-менеджера эти строки просто исчезают. PM2 складывает их в файлы в домашней папке, systemd — в общий журнал, откуда они достаются командой journalctl -u api -n 200, показывающей последние 200 строк.

Логи растут быстро: болтливое приложение легко пишет 100–300 МБ в месяц и однажды забивает диск целиком. Ротация решает вопрос — модуль pm2-logrotate режет файлы по 10 МБ и хранит последние семь штук.

Отдельно стоит следить за памятью и живостью процесса. Команда ps и её разбор есть в материале про просмотр процессов в Linux, а внешняя проверка по HTTP каждые 60 секунд сообщит о падении раньше, чем это заметят пользователи.

Частые ошибки

Большинство проблем на первом сервере повторяются от проекта к проекту и стоят нескольких часов отладки. Объединяет их одно: приложение работает у автора на ноутбуке и отказывается работать на сервере, хотя код тот же самый.

Проверять список стоит сразу после первого запуска, пока проектом никто не пользуется. Половина пунктов чинится одной командой, а вторая половина через месяц обернётся ночным восстановлением из бэкапа, которого нет.

  • Запуск через node app.js в SSH-сессии без процесс-менеджера: сервис умирает, как только закрывается терминал.
  • Приложение слушает 0.0.0.0:3000 при открытом файрволе — порт торчит наружу в обход Nginx и HTTPS.
  • Работа от root: любая уязвимость в зависимостях сразу даёт полный доступ к машине.
  • Пароли и токены прямо в коде вместо переменных окружения (настроек, которые задаются рядом с приложением, а не внутри него) — они утекают вместе с репозиторием.
  • Тариф с 0,5 ГБ памяти под проект со сборкой: сборка падает из-за нехватки памяти, а причину ищут в коде.
  • Отсутствие бэкапа базы: диск виртуального сервера ломается редко, но восстанавливать нечего.

Частые вопросы

Можно ли запустить Node.js на обычном виртуальном хостинге? В большинстве случаев нет: там нельзя держать свой долгоживущий процесс и открывать порты. Некоторые провайдеры дают ограниченный режим через Passenger с лимитом 256–512 МБ, но WebSocket и фоновые задачи в нём работают ненадёжно.

Сколько памяти взять под первый проект? Для бота или небольшого API достаточно 512 МБ, для приложения с базой данных или сборкой фронтенда берите 2 ГБ. Разница в цене между этими тарифами обычно 100–200 ₽/мес, а нервов экономит заметно больше.

PM2 или systemd — что выбрать новичку? PM2 проще: две команды, и приложение уже перезапускается после падения и перезагрузки. Он сам занимает около 40 МБ памяти, поэтому на тарифе с 512 МБ логичнее описать сервис в systemd.

Обязательно ли ставить Nginx перед приложением? Технически нет, Node.js умеет слушать порт 443/TCP сам. Но тогда на нём же оказываются SSL, раздача статики и защита от медленных клиентов, а перевыпуск сертификата придётся встраивать в код.

Почему приложение падает во время npm run build? Сборщик разворачивает в памяти всё дерево модулей и даёт пик в три-четыре раза выше обычного потребления. Включите файл подкачки на 2 ГБ или собирайте проект локально и заливайте готовые файлы.

Нужен ли отдельный сервер под базу данных? На старте нет: PostgreSQL рядом с приложением работает быстрее за счёт localhost. Разносить стоит от 4 ГБ памяти или когда база выросла за 5 ГБ и её бэкап начал мешать работе приложения.

Что дешевле — VPS в России или за рубежом? Стартовые цены сопоставимы: 59–200 ₽/мес и там, и там. Для проекта с российской аудиторией выбирайте площадку в Москве или Санкт-Петербурге, разница в задержке между российским и европейским дата-центром составляет 25–45 мс.

Итог

Node.js требует от площадки трёх вещей: права держать свой процесс, свободного порта и предсказуемой памяти. Виртуальный хостинг ни одного из этих условий не даёт, а VPS с 1–2 ГБ и NVMe-диском закрывает всё сразу и стоит от 59 до 200 ₽/мес у большинства провайдеров каталога.

Дальше остаётся техника: PM2 или systemd держат приложение живым, Nginx закрывает HTTPS и статику, файл подкачки спасает сборку. Подобрать конфигурацию под конкретный сервис удобно в разделе VPS для ботов и небольших приложений — там собраны тарифы, на которых такие проекты и живут.

Поделиться:
👁 8 просмотров
Марина
Редактор · FREEHOSTING
Главный редактор FREEHOSTING. С 2020 года тестирует VDS, VPS и хостинг-провайдеров — арендует серверы, нагружает их реальными проектами и пишет честные обзоры по итогам. Помогает читателям выбирать хостинг под свои задачи: от Telegram-бота до production-сайта.