Как развернуть приложения Node.js с помощью pm2 и Nginx в Ubuntu
На этой странице
- Шаг 1. Установите Node.js LTS
- Шаг 2. Создание примера экспресс-приложения
- Шаг 3. Установите pm2
- Шаг 4. Установите и настройте Nginx в качестве обратного прокси-сервера
- Шаг 5. Тестирование
- Ссылки
pm2 — это менеджер процессов для приложений Node.js, он позволяет вам поддерживать работу ваших приложений и имеет встроенный балансировщик нагрузки. Он простой и мощный, вы всегда можете перезапустить или перезагрузить приложение узла с нулевым временем простоя, а также создать кластер вашего приложения узла.
В этом руководстве я покажу вам, как установить и настроить pm2 для простого приложения Express, а затем настроить Nginx в качестве обратного прокси-сервера для приложения узла, работающего под управлением pm2.
Предпосылки
- Убунту 16.04 — 64-разрядная версия
- Привилегии root
Шаг 1 — Установите Node.js LTS
В этом уроке мы начнем наш проект с нуля. Во-первых, нам нужно установить Nodejs на сервер. Я буду использовать Nodejs LTS версии 6.x, которую можно установить из репозитория nodesource.
Установите пакет python-software-properties из репозитория Ubuntu, а затем добавьте репозиторий nodesource Nodejs.
sudo apt-get install -y python-software-properties
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
Установите последнюю версию Nodejs LTS.
sudo apt-get install -y nodejs
Когда установка прошла успешно, проверьте версию node и npm.
node -v
npm -v
Шаг 2. Создание экспресс-образца приложения
Я буду использовать простой скелет веб-приложения, созданный с помощью пакета с именем экспресс-генератор для этого примера установки. Экспресс-генератор можно установить с помощью команды npm.
Установите экспресс-генератор с помощью npm:
npm install express-generator -g
-g: установить пакет внутри системы
Мы будем запускать приложение как обычный пользователь, а не как пользователь root или суперпользователь. Итак, сначала нам нужно создать нового пользователя.
Создайте нового пользователя, я назову своего yume:
useradd -m -s /bin/bash yume
passwd yume
Войдите под новым пользователем с помощью su:
su - yume
Затем создайте новое простое веб-приложение с помощью экспресс-команды:
express hakase-app
Команда создаст новый каталог проекта hakase-app.
Перейдите в каталог проекта и установите все зависимости, необходимые приложению.
cd hakase-app
npm install
Затем протестируйте и запустите новое простое приложение с помощью следующей команды:
DEBUG=myapp:* npm start
По умолчанию наше экспресс-приложение будет работать на порту 3000. Теперь посетите IP-адрес сервера: 192.168.33.10:3000.
Простой скелет веб-приложения работает на порту 3000 под пользователем yume.
Шаг 3 - Установите pm2
pm2 — это пакет узла, который можно установить с помощью команды npm. Итак, давайте установим его с помощью npm (с привилегиями root, когда вы все еще вошли в систему как пользователь hakase, затем выполните команду \exit\, чтобы снова стать root):
npm install pm2 -g
Теперь мы можем использовать pm2 для нашего веб-приложения.
Перейдите в каталог приложения hakase-app:
su - hakase
cd ~/hakase-app/
Там вы можете найти файл с именем package.json, отобразить его содержимое с помощью команды cat.
cat package.json
Вы можете видеть, что стартовая строка содержит команду, которая используется Nodejs для запуска экспресс-приложения. Эту команду мы будем использовать с менеджером процессов pm2.
Запустите экспресс-приложение с помощью команды pm2 ниже:
pm2 start ./bin/www
Теперь вы можете увидеть результаты ниже:
Наше экспресс-приложение работает под pm2 с именем www, id 0. Вы можете получить более подробную информацию о приложении, работающем под pm2, с помощью опции show show nodeid|name.
pm2 show www
Если вам нравится просматривать журнал нашего приложения, вы можете использовать опцию журналов. Это просто журнал доступа и ошибок, и вы можете увидеть статус HTTP приложения.
pm2 logs www
Вы можете видеть, что наш процесс запущен. Теперь давайте включим его запуск во время загрузки.
pm2 startup systemd
systemd: Ubuntu 16 использует systemd.
Вы получите сообщение о запуске команды от имени пользователя root. Вернитесь к привилегиям root с помощью \exit\, а затем запустите эту команду.
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u yume --hp /home/yume
Он сгенерирует файл конфигурации systemd для запуска приложения. Когда вы перезагружаете сервер, приложение автоматически запускается при запуске.
Шаг 4. Установите и настройте Nginx в качестве обратного прокси-сервера.
В этом руководстве мы будем использовать Nginx в качестве обратного прокси-сервера для приложения узла. Nginx доступен в репозитории Ubuntu, установите его с помощью команды apt:
sudo apt-get install -y nginx
Затем перейдите в каталог с доступными сайтами и создайте новый файл конфигурации виртуального хоста.
cd /etc/nginx/sites-available/
vim hakase-app
Вставьте конфигурацию ниже:
upstream hakase-app {
# Nodejs app upstream
server 127.0.0.1:3000;
keepalive 64;
}
# Server on port 80
server {
listen 80;
server_name hakase-node.co;
root /home/yume/hakase-app;
location / {
# Proxy_pass configuration
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size 0;
proxy_pass http://hakase-app/;
proxy_redirect off;
proxy_read_timeout 240s;
}
}
Сохраните файл и выйдите из vim.
По конфигурации:
- Приложение узла работает с доменным именем hakase-node.co.
- Весь трафик от nginx будет перенаправляться в приложение узла, работающее на порту 3000.
Активируйте конфигурацию, создав символическую ссылку в каталоге с поддержкой сайтов.
ln -s /etc/nginx/sites-available/hakase-app /etc/nginx/sites-enabled/
Протестируйте конфигурацию Nginx и убедитесь в отсутствии ошибок.
nginx -t
Запустите Nginx и включите его во время загрузки:
systemctl start nginx
systemctl enable nginx
Шаг 5 - Тестирование
Откройте веб-браузер и зайдите на доменное имя (мое):
Вы увидите, что экспресс-приложение работает под веб-сервером nginx.
Затем перезагрузите сервер и убедитесь, что приложение узла запущено во время загрузки:
pm2 save
sudo reboot
Если вы снова вошли на свой сервер, проверьте процесс приложения узла. Запустите приведенную ниже команду от имени пользователя yume.
su - yume
pm2 status www
Приложение Node работает под управлением pm2 и Nginx в качестве обратного прокси.
Ссылки
- Убунту
- Node.js
- Nginx