Каков наилучший способ развертывания Node.js?
У меня есть Dreamhost VPS (это то, что они называют виртуальной машиной ), и я смог установить Node.js и настроить прокси. Это прекрасно работает до тех пор, пока я поддерживаю соединение SSH, которое я запустил, с открытым узлом.
node.js
service
deployment
daemon
respectTheCode
источник
источник
Ответы:
Ответ 2016 года : почти каждый дистрибутив Linux поставляется с systemd, что означает, что навсегда, monit, PM2 и т. Д. Больше не нужны - ваша ОС уже выполняет эти задачи .
Создайте
myapp.service
файл (очевидно, заменив «myapp» именем вашего приложения):Обратите внимание, если вы новичок в Unix:
/var/www/myapp/app.js
должно быть#!/usr/bin/env node
в самой первой строке.Скопируйте файл службы в
/etc/systemd/system
папку.Расскажите systemd о новом сервисе с
systemctl daemon-reload
.Начни с
systemctl start myapp
.Включите его при загрузке с
systemctl enable myapp
.Смотрите логи с
journalctl -u myapp
Это взято из раздела Как мы развертываем приложения для узлов в Linux, выпуск 2018 года , который также включает команды для генерации AWS / DigitalOcean / Azure CloudConfig для построения серверов Linux / узлов (включая
.service
файл).источник
Failed to issue method call: Unit name ... is not valid.
?/etc/systemd/system
вам может понадобиться запуститьsystemctl daemon-reload
(systemd обычно сообщит вам, если это необходимо). TBH лучше всего задавать как отдельный вопрос./etc/systemd/system
, вы можете просто использоватьsystemctl enable /full/path/to/myapp.service
, который создает символическую ссылку/etc/systemd/system
для вас.node
вызывается/var/www/myapp/app.js
сам по себе. В Unix, если вы сделаете файл исполняемым, и первая строка, начинающаяся с#!/some/file
файла, будет интерпретирована с этим двоичным файлом. Google "переводчик Unix", чтобы узнать больше.Используйте навсегда . Он запускает программы Node.js в отдельных процессах и перезапускает их в случае смерти.
Использование:
forever start example.js
начать процесс.forever list
чтобы увидеть список всех процессов, запущенных навсегдаforever stop example.js
чтобы остановить процесс илиforever stop 0
остановить процесс с индексом 0 (как показаноforever list
).источник
forever stop 0
была ошибка, и вещи вроде как развалились оттуда. Я пытался сделать это без рута от своего собственного пользователя, чтобы я мог легко очистить, как только я найду правильное решение. Это может быть моей проблемой. Я посмотрю на это еще немного.Я написал о моем методе развертывания здесь: Развертывание приложений node.js
Коротко:
источник
pm2 делает трюки.
Возможности: Мониторинг, горячая перезагрузка кода, встроенный балансировщик нагрузки, сценарий автоматического запуска и процессы восстановления / сброса.
источник
Вы можете использовать
monit
,forever
,upstart
или ,systemd
чтобы начать свой сервер.Вы можете использовать Varnish или HAProxy вместо Nginx (известно, что Nginx не работает с веб-сокетами).
В качестве быстрого и грязного решения , которое вы можете использовать ,
nohup node your_app.js &
чтобы предотвратить приложение , оканчивающиеся на сервере, ноforever
,monit
и другие предлагаемые решения лучше.источник
Я создал скрипт Upstart, который в настоящее время используется для моих приложений:
Настройте все перед #########, создайте файл в /etc/init/your-service.conf и вставьте его туда.
Тогда ты можешь:
источник
Я написал довольно полное руководство по развертыванию Node.js с примерами файлов:
Учебник. Как развертывать приложения Node.js, с примерами
Он охватывает такие вещи, как http-прокси, SSL и Socket.IO .
источник
Вот более длинная статья о решении этой проблемы с помощью systemd: http://savanne.be/articles/deploying-node-js-with-systemd/
Некоторые вещи, которые нужно иметь в виду:
Все эти вещи легко сделать с помощью systemd.
источник
Если у вас есть root-доступ, вам лучше настроить демон так, чтобы он работал безопасно и работал в фоновом режиме. Вы можете прочитать, как это сделать для Debian и Ubuntu, в блоге. Запустите Node.js как сервис в Ubuntu .
источник
Навсегда сделаем свое дело.
@ Кевин: Вы должны быть в состоянии убить процессы в порядке. Я бы немного проверил документацию немного. Если вы можете воспроизвести ошибку, было бы здорово опубликовать ее как проблему на GitHub.
источник
Попробуйте это: http://www.technology-ebay.de/the-teams/mobile-de/blog/deploying-node-applications-with-capistrano-github-nginx-and-upstart.html
Отличное и подробное руководство по развертыванию приложений Node.js с Capistrano, Upstart и Nginx
источник
Как сказал Box9, Forever - хороший выбор для производственного кода. Но также возможно поддерживать процесс, даже если SSH- соединение закрыто от клиента.
Хотя это не обязательно хорошая идея для производства, это очень удобно, когда вы находитесь в середине длительных сеансов отладки, или для отслеживания вывода на консоль длинных процессов, или всякий раз, когда полезно отключить ваше соединение SSH, но поддерживать терминал на сервере. подключиться позже (например, запустить приложение Node.js дома и подключиться к консоли позже на работе, чтобы проверить, как идут дела).
Предполагая, что ваш сервер - * nix box, вы можете использовать команду screen из оболочки, чтобы сохранить процесс работающим, даже если клиентский SSH закрыт. Вы можете загрузить / установить экран из Интернета, если он еще не установлен (найдите пакет для вашего дистрибутива, если Linux, или используйте MacPorts, если OS X).
Это работает следующим образом:
При необходимости вы можете запустить несколько сеансов экрана одновременно, как это, и вы можете подключиться к любому из них с любого клиента. Прочитайте документацию онлайн для всех вариантов.
источник
nohup
иforever
Forever - это хороший вариант для поддержания работоспособности приложений (и его можно установить в виде модуля npm).
Но для более серьезного «развертывания» - таких как удаленное управление развертыванием, перезапуском, выполнением команд и т. Д. - я бы использовал capistrano с расширением узла.
https://github.com/loopj/capistrano-node-deploy
источник
https://paastor.com - это относительно новый сервис, который выполняет развертывание для вас, на VPS или другой сервер. Существует CLI для push-кода. У Paastor есть свободный уровень, по крайней мере, он был на момент публикации этого.
источник
В вашем случае вы можете использовать выскочившего демона. Для полного решения по развертыванию я могу предложить capistrano . Два полезных руководства: как настроить Node.js env и как выполнить развертывание через capistrano + upstart .
источник
Попробуйте узел-развертывание-сервер . Это сложный набор инструментов для развертывания приложения на ваших частных серверах. Он написан на Node.js и использует npm для установки.
источник