Как подготовить nodejs к производству? - PullRequest
0 голосов
/ 13 января 2019

У меня есть приложение MEAN Stack, которое мне нужно разместить на CPanel, и я никогда ранее не развертывал приложение. Легко развернуть Angular-часть приложения, создав пакет в папке dist с помощью команды:

ng build --prod

Но я хотел бы знать, как мне разместить свой бэкэнд-код на сервере. Есть ли какие-либо команды / команды, которые могут создать минимизированный пакет, как в Angular?

Я также хотел бы знать, нужно ли мне устанавливать некоторые пакеты npm, чтобы убедиться, что мое приложение работает на сервере? Как будто я продолжаю читать о PM2 и Nginx, когда гуглюсь по поводу развертывания nodejs. Так в чем их преимущества?

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

Угловая версия 7

Версия узла 8.11.3

Ubuntu 16.04

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Установить Node.js Мы установим последний выпуск LTS Node.js, используя архивы пакетов NodeSource.

Во-первых, вам нужно установить NodeSource PPA, чтобы получить доступ к его содержимому. Убедитесь, что вы находитесь в своем домашнем каталоге, и используйте curl для получения сценария установки для архивов Node.js 6.x:

$ cd ~
$curl -sL https://deb.nodesource.com/setup_6.x -o nodesource_setup.sh

Вы можете проверить содержимое этого скрипта с помощью nano (или предпочитаемого вами текстового редактора):

$ nano nodesource_setup.sh

И запустите скрипт под sudo:

$ sudo bash nodesource_setup.sh

PPA будет добавлен в вашу конфигурацию, и ваш локальный кеш пакетов будет обновлен автоматически. После запуска сценария установки из nodeource вы можете установить пакет Node.js так же, как вы делали это выше:

$ sudo apt-get install nodejs

Пакет nodejs содержит двоичный файл nodejs, а также npm, поэтому вам не нужно устанавливать npm отдельно. Однако, чтобы некоторые пакеты npm работали (например, те, которые требуют компиляции кода из исходного кода), вам необходимо установить пакет build-essential:

$ sudo apt-get install build-essential

Среда выполнения Node.js установлена ​​и готова к запуску приложения! Давайте напишем приложение Node.js.

Примечание. При установке из PPA NodeSource исполняемый файл Node.js называется nodejs, а не node.

Создание приложения Node.js Мы напишем приложение Hello World, которое просто возвращает «Hello World» любым HTTP-запросам. Это пример приложения, которое поможет вам настроить ваш Node.js, который вы можете заменить своим собственным приложением - просто убедитесь, что вы изменили свое приложение для прослушивания соответствующих IP-адресов и портов.

Hello World Code Сначала создайте и откройте приложение Node.js для редактирования. В этом руководстве мы будем использовать nano для редактирования примера приложения с именем hello.js:

$ cd ~
$ nano hello.js

Вставьте следующий код в файл. При желании вы можете заменить выделенный порт 8080 в обоих местах (обязательно используйте порт без прав администратора, т. Е. 1024 или выше):

hello.js

#!/usr/bin/env nodejs
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(8080, 'localhost');
console.log('Server running at http://localhost:8080/');

Теперь сохраните и выйдите.

Это приложение Node.js просто прослушивает указанный адрес (localhost) и порт (8080) и возвращает «Hello World» с кодом успеха 200 HTTP. Поскольку мы прослушиваем localhost, удаленные клиенты не смогут подключиться к нашему приложению.

Тестовое приложение Чтобы протестировать ваше приложение, отметьте исполняемый файл hello.js:

$chmod +x ./hello.js

И запусти его так:

$./hello.js

Выход Сервер работает на http://localhost:8080/ Примечание. Запуск приложения Node.js таким способом блокирует дополнительные команды до тех пор, пока приложение не будет уничтожено нажатием Ctrl-C.

Чтобы протестировать приложение, откройте другой сеанс терминала на вашем сервере и подключитесь к localhost с помощью curl:

