Не удается запустить процесс pm2 с портом 80

У меня есть проект Node, который должен работать под портом 80, но у меня возникают проблемы при запуске проекта pm2 с портом 80, экземпляры моего приложения запускаются, но у меня возникают те же предсказуемые проблемы с EACCESS на порте 80

Error: bind EACCES null:80
  at Object.exports._errnoException (util.js:870:11)
  at exports._exceptionWithHostPort (util.js:893:20)
  at cb (net.js:1302:16)
  at rr (cluster.js:594:14)
  at Worker.<anonymous> (cluster.js:564:9)
  at process.<anonymous> (cluster.js:714:8)
  at emitTwo (events.js:92:20)
  at process.emit (events.js:172:7)
  at handleMessage (internal/child_process.js:689:10)
  at Pipe.channel.onread (internal/child_process.js:440:11)

Я провел некоторое исследование и попробовал подход setcap, изложенный здесь, только чтобы столкнуться с проблемами, предоставляющими узлу эти права (вероятно, потому что я сделал node символическая ссылка на nodejs, который настроен для работы на порту 80):

Failed to set capabilities on file `/usr/bin/node' (Invalid argument)
The value of the capability argument is not permitted for a file. Or the file is not a regular (non-symlink) file

Я пытался запустить экземпляр pm2 как sudo, но безуспешно. Процесс отказывается подключаться к порту 80. Есть ли более простой способ сделать это? Я что-то упустил в своей конфигурации?

1 ответ

Вы не можете прослушивать номер порта до 1024 без sudo.

Эта статья скопирована из документации PM2 http://pm2.keymetrics.io/docs/usage/specifics/

Это общее правило, что вы не должны запускать node как root. Однако только root может связываться с портами меньше 1024. Здесь на помощь приходит authbind. Authbind позволяет пользователям без полномочий root связываться с портами меньше 1024. Замените%user% пользователем, который будет запускать pm2.

sudo apt-get install authbind sudo touch / etc / authbind / byport / 80sudo chown%user% / etc / authbind / byport / 80sudo chmod 755 / etc / authbind / byport / 80 Вы также должны добавить псевдоним пользователю, который запускает профиль pm2, например ~/.bashrc или ~/.zshrc (обратите внимание, что вам нужно будет запустить source ~/.bashrc или source ~/.zshrc сразу после этого):

+alias pm2='authbind --deep pm2' Наконец, убедитесь, что pm2 обновлен с помощью authbind:

authbind --deep pm2 update Или просто pm2 update, если вы добавили псевдоним в свой профиль пользователя.

Теперь вы можете запускать приложения с использованием PM2, которые могут подключаться к порту 80 без root!

Другие вопросы по тегам