Как запустить несколько приложений StrongLoop LoopBack на одном сервере?

В настоящее время я запускаю два приложения StrongLoop LoopBack (приложения Nodejs) на одном сервер с разными портами. Оба приложения были созданы с помощью slc lb project и slc lb model из командной строки.

Можно ли запускать эти приложения на одном порту с другим путем и/или субдоменом? Если да, то как мне это сделать на машине с Linux?

Пример:

http://api.server.com:3000/app1/ для первого приложения.

http://api.server.com:3000/app2/ для второго приложения.

Благодарю.


person M. Baja Aksha    schedule 27.03.2014    source источник


Ответы (2)


Поскольку приложения LoopBack являются обычными приложениями Express, вы можете монтировать их по пути основного приложения.

var app1 = require('path/to/app1');
var app2 = require('path/to/app2');

var root = loopback(); // or express();
root.use('/app1', app1);
root.use('/app2', app2);
root.listen(3000);

Очевидным недостатком является сильная связь времени выполнения между app1 и app2 — всякий раз, когда вы обновляете одно из них, вам нужно перезапустить весь сервер (то есть оба). Также фатальный сбой в одном приложении приводит к падению всего сервера.

Решение, представленное @fiskeben, является более надежным, поскольку каждое приложение изолировано.

С другой стороны, мое решение, вероятно, проще в управлении (у вас есть только один процесс Node вместо процессов nginx + Node для каждого приложения), а также позволяет настраивать промежуточное ПО, совместно используемое обоими приложениями.

var root = loopback();
root.use(express.logger());
// etc.

root.use('/app1', app1);
root.use('/app2', app2);
root.listen(3000);
person Miroslav Bajtoš    schedule 27.03.2014
comment
спасибо Мирослав. Я обязательно попробую и ваш и посмотрю, чему я могу научиться из обоих решений. - person M. Baja Aksha; 27.03.2014

Вам понадобится какой-то прокси перед вашим сервером, например nginx. nginx будет прослушивать порт (скажем, 80) и перенаправлять входящие запросы на другие серверы на машине на основе определенных вами правил (имя хоста, путь, заголовки и т. д.).

Я не эксперт по nginx, но я бы настроил его примерно так:

server {
  listen: 80;
  server_name api.server.com;
  location /app1 {
    proxy_pass http://localhost:3000
  }
  location /app2 {
    proxy_pass http://localhost:3001
  }
}

nginx также поддерживает передачу строк запросов, путей и всего остального, но я оставлю это на ваше усмотрение, чтобы собрать кусочки вместе :)

Ознакомьтесь с документацией по прокси-серверу для nginx.

person fiskeben    schedule 27.03.2014
comment
Это работает, за исключением того, что теперь все URL-адреса начинаются с /app1 или /app2, когда они попадают в соответствующее приложение... - person latj; 12.04.2015
comment
@latj Возможно, этот ответ на аналогичный вопрос поможет вам. - person fiskeben; 13.04.2015