Использование облачных серверов DO, git, nginx и forever.js для запуска и запуска приложения узла!

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это моя первая статья на Medium. Я профессионально занимаюсь веб-разработкой уже три года, и мне показалось, что пришло время расшириться и показать несколько действительно крутых вещей, над которыми я работал. Вот оно!

Обзор

В этой статье я расскажу вам, как взять завершенное приложение узла (в этом примере я буду использовать свое недавно завершенное приложение Приложение для сбора данных Acoma) и развернуть его в DigitalOcean (DO ) облачный сервер. Существует на удивление минимум документации по развертыванию приложений Node, но DO делает это очень простым.

При написании этой статьи было сделано несколько предположений:

  1. У вас есть локально функционирующее приложение Node (мое — MySQL-Express-Angular-Node или MyEAN). Под функционированием я подразумеваю, что он работает на локальном хосте.
  2. Ваше приложение использует git, или вы знакомы с использованием FTP-клиента для загрузки файлов на сервер. Я определенно рекомендую Github.
  3. У вас есть базовое понимание (или, по крайней мере, желание изучить) SSH и командную строку, а также машина, которая позволяет вам использовать ssh.
  4. У вас есть минимум $5 на месяц хостинга.

Почему DigitalOcean?

Вначале единственная причина, по которой я рассматривал вариант DO, заключалась в том, что я начинал новую работу в компании, занимающейся IaaS, и понял, что очень мало знаю об облачных вычислениях. Изучив хостинг моего текущего веб-сайта портфолио и поняв, что они еще даже не поддерживают приложения node, это не было трудным решением.

Что хорошего в DO, так это возможность настройки среды, а также простой и удобный интерфейс. Облачный сервер DO называется
«дроплетом», и при настройке нового дроплета вы можете выбрать дистрибутив Linux, размер хранилища, регионы центра обработки данных и многое другое в зависимости от ваших потребностей. Я знаю, что это звучит как реклама DigitalOcean, но клянусь, это потрясающе.

Настройка учетной записи и дроплета

Базовая настройка учетной записи очень проста. Посетите https://www.digitalocean.com и создайте учетную запись. Вам возможно придется подождать несколько часов, пока ваша учетная запись будет подтверждена, если вы решите не связывать свою учетную запись с Google или Github.

Примечание. Если вы студент и используете Github, подпишитесь на бесплатный Github Student Developer Pack и получите кредит в размере 100 долларов США, чтобы применить его к своей учетной записи DO.

После того, как вы настроили свою учетную запись в соответствии с инструкциями по настройке DO, вы должны оказаться на вкладке дроплетов, где будет указано, что у вас еще нет дроплетов. Нажмите большую зеленую кнопку «Создать каплю» и начните!

Отсюда можно пойти двумя путями: выбрать дистрибутив или выбрать приложение, запускаемое в один клик. Приложение в один клик — это удобный способ настройки среды с предустановленными зависимостями. В этом случае мы хотели бы использовать опцию NodeJS. Есть несколько, которые вы можете выбрать. Вы, вероятно, в безопасности, просто выбрав последнюю версию, если у вас нет особой причины не делать этого.

Примечание. Существует несколько причин, по которым вы можете захотеть использовать базовый дистрибутив вместо приложения, запускаемого в один клик. Многие клиенты знакомы с cPanel, и, поскольку есть мнение, что cPanel лучше всего работает на CentOS, это может быть вашим лучшим вариантом.

Далее вам нужно выяснить размер вашего сервера. Если это небольшое приложение или вы настраиваете его в качестве тестового дроплета для этого руководства, вам, вероятно, подойдет самый дешевый вариант (5 долларов в месяц). Вы всегда можете обновить позже, если обнаружите, что этого недостаточно.

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

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

Наконец, вы можете отредактировать имя хоста дроплета, если хотите. Хорошо сделать что-то описательное, если вы делаете несколько капель. Нажмите создать!

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

Отсюда вы можете вносить изменения, делиться ими, удалять и т. д.

Доступ к свежеиспеченной капле

Затем мы хотим получить доступ к дроплету. Существует встроенная веб-консоль DO, которую вы можете использовать в разделе Дополнительно, но пока я собираюсь использовать командную строку.

Примечание. Все введенные команды терминала обозначаются символом «$».

Предполагая, что ваш ключ настроен правильно, вы должны быть готовы получить доступ к своей капле с помощью SSH. Если у вас не получается, перечитайте статью о SSH. Шаг 4 показывает, как добавить ключ в существующую каплю.

Из командной строки вы можете войти в систему, используя имя пользователя (по умолчанию root) и IP-адрес вашего дроплета. IP-адрес находится в вашем списке капель на веб-сайте DO (см. предыдущий шаг).

$ ssh root@[your.ip.address.here]

Когда он предложит вам подтвердить, что вы хотите подключиться, введите «да». Теперь вы должны быть в домашнем каталоге вашей капли.

Клонирование вашего проекта

Самый простой способ разместить ваше приложение в дроплете — это клонировать его с помощью git. Git включен как часть установки приложения Node.js одним щелчком мыши. Если вы не хотите использовать git и знаете, как перемещать файлы с помощью FTP-клиента, смело пропустите этот шаг и сделайте все по-своему.

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

Чтобы клонировать ваш проект:

$ git clone <your.project.link>