$curl http://localhost:8080

Если вы видите следующий вывод, приложение работает правильно и прослушивает правильный адрес и порт:

Output
Hello World

Если вы не видите правильный вывод, убедитесь, что ваше приложение Node.js запущено и настроено на прослушивание по правильному адресу и порту.

Убедившись, что оно работает, закройте приложение (если вы этого еще не сделали), нажав Ctrl + C.

Установить PM2 Теперь мы установим PM2, который является менеджером процессов для приложений Node.js. PM2 предоставляет простой способ управления приложениями и их демонизации (запускать их в фоновом режиме как службу).

Мы будем использовать npm, менеджер пакетов для модулей Node, который устанавливается с Node.js, для установки PM2 на наш сервер. Используйте эту команду для установки PM2:

$sudo npm install -g pm2

Опция -g указывает npm установить модуль глобально, чтобы он был доступен для всей системы.

Управление приложением с помощью PM2 PM2 прост и удобен в использовании. Мы рассмотрим несколько основных применений PM2.

Запустить приложение Первое, что вам нужно сделать, это использовать команду запуска pm2, чтобы запустить приложение hello.js в фоновом режиме:

$ pm2 start hello.js

Это также добавляет ваше приложение в список процессов PM2, который выводится при каждом запуске приложения:

Output
[PM2] Spawning PM2 daemon
[PM2] PM2 Successfully daemonized
[PM2] Starting hello.js in fork_mode (1 instance)
[PM2] Done.
┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────────────┬──────────┐
│ App name │ id │ mode │ pid  │ status │ restart │ uptime │ memory      │ watching │
├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────────────┼──────────┤
│ hello    │ 0  │ fork │ 3524 │ online │ 0       │ 0s     │ 21.566 MB   │ disabled │
└──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────────────┴──────────┘
Use `pm2 show <id|name>` to get more details about an app

Как видите, PM2 автоматически назначает имя приложения (на основе имени файла, без расширения .js) и идентификатор PM2. PM2 также поддерживает другую информацию, такую ​​как PID процесса, его текущее состояние и использование памяти.

Приложения, работающие под PM2, будут автоматически перезапущены, если приложение аварийно завершит работу или будет убито, но необходимо предпринять дополнительный шаг, чтобы приложение запустилось при запуске системы (загрузка или перезагрузка). К счастью, PM2 предоставляет простой способ сделать это, подкоманда запуска.

Подкоманда запуска генерирует и настраивает скрипт запуска для запуска PM2 и его управляемых процессов при загрузке сервера:

$ pm2 startup systemd

Последняя строка полученного результата будет содержать команду, которую вы должны запустить с привилегиями суперпользователя:

Output
[PM2] Init System found: systemd
[PM2] You have to run this command as root. Execute the following command:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy --hp /home/sammy

Запустите сгенерированную команду (аналогично выделенному выводу выше, но с вашим именем пользователя вместо sammy), чтобы настроить PM2 на запуск при загрузке (используйте команду из собственного вывода):

$ sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy --hp /home/sammy

Это создаст системный модуль, который запускает pm2 для вашего пользователя при загрузке. Этот экземпляр pm2, в свою очередь, запускает hello.js. Вы можете проверить состояние системного блока с помощью systemctl:

$ systemctl status pm2-sammy

Подробный обзор systemd приведен в разделе Systemd Essentials: работа со службами, единицами измерения и журналом.

Другое использование PM2 (необязательно) PM2 предоставляет множество подкоманд, которые позволяют вам управлять или искать информацию о ваших приложениях. Обратите внимание, что при запуске pm2 без каких-либо аргументов отобразится страница справки, включая пример использования, которая более подробно описывает использование PM2, чем этот раздел руководства.

Остановите приложение с помощью этой команды (укажите имя или идентификатор приложения PM2):

$ pm2 stop app_name_or_id

Перезапустите приложение с помощью этой команды (укажите имя или идентификатор приложения PM2):

$ pm2 restart app_name_or_id

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

