Деплой JavaScript приложения на VPS: пошаговое руководство

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение: Зачем деплоить JavaScript приложение на VPS?

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

В этом руководстве мы шаг за шагом разберем процесс деплоя типичного JavaScript (Node.js) приложения на VPS. Мы рассмотрим все этапы: от начальной настройки сервера до запуска приложения в production-режиме с использованием менеджера процессов PM2 и обратного прокси-сервера Nginx. Статья ориентирована на разработчиков, уже знакомых с основами Node.js и командной строкой Linux.

1. Подготовка VPS и начальная настройка

Первый шаг — аренда VPS у любого провайдера (DigitalOcean, Linode, Vultr или российские аналоги). Рекомендуемый минимальный тариф: 1 vCPU, 1-2 GB RAM. Операционная система — Ubuntu 22.04 LTS (или новее).

1.1. Подключение к серверу по SSH

После получения IP-адреса и root-пароля, подключитесь к серверу из вашего терминала:

ssh root@ваш_IP_сервера

Если вы используете SSH-ключ (рекомендуется), укажите путь к приватному ключу:

ssh -i ~/.ssh/id_rsa root@ваш_IP_сервера

1.2. Создание пользователя и базовая безопасность

Никогда не работайте под root постоянно. Создайте нового пользователя и дайте ему sudo-права:

adduser myuser
usermod -aG sudo myuser

Затем настройте SSH-ключ для нового пользователя (скопируйте публичный ключ с вашей локальной машины) и отключите вход по паролю в файле /etc/ssh/sshd_config:

PasswordAuthentication no

Перезапустите SSH-сервис: sudo systemctl restart sshd.

1.3. Установка необходимого ПО

Обновите пакетный менеджер и установите Node.js (рекомендуем LTS версию через NodeSource), Git и Nginx:

sudo apt update && sudo apt upgrade -y
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs git nginx

Проверьте версии: node -v и npm -v.

2. Клонирование репозитория и установка зависимостей

Теперь, когда сервер готов, перенесем на него код вашего приложения.

2.1. Клонирование проекта

Перейдите в домашнюю директорию пользователя и клонируйте репозиторий с GitHub (или другого Git-хостинга):

cd /home/myuser
git clone https://github.com/ваш_логин/ваш_репозиторий.git myapp
cd myapp

2.2. Установка зависимостей и тестовый запуск

Установите все npm-пакеты, указанные в package.json:

npm install

Если в проекте используется переменные окружения (например, для базы данных или API-ключей), создайте файл .env и заполните его:

nano .env

Пример содержимого:

PORT=3000
DATABASE_URL=mongodb://localhost:27017/mydb
NODE_ENV=production

Запустите приложение вручную, чтобы убедиться, что оно работает:

node app.js

Проверьте доступность через curl http://localhost:3000 или откройте в браузере http://ваш_IP:3000 (предварительно разрешив порт в фаерволе). Если все работает, остановите процесс (Ctrl+C).

3. Настройка менеджера процессов PM2

Приложение, запущенное через node app.js, остановится, как только вы закроете SSH-сессию. Для постоянной работы используется PM2 — менеджер процессов для Node.js, который автоматически перезапускает приложение при падении и управляет логами.

3.1. Установка и запуск

sudo npm install -g pm2
pm2 start app.js --name "myapp"

Проверьте статус:

pm2 status

Вы должны увидеть строку с вашим приложением и статусом "online".

3.2. Настройка автозапуска

Чтобы PM2 запускался вместе с сервером, выполните:

pm2 startup systemd

Скрипт выведет команду, которую нужно скопировать и выполнить. Затем сохраните список процессов:

pm2 save

4. Настройка обратного прокси через Nginx

Ваше приложение сейчас работает на порту 3000 (или другом). Чтобы пользователи могли обращаться к нему по стандартным портам 80 (HTTP) и 443 (HTTPS), настроим Nginx как reverse proxy.

4.1. Конфигурация Nginx

Создайте новый файл конфигурации для вашего домена (или используйте IP-адрес):

sudo nano /etc/nginx/sites-available/myapp

Вставьте следующую конфигурацию (замените your_domain.com на ваш домен или IP):

server {
    listen 80;
    server_name your_domain.com;

    location / {
        proxy_pass http://localhost:3000;
        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;
    }
}

Сохраните файл и создайте символическую ссылку в sites-enabled:

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/

                
                

Блоги

Рекомендаций по книгам