Статьи

Как развернуть Node-приложения: Heroku vs Now.sh

По мере того, как Node.js продолжает набирать популярность, появляются новые учебные пособия, которые учат вас писать серверные JavaScript-приложения и API-интерфейсы. Как только вы создадите свое новое блестящее приложение Node, что тогда?

В этой статье я рассмотрю несколько вариантов развертывания приложений Node. Мы посмотрим на Now.sh и Heroku .

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

Развертывание с Heroku

Чтобы иметь возможность развертывать приложения в Heroku, вам необходимо зарегистрироваться в Heroku и установить CLI Heroku для своей машины. Я предпочитаю работать с моего терминала!

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

Следующий код необходимо добавить в файл, чтобы Heroku знала, какую команду нужно выполнить, чтобы запустить приложение:

 web: node app.js 

После того, как это будет сделано, попробуйте войти в систему с терминала, введя heroku login . Heroku попросит вас ввести учетные данные для входа.

Далее перейдите к корню вашего проекта и введите команду: heroku create . Это создает приложение на Heroku, которое готово получить исходный код вашего проекта. Название приложения на Heroku создается случайным образом.

Чтобы развернуть наш код в Heroku, просто используйте git push heroku master . Мы можем зайти в приложение с heroku open командой heroku open которая откроет сгенерированный URL.

Вносить изменения в Heroku

Изменения могут быть внесены, следуя нормальному потоку Github:

 git add . git commit -m "Changes made to app" git push heroku master heroku open 

Полезные команды Heroku

  • Чтобы убедиться, что хотя бы один экземпляр приложения запущен: heroku ps:scale web=1
    Поскольку мы используем бесплатную платформу, ваше приложение не может быть расширено. Тем не менее, есть возможность уменьшить масштаб, чтобы не было запущено ни одного экземпляра приложения: heroku ps:scale web=0

  • Просмотр последних журналов (поток) в хронологическом порядке, сгенерированных Heroku: heroku logs --tail
    Также возможно показывать только журналы приложений. Журналы приложений являются выводом операторов console.log() в вашем коде и могут быть просмотрены с heroku logs --source app-name

  • Heroku предоставляет возможность запускать ваше приложение локально по адресу http: // localhost: 5000 : heroku local web

  • Список всех приложений Heroku: heroku apps

  • Удалить развертывание: heroku apps:destroy --app app-name

  • Добавить владельца (аккаунт) для доступа к приложению: heroku access:add me@email.com , то же самое для удаления heroku access:remove me@email.com

Heroku Переменные среды

Если вы работаете с файлом .env локально, вы можете использовать другие переменные среды для своего развертывания Heroku. Это можно установить с heroku config:set PORT=3001 . Эти значения перезаписывают переменные, установленные в .env файле .env .

Чтобы увидеть все определенные переменные среды Heroku, просто используйте heroku config . Если вы хотите удалить переменную окружения, например, для PORT , используйте heroku config:unset PORT .

Бесплатный план

  • Позволяет до пяти приложений Heroku
  • 512 МБ ОЗУ
  • Масштабирование недоступно, одновременно может быть запущен только один экземпляр приложения.
  • Спит после 30 минут бездействия
  • Случайно сгенерированные имена приложений
  • Метрики об использовании памяти, времени отклика и пропускной способности доступны, но невозможно добавить пользовательские метрики

Heroku Metrics

Развертывание с now.sh

Now.sh фокусируется на опыте разработчиков (DX) , который является своего рода уникальным. Они пытаются предложить инструменты, которые являются гибкими и невероятно простыми в использовании. Now.sh является частью Zeit.co, которая разработала несколько инструментов .

Для простоты мы установим CLI Now.sh только через npm:

 npm install now -g 

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

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

Теперь мы вошли в систему, давайте посмотрим на скрипт запуска в нашем package.json . Now.sh использует это для запуска приложения. Вот как выглядит поле scripts :

 "scripts": { "start": "node app" }, 