Если вы используете Github, вы можете найти ссылку, перейдя в свой проект и нажав кнопку «Клонировать или загрузить». Введите или вставьте его в команду клонирования.

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

$ ls
$ cd <your_app_folder>
$ npm install

После того, как вы завершили отдельные шаги настройки, вы можете запустить свой сервер узла. Вы можете сохранить тот же файл server.js (или index.js), который вы использовали на своем локальном компьютере. Просто запомните номер порта, который вы используете. Для начала запустите ту же команду, которую вы использовали локально. Мой:

$ node server
Starting server at port 8080...

Поздравляем, ваше приложение (надеюсь) работает на вашем сервере!

Установка nginx и настройка прокси

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

Почему? JavaScript — это язык сценариев на стороне клиента. Он работает в браузере и традиционно не используется на сервере. В настоящее время он работает на вашем локальном хосте, но вы пока не можете получить к нему публичный доступ. Для этого мы будем использовать nginx (engine-x) в качестве обратного прокси. По сути, когда вы пытаетесь получить IP-адрес своего дроплета, nginx извлекает файлы приложения, которые обслуживаются с локального хоста, и перенаправляет их пользователю в браузере.

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

Следующий шаг — изменить proxy_pass, чтобы nginx знал, что нужно использовать ваше приложение. Это можно найти здесь, в /etc/nginx/sites-available/default в вашем дроплете. Измените его следующим образом:

$ vi /etc/nginx/sites-available/default

Если вы не знакомы (или ненавидите) vi, вместо этого вы можете использовать свой любимый экранно-ориентированный текстовый редактор. Когда файл открыт для редактирования, используйте эти команды vi для внесения изменений.

$ i

После ввода «i» вы попадете в режим редактирования Vi. Прокрутите вниз, пока не найдете блок с названием location. Это должно выглядеть примерно так:

location / {
 # First attempt to serve request as file, then
 # as directory, then fall back to displaying a 404.
 try_files $uri $uri/ =404;
 }

Замените этот блок на этот:

location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                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;
        }

Если вы настроили приложение для работы на порту, отличном от 8080, вам необходимо обновить его в строке proxy_pass.

Чтобы сохранить и выйти из текстового редактора, просто нажмите клавишу ESC, а затем:

$ :wq

Наконец, проверьте, а затем перезапустите сервер nginx, набрав:

$ sudo nginx -t 
$ sudo systemctl restart nginx

У DigitalOcean есть более полный обзор обновления файла nginx по умолчанию здесь, включая настройку нескольких приложений в одной и той же капле.

Запуск вашего приложения Node… навсегда

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

$ node server 

Попробуйте снова ввести свой IP-адрес. Заставка nginx должна быть заменена вашим приложением! Поздравляем, вы зашли так далеко, но мы еще не закончили.

Просто введите node server и запустите ваше приложение, это отлично работает в процессе разработки, когда вы постоянно запускаете и останавливаете его как часть разработки. В производственной среде вы не хотите, чтобы это когда-либо прекращалось. Если это так, вы хотите, чтобы он вернулся немедленно. В настоящее время, если ваш экземпляр перестает работать, вам нужно снова войти в свою каплю и запустить ее снова. К счастью, существует инструмент npm под названием forever.js, который гарантирует, что ваш скрипт продолжит работу.

$ sudo npm install forever -g

Есть несколько способов настроить это, в зависимости от вашего приложения. Я рекомендую прочитать файл README forever.js, чтобы узнать больше.

Самый простой способ заставить ваше приложение работать вечно — это ввести следующее (убедитесь, что вы закрыли свой предыдущий экземпляр узла):

$ forever start server.js
warn:    --minUptime not set. Defaulting to: 1000ms
warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info:    Forever processing file: server.js

Вы должны получить сообщение о том, что ваш файл server.js обрабатывается навсегда. Для подтверждения введите:

$ forever list
info:    Forever processes running
data:        uid  command         script    forever pid   id logfile                 uptime
data:    [0] wJf2 /usr/bin/nodejs server.js 12552   12558    /root/.forever/wJf2.log 0:0:1:0.35

Вы должны увидеть свой процесс в списке. Чтобы остановить определенный процесс, введите:

$ forever stop server.js

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

$ forever stopall

Вернитесь к своему приложению, обновите его и убедитесь, что вы все еще видите его. Если вы это сделаете, то все готово! Ваше приложение может быть поражено в любом месте по этому IP-адресу. Если ваш узел выйдет из строя, навсегда перезапустит его для вас.

Возможные следующие шаги

  1. Купите домен и зарегистрируйте свой IP-адрес в DNS, чтобы вы могли получить доступ к своему сайту без необходимости вводить IP-адрес.
  2. Настройте базу данных (статья скоро появится) на вашем дроплете
  3. Когда вы вносите обновления в свое приложение, подключитесь к дроплету по ssh, извлеките изменения и обязательно остановите процесс server.js и перезапустите его, чтобы новые изменения вступили в силу.
  4. Поделитесь статьей!

Вывод

Как я уже сказал в начале, это моя первая статья на Medium. Буду рад любым конструктивным отзывам. Статью было трудно понять? Слишком многословно? Есть неточности? Вскоре я напишу еще кое-что, особенно о создании динамических форм Angular, управляемых JSON, бэкэндах Node-MySql и создании автономных приложений, управляемых данными. Быть в курсе!