Как установить Node.js на Debian 10 и настроить Nginx в качестве внешнего прокси-сервера
На этой странице
- Предпосылки
- Начало работы
- Установите Node.js
- Создание приложения Node.js
- Установка и настройка PM2
- Настройка Nginx в качестве обратного прокси-сервера для Node.js
- Доступ к приложению Node.js
- Заключение
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 в производственной среде.