Общие вопросы
Как уменьшить ibdata1 в MariaDBЗапуск образов VDS на локальном компьютереОтправка писем по SMTP на VDS с панелью NetAngelsУстановка пароля пользователя root MySQLСоздание дополнительных пользователей MySQLПодключение SSH-ключей к VDSУстановка пароля пользователя VDSКак сбросить пароль root?Использование раздела Облачные VDS в панели управленияИспользование образа с панелью управления NetAngelsСпециальные образы VDS для быстрого развертывания (LAMP)Как клонировать виртуальные машиныГостевой агентПриватная сетьКак поправить настройки sshd?Как включить защиту от DDoS через CloudflareVDS как промежуточный сервер для выхода в интернетМонтирование диска в VDSЗащита от DDoS атакИнструкция по настройке исходящего SMTP для тарифов VDS StartСервер для веб-конференций, совещаний и онлайн лекцийВосстановление отдельных файлов в виде архиваНастройка сети на VDSУстановка Windows из ISO-образа на VDSSSH-доступ к хостинг-аккаунтуКак настроить отправку почты с сайтаАвтоматизация обновления SSL-сертификата через API NetAngelsВыпуск SSL сертификата на VDS c помощью утилиты dehydratedКак подключить SSL-сертификат для сайта на облачном VDS с панелью управления NetAngelsКонсольные команды. Работа с данными.Консольные команды. Работа с MySQL, создание и загрузка дампа.Консольные команды. Анализ состояния сервера
Запуск Nodejs-приложений с помощью Pm2 и Nginx

Запуск Nodejs приложения с помощью PM2 и Nginx на услуге VDS

В этом руководстве мы рассмотрим, как правильно развернуть nodejs приложение на виртуальном сервере (VDS) с использованием связки PM2 + Nginx.

Содержание

  1. Подготовка сервера и настройка окружения
    1. Создание пользователя и установка зависимостей
    2. Установка NVM
    3. Установка нужной версии nodejs через nvm
    4. Установка PM2 для управления приложениями nodejs
  2. Развертывание проекта
    1. Настройка файлов проекта
    2. Настройка зависимостей
  3. Настройка PM2
    1. Настройка конфигурационного файла ecosystem.config.js
    2. Запуск nodejs приложения через PM2
  4. Настройка Nginx
  5. Управление nodejs приложением
  6. Смена версии nodejs для запущенного приложения

1. Подготовка сервера и настройка окружения

1.1 Создание пользователя для запуска приложения

Создайте VDS на чистом дистрибутиве debian.

Далее подключитесь к VDS по SSH (инструкция) под пользователем root.

Создайте пользователя web с домашним каталогом /home/web:

adduser --home /home/web --gecos "" web

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

Выдайте права администратора пользователю web:

usermod -aG sudo web

1.2 Установка NVM

Для удобства управления версиями nodejs установим NVM. NVM позволяет устанавливать любую версию nodejs на ваш сервер. Более подробно почитать о работе nvm можно по (ссылке )

Перед установкой нужно переключиться на пользователя web.

su - web
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash

Чтобы применить изменения выполните команду:

source ~/.bashrc

1.3 Установка нужной версии nodejs через nvm

Просмотрите доступные версии nodejs для установки на сервер :

nvm ls-remote

Установите nodejs нужной версии (например, nodejs 20):

nvm install 20

Проверьте установленную версию:

node -v
npm -v

1.4 Установка PM2 для управления приложениями nodejs

Для удобства запуска и управления nodejs приложения установим PM2. PM2 позволяет легко запускать любые nodejs приложения, а также масштабироваь приложение под нагрузку на ваш сервер. Более подробно почитать о работе PM2 можно по (ссылке )

Установите глобально PM2 через версию nodejs, которую мы установили ранее:

npm install -g pm2

Проверьте что PM2 установился на сервер

pm2 -v

Для корректного запуска PM2, нужно отредактировать файл .bashrc. Откройте файл командой:

nano ~/.bashrc

В конец файла допишите строки:

alias pm2='export NVM_DIR="$HOME/.nvm" && source $NVM_DIR/nvm.sh && nvm use 20 > /dev/null && pm2'

Чтобы применить изменения выполните команду:

source ~/.bashrc

2. Развертывание проекта

2.1 Настройка файлов проекта

Создайте каталог, где будут хранится файлы сайта:

mkdir /home/web/sitename.ru

Вместо sitename.ru используйте имя вашего сайта

Перейдите в этот каталог:

cd /home/web/sitename.ru

Создайте папки app и www. В папке app будут хранится исходные файлы сайта, а в папке www будут хранится статические файлы для работы сайта.

mkdir app www

Теперь загрузите исходные файлы приложения в каталог /home/web/sitename.ru/app, а в каталог /home/web/sitename.ru/www зашрузите статические файлы сайта.

2.2 Настройка зависимостей

Перейдите в каталог проекта:

cd /home/web/sitename.ru/app

Установите зависимости:

npm install

Соберите приложение, если это требуется:

npm run build

3. Настройка PM2

3.1 Настройка конфигурационного файла ecosystem.config.js

В том же каталоге /home/web/sitename.ru/app, создайте конфигурационный файл для PM2

nano ecosystem.config.js

Пример конфигурации:

const path = require("path");

