Перейти к содержимому

Настройка впс ноде js что это

  • автор:

Свой Node.js хостинг на VPS

По ходу изучения Node.js я создал много маленьких проектов. В дальнейшем мне понадобилось развернуть некоторые из них на сервере, чтобы иметь возможность развивать их в дальнейшем. Существующие хостинги Appfog и Heroku имеют ряд серьезных ограничений на бесплатных аккаунтах. На Appfog’е можно запускать одновременно не больше 2-х приложений, и бесплатная регистрация у них уже отключена. На Heroku можно создать только 5 приложений (без базы данных) без подтверждения аккаунта привязкой банковской карты. Платные аккаунты стоят очень дорого для меня (я ведь не зарабатываю на этих маленьких проектах): $20 долларов на Appfog, а heroku еще дороже. Коллеги порекомендовали попробовать хостинг на Digital Ocean — виртуальный сервер за $5 доларов в месяц, на котором можно легко настроить собственный хостинг node.js-проектов.

О том, как организовать такой хостинг, и будет идти речь в этой статье. Если по ходу руководства у вас возникнут проблемы, поищите их решение в конце статьи.

Создаем VPS

1. Регистрация на DigitalOcean

Первым делом регистрируемся на сайте DigitalOcean. Здесь мы купим VPS — виртуальный сервер. После удачной регистрации и входа в свою админку жмем на большую зеленую кнопку «Create» и нам предложат активировать свой аккаунт, внеся $5 долларов. Ниже на странице есть место для указания счастливого купона на $10, вводите OMGSSD10 или поищите свежий купон. Так как моя банковская карточка не подошла хостеру, я оплатил пейпалом и у меня на счету оказалось $15. Этого должно хватить на 3 месяца.

2. Создаем SSH-ключ

Доступ к удаленным серверам обычно делается по ssh. Это такая технология защищенных соединений. Зайти в нашу будущую VPS можно по паролю или по SSH-ключу. Я настоятельно рекомендую второй вариант, не придется все время вводить пароль. Также, SSH-ключ все равно нужно будет указать при создании нашего нового «дроплета» (словом «droplet» DigitalOcean называет виртуальный сервер).

Выполните следующие две команды в терминале, чтобы сгенерировать ssh-ключ:

$ cd ~/.ssh $ ssh-keygen -t rsa -C "email@example.com" 

И тут нас просят ввести имя файла ключа. Рекомендую использовать что-нибудь вроде id_rsa_digitalocean_dropletname , где имя дроплета — это либо имя домена, на который мы привяжем наш сервер, либо просто какое-нибудь осмысленное название. Парафразу можно оставить пустой, и так сойдет.

После этого будет создано два файла: ssh-ключ и public-ключ. Скопируем публичный ключ в буфер обмена модным способом:

$ cat ~/.ssh/id_rsa_digitalocean_dropletname.pub | pbcopy 

Теперь зайдем в админку в digitaloceans в раздел SSH-keys и создадим там новый ключ, вставив его из буфера обмена.

3. Создаем дроплет
  • В качестве hostname укажите доменное имя или что-нибудь осмысленное, это название роли не играет
  • Размер выбирайте самый маленький, его потом можно будет увеличить из терминала
  • Регион любой, я выбрал Амстердам
  • Образ выберите на вкладке Applications, c названием «Dokku v0.2.3 on Ubuntu. » или похожим
  • Укажите SSH-ключ, который мы создали на предыдущем шаге

Выбранный образ помимо операционной системы Ubuntu 14.04 содержит самое главное: Dokku. Это готовая система для хостинга node.js-проектов, очень похожая на Heroku. Использование образа с предустановленным Dokku избавит нас от необходимости устанавливать и настраивать систему для хостинга Node.js.

4. Настройка Дроплета и DNS

Droplet setup page

Теперь нужно настроить новосозданный сервер. Зайдите в браузере по IP-адресу дроплета и вы увидете экран настройки. Если такой страницы нет, смотрите что делать в конце статьи.

