2012-06-20 3 views
4

Предположим, у меня есть приложение nodejs/express на производственном сервере. Если я хочу добавить новый маршрутизатор, я должен перезагрузить его, верно? Но если я перезагружу свой сервер node.js, пользователи могут получить сообщение об ошибке.Перезагрузите производственный сервер node.js

Итак, как мне перезагрузить мой сервер node.js без ошибок для моих пользователей?

ответ

9

Если вы прокси-сервер к вашему Node.js-приложению с Nginx, вы можете указать вашему приложению Node прослушивать сокет, а затем только закрыть старый сервер, если новый запускается правильно; как только старый сервер отключится, Nginx направит запросы на новый экземпляр сервера. Вот как работает Unicorn, популярный сервер Ruby.

В Nginx, вы должны указать ваш вверх, как это:

upstream node_server { 
    server unix:/path/to/socket.sock; 
} 

server { 
    ... 
    location/{ 
    ... 
    proxy_pass http://node_server; 
    } 
} 

И в узле, вы можете слушать на сокете с

server.listen('/path/to/socket.sock', function() { 
    console.log("Listening on socket."); 
}); 
0

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

Если есть проблема, переключите его.

Но фактическое «время простоя» будет всего лишь секундой, и если в настоящее время не будет подан чей-то запрос, они не получат ошибку.

Тем не менее, я никогда не пробовал это сам, и мне любопытно узнать, какой лучший ответ! Хороший вопрос!

+0

Я думаю, что это правильный ответ, и это, как большинство из люди на самом деле делают. Тем не менее, я считаю, что единорог-дух - отличный шаг, чтобы получить перезапуск без простоя. Ответ «Брэндон Тилли» так же хорош, как и ответ, следуя пути единорога. – nembleton

Смежные вопросы