Что такое хостинг (hosting) для Node.js приложения?

«Что такое хостинг (hosting) для Node.js приложения?» — вопрос из категории DevOps, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Хостинг для Node.js — это инфраструктура (физическая или виртуальная), на которой запускается и работает Node.js приложение, делая его доступным по сети. Выбор хостинга зависит от масштаба, бюджета и требований к управлению.

Основные типы хостинга для Node.js:

Тип Описание Примеры Плюсы / Минусы
VPS/VDS Виртуальный выделенный сервер с полным root-доступом. DigitalOcean, Linode, AWS EC2, Vultr + Полный контроль, гибкость.
- Требует администрирования.
PaaS (Platform as a Service) Управляемая платформа для развертывания приложений. Heroku, Railway, Render, Fly.io + Простота деплоя, встроенное масштабирование.
- Меньше контроля, может быть дороже.
Serverless / FaaS Запуск функций в ответ на события без управления серверами. AWS Lambda, Vercel Serverless, Cloudflare Workers + Отсутствие серверов, оплата за использование.
- Ограничения по времени выполнения, cold starts.
Контейнеризация (IaaS) Развертывание приложения в Docker-контейнерах. AWS ECS, Google Cloud Run, Kubernetes + Переносимость, изоляция, эффективное масштабирование.
- Сложность настройки оркестратора.

Базовый пример деплоя на VPS (Ubuntu + Nginx + PM2):

  1. Подключение и базовая настройка:
    ssh user@your_server_ip
    sudo apt update && sudo apt upgrade -y
    sudo apt install -y nodejs npm nginx
  2. Копирование и запуск приложения:
    git clone https://github.com/your-username/your-app.git
    cd your-app
    npm install --production
    sudo npm install -g pm2
    pm2 start server.js
    pm2 startup systemd
  3. Настройка Nginx как reverse proxy: Файл /etc/nginx/sites-available/your-app:

    server {
        listen 80;
        server_name your_domain.com;
    
        location / {
            proxy_pass http://localhost:3000; # Порт вашего Node.js приложения
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }
    sudo ln -s /etc/nginx/sites-available/your-app /etc/nginx/sites-enabled/
    sudo nginx -t && sudo systemctl reload nginx

Критерии выбора: Для стартапа подойдёт PaaS (Heroku), для полного контроля и оптимизации затрат — VPS, для событийных API или микросервисов — Serverless.