Здесь вы должны убедится, что поле «Public Key» заполнено. Если нет — укажите свой public key из недавно сгенерированного ключа. Однако практика показала, что лучше вообще удалить такой дроплет и создать новый, правильно указав SSH-ключ.

Если у вас нет доменного имени, то оставьте все, как есть, жмите «Finish setup» и переходите к следующему пункту. Ваше приложение будет доступно примерно так: «19.19.197.19:46667», по IP адресу и номеру порта. Если вас это не устраивает — срочно купите доменное имя. В любом случае, настроить доменное имя можно будет позже, о чем я расскажу в конце.

Если вы укажете доменное имя, у вас будет возможность настроить доступ к приложениям через поддомены. Например, если ваше доменное имя mydomain.com , тогда ваше приложение будет доступно по адресу app.mydomain.com . Также есть возможность привязать приложение на главный домен, но об это я в данной статье не расскажу.

Укажите в поле Hostname ваше доменное имя и поставьте галочку «Use virtualhost naming for apps». Теперь идите в панель управления вашим доменным именем и впишите две новые настройки примерно так:

apps.mydomain.com. IN A [Droplet IP address]
*.apps.mydomain.com. IN A [Droplet IP address]

mydomain.com. IN A [Droplet IP address]
*.mydomain.com. IN A [Droplet IP address]

Точный синтаксис уточните у себя в админке доменного имени или у домен-провайдера.

Теперь возвращайтесь на страницу настройки дроплета и жмите «Finish setup».

5. Настраиваем использование SSH

Давайте попробуем соединиться с нашим новым сервером. Чтобы получить доступ дроплету через SSH-ключ, нужно еще одно маленькое действие. Откройте терминал и передите в папку с ssh-ключами:

$ cd ~/.ssh/ 

Если у вас еще нет файла «config» в этой папке (проверка — $ ls ), то его необходимо создать:

$ touch config 

Теперь открываем config( $ open config ) и записываем в него следующие данные:

Host YOUR.DROPLET.IP.ADDRESS IdentityFile ~/.ssh/id_rsa_digitalocean_dropletname

Где в первой строчке IP адрес или доменное имя, на второй строчке — имя созданного ssh-ключа для этого дроплета.

$ ssh root@YOUR.DROPLET.IP.ADDRESS 

Где после «@» надо указать или доменное имя, или IP.

Если вы пропустили создание SSH-ключа, войти можно по паролю, который пришел к вам на почту. Для этого выполните ту же команду:

$ ssh root@YOUR.DROPLET.IP.ADDRESS 

и на вопрос о продолжении соединения напишите «yes». После этого введите пароль.

Если вы увидели приветственный экран, значит все хорошо. Закроем соединение командой exit и перейдем к следующему пункту.

Деплоим приложение

Сервер готов, теперь пришла очередь развернуть тестовое приложение и проверить его работу.

1. Подготавливаем проект

Возьмите простой проект, типа Hello, world, без mongodb и прочего. Проверьте, что в проекте есть самое главное: «package.json», «Procfile» и какой-нибудь «app.js». «Package.json» должен выглядеть примерно так:

< "name": "dokku-demo-application", "version": "1.0.0", "engines": < "node": ">=0.10.*", "npm": ">=1.3" >, "dependencies": < "express": "~3.0" >> 

Содержание файла package.json важно, так как по нему dokku будет устанавливать модули для приложения. А Procfile должен выглядеть так:

web: node server.js

Инициализируем в папке проекта репозиторий (если его не было), добавляем все файлы и коммитим:

$ git init && git add -A && git commit -m "Initial commit" 

Теперь наш проект готов к разворачиванию на сервере.

2. Заливаем и запускаем проект

Деплоить приложение будем с помощью команды git push . И для этого добавим ссылку на удаленный репозиторий нашего дроплета:

$ git remote add dokku dokku@mydomain.com:application_name 

Если у нас было доменное имя для дроплета, то пишем его после «dokku@», иначе — указываем IP. После двоеточия мы указываем имя приложения. Этот индификатор будет использоваться внутри dokku.

