Как запустить приложение Node / Express на порте 3001, 3002 и т. Д.? - PullRequest
0 голосов
/ 22 января 2019

Мы используем 4 разных экспресс-проекта на одном сервере, запускаем pm2 start cmd из каждого корневого каталога проекта для запуска приложения.

И с помощью сервера ec2 Linux добавили порт 3000, 3001 к входящим правилам, оба работают нормально, но не могут получить доступ к API через 3001, и имеют доступ к 3000, что может быть проблемой?

тот же проект, работающий на 3000, но не в 3001, поэтому мы можем подтвердить, что в наших проектах ошибок нет.

Попытка на терминале nodemon app работает нормально, но не вызывается Postman, получая такую ​​же ошибку:

Could not get any response

There was an error connecting to http://ec2-x-x-amazonaws.com:3001/api/login.

как мы можем запустить несколько узловых / экспресс-проектов в доступных / определенных портах?

3001    tcp 0.0.0.0/0, ::/0 ✔
3000    tcp 0.0.0.0/0, ::/0 ✔

Некоторые порты, работающие без добавления в качестве входящего правила, такие как 8088, 8089.

pm2 *Состояние 1024 * показывает, что все порты работают нормально.

enter image description here

pm2 list выше и id 8 имеет номер порта 3001

Ответы [ 3 ]

0 голосов
/ 28 января 2019

если ваш код выглядит так

var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

var port = process.env.PORT || 3000;

app.listen(port, function () {
  console.log('Example app listening on port ' + port + '!');
});

вы можете изменить порт с помощью команды, которая запускает сервер, вот так

PORT=8000 node index.js

, чтобы узнать больше примеров. https://gist.github.com/indiesquidge/7fe1d8be1b973f782c97

Вы также можете передать порт в качестве аргумента в ваш скрипт, используя process.argv

var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

var port = getPort();

app.listen(port, function () {
  console.log('Example app listening on port ' + port + '!');
});

function getPort(){
    if(process.argv.length > 2){
        return process.argv[2];
    } else {
        return 3000;
    }
}
0 голосов
/ 01 февраля 2019

Это проблема номера порта, повторно проверенная из правил входящих сообщений сервера, правильно ли добавлены порты 3001 и 3002 и т. Д. С custom TCP rule и source, должны быть anywhere.теперь работает нормально.

ec2-Instances -> launch-wizard-1 -> right click -> edit inbound rules.
0 голосов
/ 27 января 2019

ПРИМЕЧАНИЕ: не обязательно ответ, но вот некоторые вещи, которые я облажался раньше, и этот процесс я бы использовал для устранения неполадок ...

Конфигурация PM2

Сначала проверьте это, чтобы убедиться, что у вас нет никаких конфликтов.
(Как уже упоминалось в комментариях, предоставьте снимок экрана pm2 list и даже, если возможно, файлы конфигурации PM2)

Как у вас работает PM2, один ecosystem.json конфиг? Несколько ecosystem.json конфигов? В любом случае ...

Убедитесь, что каждый app имеет правильно указанные свойства ...

  • script: (сценарий запуска)
  • cwd: (рабочий каталог)
  • Уникальный name: для каждого процесса
  • Если вы задаете переменные среды env: в конфигурации PM2, убедитесь, что они правильно установлены на 3000 и 3001 соответственно.
  • Убедитесь, что вы случайно не запрограммировали оба приложения для запуска на 3000 .i.e, убедитесь, что эти env конфиги действительно используются.

Еще одна вещь, на которую следует обратить внимание: если вы обновите свои файлы конфигурации PM2, простой pm2 restart не будет искать новую конфигурацию. Вам нужно будет добавить флаг --update-env.



Базовый тест веб-сервера порта

Если вышеупомянутые проверки на PM2 в порядке, то я бы начал еще больше сужать ситуацию, полностью исключив узел. Вы можете попробовать что-то подобное для быстрой проверки доступности порта 3001 ...

  1. Остановить все процессы pm2

pm2 stop all

  1. Установить Nginx

sudo apt-get install nginx

  1. Редактировать файл конфигурации по умолчанию

sudo nano /etc/nginx/conf.d/default Или любой другой редактор, который вы хотите

  1. Настроить сервер. Добавить в начало файла ...

 server {
      listen 3001;
      listen [::]:3001;
      location / {
          return 200 '3001 works!';
      }
  }
  1. Перезагрузите Nginx

sudo service nginx restart


Теперь попробуйте получить доступ к общедоступному IP-адресу через порт 3001, и он должен загрузить текстовый файл на ваш компьютер с «3001 работает!»

Если это работает, проблема не в EC2 или связанных группах безопасности, а в ваших серверах узлов.

...