Введение
Node.js — это среда выполнения JavaScript с открытым исходным кодом для создания серверных и сетевых приложений.
В этом руководстве мы увидим, как устанавливать и настраивать приложения Node.js в рабочей среде Ubuntu 18.04 LTS с использованием PM2. Мы запустим приложение Node.js, управляемое PM2, используя Nginx в качестве обратного прокси-сервера.
Если вы намерены установить и настроить Node.js и PM2 на удаленном сервере, продолжайте читать, в противном случае, если вы хотите установить Node.js и PM2 на свой локальный компьютер, пропустите первый абзац «Подключение к серверу» и прочтите следующий.
Предпосылки
Прежде чем приступить к работе с этим руководством, у вас должно быть:
- Пользователь без полномочий root с установленными на вашем сервере привилегиями sudo. Следуйте этому руководству: Первоначальная настройка в Ubuntu 18.04 LTS
- Nginx правильно установлен и работает на вашем сервере. Следуйте этому руководству: Установите Nginx на Ubuntu 18.04 LTS.
- Nginx настроен с использованием SSL с помощью Let’s Encrypt. Следуйте этому руководству: Как установить Let’s Encrypt для Nginx в Ubuntu 18.04 LTS.
Подключение к серверу
Чтобы получить доступ к серверу, вам нужно знать IP-адрес. Вам также потребуется пароль для аутентификации.
Чтобы подключиться к серверу как root, введите эту команду:
ssh root@IP_DEL_SERVER
Далее вам будет предложено ввести пароль пользователя root.
Если вы не используете пользователя root, вы можете войти под другим именем пользователя с помощью той же команды, а затем изменить первый параметр:
ssh VOSTRO_UTENTE@IP_DEL_SERVER
Затем вам будет предложено ввести пароль пользователя.
Теперь вы подключены к своему серверу и готовы начать установку Node.js и PM2.
Установка Node.js с помощью PPA
Чтобы установить последнюю версию Node.js, добавьте личный архив пакетов (PPA), управляемый NodeSource. Давайте убедимся, что мы дома, и установим PPA. Замените 8.x правильной версией.
cd ~
curl -sL https://deb.nodesource.com/setup_8.x -o nodesource_setup.sh
Скачав скрипт, запустим его так:
sudo bash nodesource_setup.sh
PPA будет установлен, и локальный кеш пакетов будет обновлен. В этот момент дайте следующую команду:
sudo apt install nodejs
Чтобы проверить только что установленную версию nodejs:
nodejs -v
Пакет nodejs также будет содержать диспетчер пакетов NPM, поэтому вам не нужно устанавливать его отдельно. Однако я рекомендую установить пакет build-essential, чтобы некоторые пакеты NPM работали правильно.
sudo apt install build-essential
Создайте приложение Node.js
Создайте простое приложение с Node.js, чтобы узнать, как использовать PM2.
В терминале дайте следующую команду для создания нашего приложения:
cd ~
nano hello.js
Внутри файла вставьте следующий код:
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello, World!\n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
Сохраните и закройте файлы.
Это приложение Node.js прослушивает указанный адрес (localhost) и порт (3000) и возвращает «Hello World!»
Чтобы протестировать приложение, введите:
node hello.js
Вы получите выходное сообщение, подобное следующему:
Server running at http://localhost:3000/
Чтобы остановить приложение, нажмите CTRL + C.
Чтобы протестировать приложение, откройте другой терминал на сервере и подключитесь к локальному хосту с помощью curl:
curl http://localhost:3000
Вы получите выходное сообщение, подобное следующему:
Hello World!
Установить PM2
Установите PM2, диспетчер процессов для приложений Node.js. PM2 позволяет приложениям работать в фоновом режиме в качестве службы.
Используйте npm для установки последней версии PM2 на ваш сервер:
sudo npm install pm2@latest -g
Опция -g позволяет установить модуль глобально, чтобы он был доступен для всей системы.
Мы используем команду запуска pm2 для запуска приложения в фоновом режиме:
pm2 start hello.js
Вы получите выходное сообщение, подобное следующему:
[PM2] Spawning PM2 daemon with pm2_home=/home/noviello/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /home/noviello/hello.js in fork_mode (1 instance)
[PM2] Done.
┌──────────┬────┬─────────┬──────┬─────┬────────┬─────────┬────────┬─────┬───────────┬──────┬──────────┐
│ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├──────────┼────┼─────────┼──────┼─────┼────────┼─────────┼────────┼─────┼───────────┼──────┼──────────┤
│ hello │ 0 │ N/A │ fork │ 842 │ online │ 0 │ 0s │ 0% │ 15.5 MB │ root │ disabled │
└──────────┴────┴─────────┴──────┴─────┴────────┴─────────┴────────┴─────┴───────────┴──────┴──────────┘
Use `pm2 show <id|name>` to get more details about an app
PM2 автоматически назначает имя приложения (на основе имени файла) и идентификатор PM2. PM2 также сохраняет другую информацию, такую как PID процесса, его текущее состояние и использование памяти.
Приложения, работающие в PM2, автоматически перезапускаются в случае сбоя или завершения работы приложения, но вы можете сделать дополнительный шаг, чтобы запустить приложение при запуске системы, используя подкоманду запуска. Эта подкоманда создает и настраивает сценарий запуска для запуска PM2 и его управляемых процессов при запуске сервера:
pm2 startup systemd
Последняя строка результирующего вывода будет включать команду для запуска с привилегиями суперпользователя, чтобы настроить запуск PM2 при запуске:
[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u noviello --hp /home/noviello
Запустите команду вывода с вашим именем пользователя вместо noviello:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u noviello --hp /home/noviello
В качестве следующего шага мы можем сохранить список процессов PM2 и соответствующие среды:
pm2 save
Мы создали системный диск, который запускает PM2 для пользователя при запуске системы. Этот модуль будет запускать hello.js.
Запустите службу с помощью systemctl:
systemctl start pm2-noviello
Проверьте состояние системного диска:
systemctl status pm2-noviello
Чтобы остановить приложение: (укажите имя или ID приложения PM2, в нашем случае hello):
pm2 stop hello
Чтобы перезапустить приложение:
pm2 restart hello
Чтобы просмотреть список приложений, управляемых PM2:
pm2 list
Чтобы получить информацию о приложении:
pm2 info hello
Для мониторинга процессов приложения:
pm2 monit
Запуск PM2 без аргументов также покажет страницу справки с примером использования.
Теперь, когда приложение Node.js запущено и управляется PM2.
Настройте Nginx в качестве обратного прокси
Приложение работает и слушает на локальном хосте, мы настроим веб-сервер Nginx в качестве обратного прокси-сервера, чтобы пользователи могли получить к нему доступ.
Откройте этот файл для редактирования:
sudo nano /etc/nginx/sites-available/default
Внутри блока server у вас должно быть место/ раздел. Замените содержимое этого раздела следующей конфигурацией. Если приложение настроено на прослушивание другого порта, обновите параметр proxy_pass, указав правильный номер порта:
server {...
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;
}...
}
Сохраните и закройте файл.
Предполагая, что наш сервер доступен на example.com, доступ к https://example.com/ через веб-браузер отправит запрос на hello.js, прослушивая порт 3000 на локальном хосте.
ДОПОЛНИТЕЛЬНО: Дополнительные блоки местоположения могут быть добавлены к тому же блоку сервера, чтобы обеспечить доступ к другим приложениям на том же сервере. Например, если вы запускали другое приложение Node.js на порту 3001, вы можете добавить этот блок местоположения, чтобы разрешить доступ к нему через https://example.com/app2:
server {...
location /app2 {
proxy_pass http://localhost:3001;
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 nginx -t
Перезапустите Nginx:
sudo systemctl restart nginx
Предполагая, что приложение Node.js запущено и конфигурация приложения и Nginx верны, теперь вы сможете получить доступ к своему приложению. Проверьте это, обратившись к URL-адресу вашего сервера (его общедоступному IP-адресу или доменному имени).
Установка и настройка Node.js и PM2 на Ubuntu 18.04 LTS завершена.