По мере того, как 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 [email protected]
, то же самое для удаленияheroku access:remove [email protected]
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.
Сложно выбирать между обеими платформами. Это зависит только от ваших предпочтений и потребностей. Обязательно ознакомьтесь со всеми предлагаемыми планами. Удачи!