Теперь вызываем команду push :

$ git push dokku master 

И начинается загрузка приложения, установка модулей. В конце на экране покажется url, по которому можно запустить проект. Это будет ссылка вида 192.88.67.168:46567 или app1.mydomain.com, в зависимости от настроек dokku.

По идее проект должен быть запущен после этого. Но если нет, то заходим в по ssh в наш дроплет и выполняем две команды

$ cd /home/dokku/YOUR-APP-NAME $ dokku run YOUR-APP-NAME node app.js 

Запускаем в браузере ссылку, полученную ранее, и радуемся!

Проблемы и их устранение

Я сам разбирался с настройкой такого хостинга более суток, и набил несколько шишек. И чтобы вы могли съэкономить свое время, привожу здесь несколько возможных проблем и пути их решения.

1. Мою банковскую карточку не приняли для оплаты

Они такие, да. Даже Visa Classic им не нравится. Оплатите через PayPal, это не трудно.

2. Создал дроплет, но по IP адресу нет страницы настройки dokku
  • указать образ с Dokku
  • нажмите кнопку «Rebuild from Image».
3. Не могу получить доступ к дроплету ни по паролю, ни по SSH
  1. Наверное, вы как-то пропустили шаг настройки dokku, или dokky создался не правильно.
  2. Проверьте, если доступна страница настройки dokku по IP адресу дроплета, то вернитесь к шагу 4 создания VPS.
  3. Если страницы настроек нет, тогда попробуйте сбросить пароль и повторить попытку доступа через терминал. Если даже в этом случае доступ по паролю будет неудачным, тогда переустановите дроплет, как описано в предыдущем пункте.
4. Я не знаю пароля от дроплета

Если у вас нет пароля, зайдите на страницу управления дроплетом, вкладка «Access» и сделайте reset пароля. Тогда на почту придет новый пароль.

5. Проект не запускается по указанной ссылке

Если настройки dokku верны, такая ситуация возможна, если приложение запустилось с ошибкой и было закрыто. Зайтиде по ssh в дроплет и проверьте логи:

$ dokku logs

Возможно, ошибка будет понятна. Или же вы забыли запустить ваш проект после push’а:

$ cd /home/dokku/YOUR-APP-NAME $ dokku run YOUR-APP-NAME node app.js 
6. Я пропустил создание SSH, и теперь хочу сделать авторизацию по SSH-ключу

Я пытался создать новый дроплет без указания ssh-ключа на странице создания дроплета, но на странице настроек dokku все равно просят ввести паблик-ключ. После этого я принял некоторые действия, но все равно зайти по ssh-ключу у меня не вышло, только пароль. Так что я не знаю, как лучше действовать в данной ситуации. Возможно, ошибка происходила при команде копирования ssh ключа в дроплет. Гуглите. В крайнем случае создайте новый дроплет с самого начала, по уму, как в этом руководстве. Пример поиска.

7. Как добавить доменное имя к уже существующему дроплету

Это делается совсем не трудно, всего в несколько шагов. В настройках DNS вашего доменного имени указать настройки:

apps.mydomain.com. IN A [Droplet IP address]
*.apps.mydomain.com. IN A [Droplet IP address]

В дроплете зайти в папку dokku и открыть для редактирования HOSTNAME:

$ cd /home/dokku/ $ vim HOSTNAME 

Нажать клавишу «i» и записать в файле «HOSTNAME» доменное имя вместо IP адреса; затем нажать Esc , кнопки :wq и Enter . Ура! Мы только что успешно использовали легендарный Vim!
Чтобы проекты запускались на поддоменах, нужно создать файл VHOST :

$ touch VHOST 

И записать в файле доменное имя таким же способом, как это было в предыдущем пункте. В противном случае проекты будут доступны через порт. Теперь надо перезалить проект, а перед этим удалить его из dokku:

$ dokku delete app_name 

