Поиск по сайту:

Как установить Node.js на Debian 10 и настроить Nginx в качестве внешнего прокси-сервера


На этой странице

  1. Предпосылки
  2. Начало работы
  3. Установите Node.js
  4. Создание приложения Node.js
  5. Установка и настройка PM2
  6. Настройка Nginx в качестве обратного прокси-сервера для Node.js
  7. Доступ к приложению Node.js
  8. Заключение

Node.js — это бесплатная платформа JavaScript с открытым исходным кодом, которую можно использовать для обслуживания динамического и адаптивного контента на стороне сервера. Он построен на движке Chrome V8 JavaScript и может выполнять код JavaScript вне веб-браузера. Его можно запускать в нескольких операционных системах, включая Linux, FreeBSD, Windows и macOS. Node.js также работает на других веб-серверах, таких как Apache и Nginx.

В этом руководстве мы узнаем, как установить и настроить Node.js для обработки внутренних запросов и настроить Nginx для обработки внешних запросов в Debian 10.

Предпосылки

  • Сервер под управлением Debian 10.
  • На вашем сервере настроен пароль root.

Начиная

Во-первых, рекомендуется обновить вашу систему до последней версии. Вы можете сделать это с помощью следующей команды:

apt-get update -y
apt-get upgrade -y

После обновления сервера перезапустите его, чтобы изменения вступили в силу.

Установите Node.js

По умолчанию последняя версия Node.js недоступна в репозитории по умолчанию Debian 10. Поэтому вам нужно будет установить его из скрипта.

Сначала установите curl с помощью следующей команды:

apt-get install curl -y

Затем загрузите и установите сценарий установки Node.js с помощью следующей команды:

curl -sL https://deb.nodesource.com/setup_12.x | bash -

После завершения установки вы можете установить Node.js с помощью следующей команды:

apt-get install nodejs -y

После успешного завершения установки вы можете проверить версию Node.js с помощью следующей команды:

nodejs --version

Вы должны увидеть версию Node.js в следующем выводе:

v12.16.1

Вы также можете проверить версию NPM, выполнив следующую команду:

npm --version

Вы должны увидеть версию NPM в следующем выводе:

6.13.4

Создать приложение Node.js

Во-первых, вам нужно будет создать каталог для вашего приложения. Вы можете создать его, выполнив следующую команду:

mkdir nodeapp

Затем измените каталог на nodeapp и установите экспресс с помощью следующей команды:

cd nodeapp
npm install express

Затем создайте образец приложения Node.js с помощью экспресс-редактора nano:

nano app.js

Добавьте следующее содержимое:

var express = require('express');
var app = express();
app.get('/', function(req, res){
   res.send("Nginx as Frontend Server for Node.js!");
});
app.listen(8000, '127.0.0.1');

Сохраните и закройте файл, когда закончите.

Затем запустите приложение с помощью следующей команды:

node app.js

Затем откройте другой терминал и проверьте приложение с помощью следующей команды:

netstat -antup | grep 8000

Вы должны увидеть, что ваше приложение Node.js прослушивает порт 8000:

tcp        0      0 127.0.0.1:8000          0.0.0.0:*               LISTEN      26193/node

Вы также можете проверить приложение с помощью команды curl, как показано ниже:

curl http://127.0.0.1:8000

Если все в порядке, вы должны получить следующий вывод:

Nginx as Frontend Server for Node.js!

Установите и настройте PM2

PM2 — это менеджер процессов для управления приложением Node.js. Вы можете легко запускать, останавливать и включать приложение Node.js для запуска при загрузке с помощью PM2.

Сначала установите последнюю версию PM2 с помощью NPM, как показано ниже:

npm install pm2 -g

После установки измените каталог на nodeapp и ваше приложение с помощью следующей команды:

cd nodeapp
pm2 start app.js

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

                        -------------

__/""""\____/"\____________/"\____/"""_____
 _\/"/////////"_\/""________/""__/"///////"___
  _\/"_______\/"_\/"//"____/"//"_\///______\//"__
   _\/""""\/__\/"\///"/"/_\/"___________/"/___
    _\/"/////////____\/"__\///"/___\/"________/"//_____
     _\/"_____________\/"____\///_____\/"_____/"//________
      _\/"_____________\/"_____________\/"___/"/___________
       _\/"_____________\/"_____________\/"__/"""""_
        _\///______________\///______________\///__\///////////////__


                          Runtime Edition

        PM2 is a Production Process Manager for Node.js applications
                     with a built-in Load Balancer.

                Start and Daemonize any application:
                $ pm2 start app.js

                Load Balance 4 instances of api.js:
                $ pm2 start api.js -i 4

                Monitor in production:
                $ pm2 monitor

                Make pm2 auto-boot at server restart:
                $ pm2 startup

                To go further checkout:
                http://pm2.io/


                        -------------

