Как запустить приложение Node/Express на порте 3001, 3002 и т. Д.?

Мы используем 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 показывает, что все порты работают нормально.

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

3 ответа

Решение

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

ec2-Instances -> launch-wizard-1 -> right click -> edit inbound rules.

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

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

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

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

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

  • script: (стартовый скрипт)
  • cwd: (рабочий каталог)
  • уникальный name: для каждого процесса
  • Если вы указываете свои переменные среды env: в конфигурации PM2 убедитесь, что они правильно установлены на 3000 а также 3001 соответственно.
  • Убедитесь, что вы случайно не запрограммировали оба приложения для запуска 3000.ie убедитесь, что это 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 или связанных группах безопасности, а в ваших серверах узлов.

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

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;
    }
}
Другие вопросы по тегам