$ pm2 list

Дополнительную информацию о конкретном приложении можно получить с помощью подкоманды info (укажите имя или идентификатор приложения PM2):

$ pm2 info example

Монитор процесса PM2 можно вызвать с помощью подкоманды monit. Отображает состояние приложения, использование процессора и памяти:

$ pm2 monit

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

Настройка Nginx в качестве обратного прокси-сервера Теперь, когда ваше приложение запущено и прослушивает localhost, вам нужно настроить способ доступа пользователей к нему. Для этой цели мы настроим веб-сервер Nginx в качестве обратного прокси.

В предварительном учебнике мы настраиваем нашу конфигурацию Nginx в файле / etc / nginx / sites-available / default. Открыть файл для редактирования:

$ sudo nano /etc/nginx/sites-available/default

В блоке сервера у вас должно быть существующее местоположение / блок. Замените содержимое этого блока следующей конфигурацией. Если ваше приложение настроено на прослушивание другого порта, обновите выделенную часть до правильного номера порта.

/etc/nginx/sites-available/default
. . .
  location / {
    proxy_pass http://localhost:8080;
    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, прослушивающий порт 8080 на локальном хосте.

Вы можете добавить дополнительные блоки местоположения к тому же блоку сервера, чтобы обеспечить доступ к другим приложениям на том же сервере. Например, если вы также запускаете другое приложение Node.js на порту 8081, вы можете добавить этот блок местоположения, чтобы разрешить доступ к нему через http://example.com/app2:

/etc/nginx/sites-available/default — Optional
   location /app2 {
     proxy_pass http://localhost:8081;
     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 верны, теперь вы сможете получить доступ к своему приложению через обратный прокси-сервер Nginx. Попробуйте, перейдя по URL вашего сервера (его общедоступный IP-адрес или доменное имя).

Заключение Поздравляем! Теперь у вас есть приложение Node.js, работающее за обратным прокси-сервером Nginx на сервере Ubuntu 16.04. Эта настройка обратного прокси-сервера достаточно гибкая, чтобы предоставить вашим пользователям доступ к другим приложениям или статическому веб-контенту, которым вы хотите поделиться. Удачи в разработке Node.js!

Я также нашел это справочное видео: https://www.youtube.com/watch?v=Jsmeh7q9Qv4

0 голосов
/ 13 января 2019

Вы можете развернуть код как есть, и он будет работать!

Вам не нужно минимизировать код. ВМ достаточно быстра, чтобы запустить ее. Минимизация обычно выполняется для уменьшения размера файла при отправке его с Сервера на Клиент, и, поскольку вы не отправляете какой-либо файл, вам не нужно об этом беспокоиться.

Я рекомендую PM2 для управления процессами узла после достижения рабочего состояния. Он включает в себя журналы, автоматический перезапуск и множество интересных функций, которые помогут вам.

Если вас беспокоит размер вашего каталога node_modules, возможно, вы сможете определить, какие пакеты используются только во время разработки (например, инструменты тестирования, такие как Jest и Mocha, транспортеры, такие как Babel, Typescript и т. Д.). Поместите их в ключ "devDependency" в файле package.json. Затем на рабочем месте запустите npm install --production, и он не установит то, что вы указали как devDependency. Это должно дать меньше node_modules.

Если вы следуете за Двенадцатью факторами , то также создайте файл среды для учетных данных только для производства.

Для полноты, если вы используете Babel / Typescript или любой другой подобный инструмент, вам нужно перенести проект в код Javascript, который может понять Node. Запустите соответствующие команды для создания производственной сборки.

Что касается Nginx, некоторые люди предпочитают размещать Nginx в качестве обратного прокси-сервера, чтобы он мог обслуживать статические ресурсы, а для запросов API они направляют его в Node API. Это «лучшие практики», поскольку Nginx можно легко настроить для более быстрого обслуживания статических ресурсов и включает в себя несколько вариантов для кэширования, защиты и т. Д.

...