Удалить в репозитории предыдущий remote с IP-адресом в названии:

$ git remote remove dokku 

И добавить новый remote под старым именем:

$ git remote add dokku dokku@apps.mydomain.com:app_name 

Настраиваем SSH-ключ на новый хостинг, дописывая в ~/.ssh/config новые строчки:

Host YOUR.DROPLET.IP.ADDRESS IdentityFile ~/.ssh/id_rsa_digitalocean_dropletname

Смело пушаем проект:

$ git push dokku master 

Теперь проекты будут доступны на поддоменах.

Всем спасибо за внимание, хороших выходных!

Что такое Node.js

Node или Node.js — это программная платформа, которая позволяет использовать JavaScript не только для браузера. В этой статье мы подробно разберем, что такое Node.js и какие особенности она имеет.

Что такое Node.js 1

Node.js

Node.js ― это не отдельный язык программирования, а среда для выполнения JavaScript. Или, другими словами, платформа для работы с JavaScript на стороне сервера. Раньше JavaScript мог выполнять только браузер. С помощью Node.js это можно делать без него.

Чаще всего Node используют для написания серверной части сайта (для неё он и был создан изначально), однако сейчас на нём пишут и десктопные программы. На данный момент эту технологию для своего бэкенда используют PayPal, eBay, Amazon и Netflix.

Платформу разработал Райан Дал, а спонсором разработки выступила компания Joyent. Среда была представлена в 2009 году. Node.js основана на движке V8. V8 ― это программа, которая преобразует JavaScript в машинный код, то есть код понятный процессору. Этот же движок используется в основе браузера Google Chrome.

Одного V8 для удобной работы мало, так как он может работать только с JavaScript. Он не умеет читать файлы, не может работать с сетью вне браузера, поэтому Райан Дал вместе с разработчиками с помощью дополнительных библиотек и кода добавили дополнительные возможности к V8. Это позволило сделать из JavaScript веб-сервер.

  • Использование одного языка JavaScript как на клиентской стороне в браузере, так и на сервере.
  • NPM (Node Package Manager) ― это менеджер пакетов, или набор готовых модулей. Это своеобразный склад, где программисты делятся своим кодом. Комьюнити очень большое, поэтому в NPM на данный момент собрано огромное количество решений для разных задач.
  • Увеличение скорости работы. Node.js ― это однопоточная и асинхронная система. Вы можете читать файлы, отправлять электронные письма, запрашивать данные и совершать другие действия одновременно. Подробнее об однопоточной работе мы расскажем ниже.

Node.js основы: что такое многопоточная и однопоточная работа

При изучении серверных процессов нужно знать, что есть 2 схемы работы с сервером ― многопоточная и однопоточная.

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

При выполнении запроса потребляются ресурсы сервера: память, процессорное время и количество ядер. Получается, при многопоточном подходе сервер может выполнить только один запрос за раз? Нет. Каждый запрос помещается в отдельный поток. Поток ― это время и ресурсы, которые выделяет сервер для выполнения небольшого блока инструкций. Таким образом, количество потоков зависит от мощности машины. Чем больше ресурсов, тем больше потоков и тем больше запросов может выполнить сервер одновременно. Такая модель работы называется thread-per-request model (модель потока на запрос).

Что такое Node.js 2

Многопоточная система

Если свободные потоки заканчиваются, сервер не может выполнить задачу. Она попадает в очередь и ждёт, пока не освободиться один из потоков. Например, вам нужно выполнить 3 запроса. Вам доступно 4 потока. Мощность сервера позволяет вам выполнить их все за раз. Если вам нужно будет выполнить 5 запросов, то одна задача не поместится и ей придётся ждать свободного потока. Из-за нескольких потоков, которые обрабатывают запросы, система и получила название многоканальная.

Как работает Node.js?

Node.js работает по однопоточному принципу в рамках событийно-ориентированной модели. Его архитектура не блокирует ввод и вывод. При этом подходе:

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

