По мере того, как 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 минут бездействия
- Случайно сгенерированные имена приложений
- Метрики об использовании памяти, времени отклика и пропускной способности доступны, но невозможно добавить пользовательские метрики
Развертывание с 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-адрес приложения можно найти в журналах консоли. Более общие журналы о развертывании или другие команды теперь можно найти на панели инструментов .
Настройка и определение переменных среды
Один из способов настроить развертывание 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.
Сложно выбирать между обеими платформами. Это зависит только от ваших предпочтений и потребностей. Обязательно ознакомьтесь со всеми предлагаемыми планами. Удачи!