Давайте начнем с развертывания нашего кода в now.sh. Убедитесь, что вы находитесь в корне примера кода. Чтобы начать процесс развертывания, просто нажмите now . Я думаю, что вы можете увидеть опыт разработчиков там. Все может быть выполнено только с одним ключевым словом! Если вы вносите изменения в приложение и хотите повторно развернуть его, просто нажмите now в консоли, и все готово.

URL-адрес приложения можно найти в журналах консоли. Более общие журналы о развертывании или другие команды теперь можно найти на панели инструментов .

Deployment with Now.sh

Настройка и определение переменных среды

Один из способов настроить развертывание Now.sh — использовать файл now.json . Однако, поскольку мы уже используем файл package.json , мы можем добавить необходимые настройки под ключом now . Эта конфигурация позволяет настроить имя приложения и псевдоним, установить переменные среды , указать тип развертывания и определить механизм.

 "now": { "name": "my-first-app", "alias": "app1", "type": "npm", "engines": { "node": "4.7.2" }, "env": { "NODE_ENV": "production", "PORT": "3001" } } 

Также можно установить переменные среды через CLI: now -e NODE_ENV="production" -e PORT="3001" .

Если вы хотите предоставить файл dotenv, вы можете установить опцию now --dotenv , но, возможно, вы хотите использовать .env.production вместо .env ? Это можно решить с помощью --dotenv=.env.production . Наконец, вы также можете добавить производственный файл dotenv в ваш package.json .

 "now": { "name": "my-first-app", "alias": "app1", "type": "npm", "engines": { "node": "4.7.2" }, "dotenv": ".env.production" } 

Полезные команды Now.sh

  • Возможность добавить псевдоним в ваше развертывание: now alias deploy-url aliasname

  • Перечислите все развертывания с их уникальным кодом: now ls

  • Удалить развертывание: now rm unique-code

  • Форсировать новую сборку (в случае проблем): now -f

  • Масштабируйте свое веб-приложение (бесплатный план макс. 3): now scale deployment-url 3 . Иногда не легко предсказать количество трафика. Now.sh позволяет вам установить автоматическое масштабирование с min и max значением: now scale deployment-url min max .

Журналы мониторинга

Вывод журнала можно получить с помощью: now logs [deployment-url | deployment-id] now logs [deployment-url | deployment-id] . Также возможна более продвинутая регистрация:

  • now logs -a -q "GET" -n 10 deployment-url : Показывает 10 последних журналов, содержащих слово GET .

  • now logs --since=20171028 : Показывает все журналы от 28 октября 2017 года (формат ISO 8601)

Также можно получить доступ к вашим журналам, нажав на приложение в вашей панели управления Now.sh.

План OSS Now.sh

План OSS бесплатен и предлагает следующее:

  • Пропускная способность: 1 ГБ
  • Хранение журнала до 100 МБ
  • Возможно бесконечное количество развертываний
  • Количество одновременных экземпляров ограничено 3
  • Нет поддержки пользовательских доменов
  • Максимальный размер файла: 1 МБ
  • Нет поддержки автоматического масштабирования

Суть

И Heroku, и Now.sh предлагают отличную функциональность. Now.sh больше ориентируется на опыт разработчиков, предлагая простой в использовании интерфейс командной строки. С другой стороны, Heroku уделяет больше внимания визуальному ведению журнала и особенно мониторингу с помощью метрик.

Лично я предпочитаю простоту, которую предлагает Now.sh, просто используя одно ключевое слово now для (пере) развертывания. Для приложений Node мне нравится добавление свойства now в файл package.json для настройки вашего развертывания Now.sh. Нет необходимости добавлять дополнительные файлы, как того требует Procfile Heroku.

Сложно выбирать между обеими платформами. Это зависит только от ваших предпочтений и потребностей. Обязательно ознакомьтесь со всеми предлагаемыми планами. Удачи!