module.exports = {
  apps: [
    {
      name: "myapp",
      cwd: "/home/web/sitename.ru/app",
      script: "bash",
      args: "-c 'source $HOME/.nvm/nvm.sh && nvm use 20 && npm run start'",
      env: {
        NODE_ENV: "production",
        PATH: process.env.PATH + ":" + path.join(__dirname, "node_modules/.bin"),
      },
    },
  ],
};


Переменные окружения, нужные для запуска Вашего приложения, можно указать в переменной env, указав их через запятую, также как указаны переменные NODE_ENV и PATH

Описание настроек в ecosystem.config.js

Здесь мы опишем некоторые настройки, которые нужно корректировать для запуска вашего приложения.

Переменная name - указывает как будет называться ваше приложение в PM2

Переменная cwd - указывает путь до каталога с файлами сайта, чтобы nodejs понимал, откуда нужно подгружать файлы проекта

Переменная args - указывает как именно нужно запускать nodejs приложение.

  • Строка source $HOME/.nvm/nvm.sh указывает что нужно использовать NVM для выбора версии nodejs

  • Строка nvm use 20 указывает какая версия nodejs используется для запуска приложения

  • Строка npm run start указывает какая команда используется для запуска приложения

Переменная env - указывает какие переменные окружения будут использоваться при запуске приложения. Сюда также можно дописывать свои переменные через запятую

3.2 Запуск nodejs приложения через PM2

Запустите приложение командой: pm2 start ecosystem.config.js

Чтобы при перезагрузке приложение запустилось автоматически выполните команду: pm2 startup

Выполните команду, которую выведет PM2 после команды pm2 startup (пример: sudo env PATH=... pm2 startup systemd -u user --hp /home/web)

Сохраните настройки pm2 save

4. Настройка Nginx

Установите nginx:

apt install nginx -y

Создайте конфигурационный файл для сайта:

nano /etc/nginx/sites-available/sitename.ru.conf

Пример конфигурации:

server {
    listen 80;
    server_name sitename.ru;
    access_log /var/log/nginx/sitename_ru.log combined;

    root /home/web/sitename.ru/www;

    location ~* \.(?:css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf|eot|otf|map)$ {
        expires 30d;
        access_log off;
        add_header Cache-Control "public";
        try_files $uri =404;
    }

    location / {
        try_files $uri @backend;
    }

    location @backend {
        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_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_read_timeout 120s;
    }

    location ~ /\.(?!well-known).* {
        deny all;
        access_log off;
        log_not_found off;
    }

    gzip on;
    gzip_types text/plain text/css application/javascript application/json image/svg+xml;
    gzip_min_length 256;
    gzip_comp_level 5;
    gzip_vary on;

    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options DENY;
    add_header X-XSS-Protection "1; mode=block";
}


В большинстве nodejs приложений по умолчанию используется 3000 порт при запуске, поэтому мы указали в nginx на этот порт. Если Ваше приложение использует другой порт, то в конфигурационном файле поменяте 3000 порт, на порт по которому запущено Ваше приложение.

Описание настроек в nginx

Здесь мы опишем некоторые настройки, которые нужно корректировать для запуска вашего приложения.

Переменная server_name - указывает по какому домену будет работать данный конфигурационный файл nginx

Переменная root - указывает путь до каталога с файлами сайта, чтобы nginx раздавал сатические файлы, при обращении к сайту

Переменная proxy_pass - указывает по какому адресу работает ваше nodejs-приложение и куда нужно проксировать запросы, для работы сайта.

Активируйте конфигурационный файл и перезапустите Nginx:

ln -s /etc/nginx/sites-available/sitename.ru.conf /etc/nginx/sites-enabled/
nginx -t 
nginx -s reload

Поздравляем, ваше nodejs приложение запущено и доступно по домену.

Данная статья также подходит для запусков nodejs приложений на нашем дистрибутиве Netangels panel, так как он построен на дистрибутиве debian

5. Управление nodejs приложением

Старт приложения делается командом:

pm2 start myapp

Остановка приложения делается командом:

pm2 stop myapp

Проверить логи приложения можно командой:

pm2 logs myapp

Посмотреть список приложений, добавленных в PM2 можно командой:

pm2 list

6. Смена версии nodejs для запущенного приложения

Переключаемся на пользователя web:

su - web

Установите нужную версию nodejs, на которую вы хотите переключить приложение (например, nodejs 16) :

nvm install 16

Переключите версию nodejs в консоли:

nvm use 16

Перейдите в каталог проекта:

cd /home/web/sitename.ru/app

Удалите старые зависимости проекта:

rm -r node_modules

Установите новые зависимости:

npm install

Соберите приложение, если это требуется:

npm run build

В файле ecosystem.config.js, поменяйте строку nvm use 20 на nvm use 16

Удалите старый процесс:

pm2 delete myapp

Запустите прилоежние с новой версией Node.js :

pm2 start ecosystem.config.js

Сохраните конфигурацию автозапуска:

pm2 save

Поздравляем, теперь ваше приложение работает на другой версии nodejs.

Облачные VDS
Облачные VDS
Облачные VDS
Масштабируются под любые задачи: от размещения сайта до IT-инфраструктуры
С 2003 года
Надежность.
Нам доверяют тысячи компаний и разработчиков
21 год
Предоставляем услуги профессионального хостинга
35 000+
Клиентов доверяют нам размещение своих сайтов
99.99%
Подтвержденный uptime наших серверов хостинга
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
ВК49865