Таким образом, веб-сервер всегда находится в работе, а не в процессе ожидания. Такой способ позволяет эффективно использовать ресурсы и выполнять команды намного быстрее.

Что такое Node.js 3

Node.js для начинающих. Однопоточная система

Отличным примером является загрузка страницы сайта. Представьте, вы хотите загрузить страницу сайта. Веб-ресурс может показаться пользователю, как только браузер получит весь необходимый контент. При использовании обычного веб-сервера с многопоточной системой каждый файл (картинка, название, основной текст, фон) будет запрашиваться по отдельности. Например, сначала фон, затем, как только данные фона будут получены, веб-сервер отправит запрос на картинки и так далее. Из-за долгого ожидания ответа страница будет грузиться дольше. Как мы уже говорили Node.js не тратит время на ожидание. Во время поиска фоновой картинки нода запросит другую картинку. За счёт этого сайт загрузится быстрее.

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

Что такое Node.js 3

  1. Таймеры (timers). На этом этапе срабатывают коллбэки методов setInterval() и setTimeout();
  2. Ожидающие обратные вызовы (pending callbacks). В этой фазе срабатывает практически все коллбэки, отложенные в предыдущую фазу. Исключение — setImmediate(), close и таймеры;
  3. Ожидание и подготовка (idle, prepare). Отвечает за внутренние цели;
  4. Опрос (poll). Принимает новые события ввода/вывода;
  5. Проверка (check). На этом этапе срабатывают коллбэки, вызванные методом setImmediate();
  6. Закрытие (close callbacks). Закрывает обратный вызов, например, socket.on(‘close’, …).

Чаще всего платформу Node используют для создания веб-сервисов, которые требуют интенсивного обмена информацией с пользователями, например, чатов, социальных сетей и подобных систем. Также Node хорошо подходит для разработки RTA — веб-приложений, которые реагируют на действия пользователя в режиме реального времени. Например, онлайн-редакторов типа Google Docs, который позволяет работать над одним документом нескольким пользователям одновременно.

Node.js модули

Любой сложный проект состоит из файлов с кодом. Благодаря файловой системе удобно структурировать проект, а также выносить нужные части для других проектов. Каждый файл в Node.js называется модуль.

Модуль можно подключить с помощью функции require() . В скобках нужно указать путь к файлу. Набор модулей уже обширен. Например, вы можете использовать модуль Node.js PostgreSQL для взаимодействия с базой данных.

Подробнее о встроенных модулях и их функциональности можно узнать в официальной документации.

Node.js, PHP или Python?

Node.js не такой популярный как PHP. На PHP написаны такие CMS как WordPress, Joomla!, Drupal. И именно на этих системах управления работает большинство сайтов.

Фреймворков для PHP пока больше, чем для Node.js. Инфраструктура ноды только начинает развиваться. Популярными фреймворками для Ноды являются:

AdonisJs. Это фреймворк, который работает на всех основных операционных системах. Он обладает стабильной экосистемой для написания серверных веб-приложений. Идеально подходит для разработчиков Laravel, которые пробуют переход на Node.js. Особенности AdonisJs:

  • есть ORM, который помогает создавать безопасные SQL-запросы,
  • API и система аутентификации на основе сеансов,
  • лёгкий в освоении конструктор запросов,
  • высокая безопасность,
  • поддержка баз данных No-SQL, таких как MongoDB.

Express.js. Это самый простой, гибкий и быстрый фреймворк Node.js. Express.js подходит для быстрой разработки простых приложений, так как имеет легкодоступные инструменты генерации API. Особенности Express.js:

  • высокая настраиваемость,
  • быстрое освоение программы,
  • быстрая разработка на стороне сервера,
  • поддерживает архитектуру MVC,
  • поддержка NoSQL-баз данных из коробки.

Koa.js. Этот фреймворк был создан командой Express.js. Разработчики хотели учесть все недостатки Express.js и создать более совершенный продукт. Koa работает в разных браузерах, без использования обратных вызовов и обладает мощной системой обработки ошибок. Может использоваться для фронтенд- и бэкэнд-системы. Особенности Koa.js:

  • встроенный catchall ошибок,
  • использование генераторов для управления и обработки обратных вызовов,
  • использует каскадную модель промежуточного ПО.

