Не удается запустить процесс 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 ответ
Эта статья скопирована из документации 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!