[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /root/nodeapp/app.js in fork_mode (1 instance)
[PM2] Done.
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? id  ? name   ? namespace   ? version ? mode    ? pid      ? uptime ? ?    ? status    ? cpu      ? mem      ? user     ? watching ?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 0   ? app    ? default     ? N/A     ? fork    ? 13202    ? 0s     ? 0    ? online    ? 0%       ? 27.2mb   ? root     ? disabled ?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

В приведенном выше выводе вы можете увидеть очень полезную информацию, такую как PID приложения, время безотказной работы, состояние, использование ЦП и памяти.

Затем выполните следующую команду, чтобы создать и настроить сценарий запуска для приложения Node.js, чтобы ваше приложение Node.js запускалось автоматически при загрузке.

pm2 startup

Вы должны получить следующий результат:

[PM2] Init System found: systemd
Platform systemd
Template
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target

[Service]
Type=forking
User=root
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/root/.pm2
PIDFile=/root/.pm2/pm2.pid
Restart=on-failure

ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/usr/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/usr/lib/node_modules/pm2/bin/pm2 kill

[Install]
WantedBy=multi-user.target

Target path
/etc/systemd/system/pm2-root.service
Command list
[ 'systemctl enable pm2-root' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-root...
Created symlink /etc/systemd/system/multi-user.target.wants/pm2-root.service → /etc/systemd/system/pm2-root.service.
[PM2] [v] Command successfully executed.
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save

[PM2] Remove init script via:
$ pm2 unstartup systemd

Затем запустите службу PM2 с помощью следующей команды:

systemctl start pm2-root

Затем проверьте состояние службы PM2 с помощью следующей команды:

systemctl status pm2-root

Вы должны получить следующий результат:

? pm2-root.service - PM2 process manager
   Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-03-26 06:04:28 UTC; 2s ago
     Docs: https://pm2.keymetrics.io/
  Process: 13387 ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect (code=exited, status=0/SUCCESS)
 Main PID: 13191 (PM2 v4.2.3: God)
    Tasks: 0 (limit: 4915)
   CGroup: /system.slice/pm2-root.service
           ? 13191 PM2 v4.2.3: God Daemon (/root/.pm2)

Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2] Restoring processes located in /root/.pm2/dump.pm2.bak
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2][ERROR] Failed to read dump file in /root/.pm2/dump.pm2.bak
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2][ERROR] No processes saved; DUMP file doesn't exist
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? PM2+ activated | Instance Name: node.myserver.tld-109e | Dash: https://app.pm2.io/#/r/7p66twg
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? id  ? name   ? namespace   ? version ? mode    ? pid      ? uptime ? ?    ? status    ? cpu   
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? 0   ? app    ? default     ? N/A     ? fork    ? 13202    ? 8m     ? 0    ? online    ? 0%    
Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ????????????????????????????????????????????????????????????????????????????????????????????????
Mar 26 06:04:28 kolab.linuxbuz.com systemd[1]: Started PM2 process manager.

Настройте Nginx в качестве обратного прокси-сервера для Node.js

На данный момент ваше приложение Node.js работает и прослушивает локальный хост. Затем вам нужно будет настроить Nginx в качестве внешнего прокси-сервера для приложения Node.js, чтобы любой пользователь мог получить доступ к вашему приложению через Интернет.

Сначала установите веб-сервер Nginx с помощью следующей команды:

apt-get install nginx -y

После установки создайте файл конфигурации виртуального хоста Nginx для приложения Node.js:

nano /etc/nginx/sites-enabled/myapp.conf

Добавьте следующее содержимое:

server {
    listen 80;
    server_name node.myserver.tld;
    location / {
        proxy_pass http://127.0.0.1:8000;
        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;
     }
}

Сохраните и закройте файл, когда закончите. Затем перезапустите сервер Nginx, чтобы применить изменения:

systemctl restart nginx

Вы можете проверить статус службы Nginx с помощью следующей команды:

systemctl status nginx

Вы должны увидеть следующий вывод:

? nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-03-25 12:42:49 UTC; 5min ago
     Docs: man:nginx(8)
  Process: 26180 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 26182 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 26183 (nginx)
    Tasks: 3 (limit: 2359)
   Memory: 5.5M
   CGroup: /system.slice/nginx.service
           ??26183 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ??26184 nginx: worker process
           ??26185 nginx: worker process

Mar 25 12:42:49 debian10 systemd[1]: Starting A high performance web server and a reverse proxy server...
Mar 25 12:42:49 debian10 systemd[1]: Started A high performance web server and a reverse proxy server.

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

Доступ к вашему приложению Node.js

На данный момент Nginx настроен для обслуживания вашего приложения Node.js.

Теперь откройте веб-браузер и введите URL-адрес http://node.myserver.tld. Вы должны увидеть свое приложение Node.js на следующем экране:

Заключение

В приведенной выше статье вы узнали, как настроить приложение Node.js в Debian 10. Вы также узнали, как запустить приложение Node.js в качестве демона и настроить Nginx в качестве обратного прокси-сервера для обслуживания приложения. Я надеюсь, что теперь вы можете легко разместить свое приложение Node.js в производственной среде.