Если сравнивать Python и Node, то их главное различие ― сфера применения. Нода подходит для веб-разработки и некоторых десктопных программ, в то время как Python является универсальным решением. С его помощью можно сделать не только веб-разработку, но и Data Science, Machine Learning.

Как попробовать работу в Node.js? Вам поможет статья Как установить Node.js на Ubuntu. Как проверить версию Node.js, если программа уже установлена? Зайдите в терминал и введите команду node -v . В результате вы увидите примерно такой вывод:

Что такое Node.js 4

Помогла ли вам статья?

Спасибо за оценку. Рады помочь ��

Настройка приложения Node.js для работы в среде Ubuntu 18.04

Настройка приложения Node.js для работы в среде Ubuntu 18.04

Node.js — среда исполнения JavaScript с открытым исходным кодом, предназначенная для построения серверных и сетевых приложений. Данная платформа работает в операционных системах Linux, macOS, FreeBSD и Windows. Хотя вы можете запускать приложения Node.js через командную строку, этот обучающий модуль посвящен их запуску в качестве службы. Это означает, что они будут перезапускаться при перезагрузке системы или неисправности, и что их можно безопасно использовать в производственной среде.

В этом обучающем модуле вы научитесь создавать готовую производственную среду Node.js на одном сервере Ubuntu 18.04. Этот сервер будет выполнять приложение Node.js под управлением PM2 и предоставлять пользователям безопасный доступ к приложению через обратный прокси-сервер Nginx. Сервер Nginx обеспечивает поддержку HTTPS с использованием бесплатного сертификата от Let’s Encrypt.

Предварительные требования

Этот обучающий модуль предполагает, что у вас имеется следующее:

  • Сервер Ubuntu 18.04, настроенный в соответствии с указаниями обучающего модуля Начальная настройка сервера Ubuntu 18.04. В системе должен быть задан пользователь без привилегий root с привилегиями sudo, а также должен быть включен брандмауэр.
  • Доменное имя, указывающее на публичный IP-адрес вашего сервера. В этом обучающем модуле мы будем использовать доменное имя example.com.
  • Веб-сервер Nginx, установленный в соответствии с указаниями обучающего модуля Установка Nginx в Ubuntu 18.04.
  • Конфигурация Nginx с SSL с использованием сертификатом Let’s Encrypt. Защита веб-сервера Nginx сертификатом Let’s Encrypt в Ubuntu 18.04 поможет вам выполнить необходимые настройки.

Если предварительные требования выполнены, у вас должен быть сервер, обслуживающий используемую по умолчанию страницу назначения вашего домена по адресу https:// example.com / .

Шаг 1 — Установка Node.js

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

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

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

Завершив проверку скрипта, запустите его от имени пользователя sudo :

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

Чтобы проверить номер версии Node.js, установленной на начальном шаге, введите:

Output
v8.11.3

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

Пакет nodejs содержит двоичный файл nodejs , а также диспетчер пакетов npm для модулей Node, так что отдельно устанавливать npm не нужно.

npm использует файл конфигурации в домашнем каталоге, чтобы отслеживать обновления. Он создается при первом запуске npm . Выполните следующую команду, чтобы проверить установку npm и создать файл конфигурации:

Output
5.6.0

Для работы некоторых пакетов npm (например, требующих компиляцию кода из источника) потребуется установить пакет build-essential :

Теперь у вас есть необходимые инструменты для работы с пакетами npm , которые требуют компиляции кода из источника.

Установив исполняемый модуль Node.js, мы можем перейти к написанию приложения Node.js.

Шаг 2 — Создание приложения Node.js

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

Вначале создадим образец приложения под именем hello.js :

Вставьте в файл следующий код:

