Для деплоя приложений на nodejs есть пара инструментов, таких как shipit и flightplan. Оба они не так хороши, как capistrano для ruby или deployer для php, но если для деплоя хочется выбирать ту же экосистему, что и для разработки, то выбирать особо не приходится.
Если сравнивать shipit и flightplan, то можно сказать, что первый - более модульный, имеет некоторые плагины, а также поддерживает функцию "rolling releases", второй же - более простой и понятный.
На сервере, да и локально, я использую nvm для переключения между версиями nodejs и здесь я столкнулся с проблемой.
Ни shipit, ни flightplan не видели версию nodejs, установленную через nvm. Всегда использовалась только системная версия (если она была). Ясно дело, что проблема была в том, что shell запускался как non-login non-interactive shell и не подгружал нужные скрипты, что были прописаны в .bashrc
. Черт побери, с capistrano таких проблем никогда не было! Гугление и рыскание по гитхабу особо ни к чему не привело. Однако где-то нашел обходной путь, как сделать так, чтобы nvm таки грузился. И это работает как с shipit, так и с flightplan.
Нужно всего лишь взять файл .bashrc
и строки
export NVM_DIR="/home/YOURUSERNAME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
поместить до строк
# If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
Это по сути будет загружать nvm всегда, даже если мы находимся в non-interactive режиме, что в принципе нам и нужно и особо это ничем не навредит.