Настройка Node.JS на Production

В статье рассмотрим один из вариант настройки сервера на node.js на боевом окружении. Все действия выполнялись на сервере под Ubuntu 16.04.

Установка

Для начала, необходимо установить все необходимые пакеты.

 sudo apt-get install nginx ufw nodejs

Настройка ufw

Для увеличения безопасности будем использовать файрвол. Откроем порты для http, https и доступа по ssh. Если используется нестандартный порт его тоже надо указать.

sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow OpenSSH

Активируем файрвол

sudo ufw enable

Настройка pm2

PM2 - позволяет запускать node.js приложения в режиме демона.

Установка
sudo npm install pm2 -g
Настройка

Для запуска вместе со стартом системы:

sudo pm2 startup

Есть два варианта запуска приложений с pm2:

  1. Напрямую
  2. Используя файл pm2.json

Рассмотрим оба.

Напрямую

Достаточно одной команды для запуска

pm2 start index.js

Посмотреть список запущенных процессов:

pm2 status

Остановить процесс:

pm2 stop id/имя_процесса

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

pm2 delete id/имя_процесса
Используя pm2.json

Второй опцией является использование json файлов.

nano pm2.json

Добавим туда:

{
  "apps" : [{
    // Application #1
    "name"        : "worker-app",
    //Имя файла скрипта
    "script"      : "index.js",
    //Автоматический перезапуск после редактирования
    "watch"       : true, 
    "merge_logs"  : true,
    //Директория в которой будет запущен скрипт
    "cwd"         : "/this/is/a/path/to/start/script",
    //Переменные окружения
    "env" : {
      "NODE_ENV": "production"
    }
  }]
}

Подробнее о возможностях pm2 можно почитать здесь.

Настройка nginx

В nginx для каждого сайта должен быть в файл в /etc/nginx/sites-available.

Создадим такой файл:

 sudo nano /etc/nginx/sites-available/blog.nstsyrlin.ru

Отредактируем:

 server {
    server_name blog.nstsyrlin.ru;
    listen 80;
    listen [::]:80; # Если необходима работа по ipv6

    location / {
      # Здесь нужно указать порт своего приложения
      proxy_pass http://127.0.0.1:8080
    }
}

Больше информации о настройке nginx здесь.

Далее скажем nginx, что на сайт активен. Для этого создадим символическую ссылку и перезапустим nginx.

sudo ln -s /etc/nginx/sites-available/blog.nstsyrlin.ru /etc/nginx/sites-enabled/
sudo nginx service restart

Теперь можно попробовать зайти на свой сайт.