const http = require('http'); const hostname = 'localhost'; 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!» с кодом успешного выполнения a 200 HTTP. Поскольку мы прослушиваем localhost , удаленные клиенты не смогут подключиться к нашему приложению.

Чтобы протестировать приложение, введите:

Результат будет выглядеть следующим образом:

Output
Server running at http://localhost:3000/

Примечание. Такой способ запуска приложения Node.js блокирует дополнительные команды, пока приложение не будет закрыто нажатием CTRL+C .

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

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

Output
Hello World!

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

Убедившись, что приложение работает, остановите его (если еще не сделали этого) нажатием CTRL+C .

Шаг 3 — Установка PM2

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

Используйте npm для установки последней версии PM2 на своем сервере:

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

Вначале используем команду pm2 для запуска вашего приложения hello.js в фоновом режиме:

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

Output
[PM2] Spawning PM2 daemon with pm2_home=/home/sammy/.pm2 [PM2] PM2 Successfully daemonized [PM2] Starting /home/sammy/hello.js in fork_mode (1 instance) [PM2] Done. ┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬───────┬──────────┐ │ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │ ├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼───────┼──────────┤ │ hello │ 0 │ fork │ 1338 │ online │ 0 │ 0s │ 0% │ 23.0 MB │ sammy │ disabled │ └──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴───────┴──────────┘ Use `pm2 show ` to get more details about an app

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

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

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

Output
[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 sammy --hp /home/sammy

Запустите команду из результатов, указав свое имя пользователя вместо sammy :

Дополнительно мы можем сохранить список процессов PM2 и соответствующие среды:

Теперь вы создали блок systemd, который запускает pm2 для вашего пользователя при загрузке. Этот экземпляр pm2 запускает hello.js .

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

Проверьте состояние блока systemd:

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

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

Выведем список приложений, управление которыми осуществляет PM2:

Получим информацию об определенном приложении по App name :

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

При запуске команды pm2 без аргументов отображается страница справки с примерами использования.

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

Шаг 4 — Настройка Nginx в качестве обратного прокси-сервера

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

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

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

/etc/nginx/sites-available/example.com

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; > . > 

Так сервер настраивается для ответа на запросы root. Если наш сервер доступен по адресу example.com , при попытке доступа к https:// example.com / через браузер будет отправлен запрос hello.js с прослушиванием порта 3000 хоста localhost .

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

/etc/nginx/sites-available/example.com — Optional

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; > . > 

Завершив добавление блоков location для ваших приложений, сохраните файл и закройте редактор.

Убедитесь в отсутствии ошибок синтаксиса с помощью следующей команды:

Если ваше приложение Node.js запущено и конфигурации вашего приложения и Nginx настроены правильно, вы должны иметь возможность доступа к вашему приложению через обратный прокси-сервер Nginx. Попробуйте открыть URL вашего сервера (публичный IP-адрес или доменное имя).

Заключение

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

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Установка и настройка Node.js на VPS

2. Ставим Node.js:

sudo yum install nodejs

3. Проверяем установку командами:

node —version
npm —version

4. Устанавливаем инструментарий разработчика.

sudo yum install gcc-c++ make

5. Создаем тестовый файл:

nano hello_world.js

Добавляем в наш файл следующее содержимое:

var http = require(‘http’);
http.createServer(function (req, res) res.writeHead(200, );
res.end(‘Hello World\n’);
>).listen(8080, ‘IP_ADDRESS’);
console.log(‘Server running at http://IP_ADDRESS:8080/’);

Порт может быть любым свободным, IP_ADDRESS — IP-адрес Вашей VPS.

6. Запускаем:

node hello_world.js

Должна появиться строка Server running at http://IP_ADDRESS:8080/

7. Проверяем доступ, подключившись с другого терминала командой:

curl http://IP_ADDRESS:8080/

И открываем в браузере ссылку http://IP_ADDRESS:8080/

Если ссылка в браузере не открывается/соединение через curl не устанавливается, проверьте настройки firewall на Вашей VPS.

Рейтинг лучших SSD VPS по ссылке.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *