Как запустить приложение 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...
- Остановите все процессы pm2
pm2 stop all
- Установить Nginx
sudo apt-get install nginx
- Изменить файл конфигурации по умолчанию
sudo nano /etc/nginx/conf.d/default
Или какой редактор вы хотите
- Настроить сервер. Добавить в начало файла...
server {
listen 3001;
listen [::]:3001;
location / {
return 200 '3001 works!';
}
}
- Перезапустите 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;
}
}