使用pm2以root身份启动应用

时间:2016-01-30 17:57:33

标签: node.js root pm2

我有一个守护进程必须在启动时以root身份运行。

我使用pm2启动其他应用程序,但无法确定它是否可以以root身份启动应用程序。可以吗?

如果没有,我的选择是什么?

7 个答案:

答案 0 :(得分:12)

我建议:

while True:
        print("ʘʘʘʘʘʘʘʘʘʘʘʘʘʘʘʘ")
        print("ʘUnit Converterʘ")
        print("ʘʘʘʘʘʘʘʘʘʘʘʘʘʘʘʘ\n")
        print("This program is used to convert units for height and weight.")

        measurement = input("Would you like to convert height or weight?; ")

        if measurement == "height" or measurement == "Height" or measurement == "h" or measurement == "H":
            units = input("What units do you want to convert from?(metres/inches); ")

            if units[0] == ("m"):
                numberm = float(input("Please enter your height in metres; "))
                inchfm = (numberm * 39.37)
                inchfm = float(inchfm)
                print inchfm

OR

sudo pm2 start index.js

OR

pm2 start 'http-server' /var/www -p 80
sudo pm2 startup
pm2 save

在HTTP端口上启动它

此外,我总是将pm2 start 'which http-server' /var/www -p 80 放在最后 - 这会启动与核心一样多的工作进程。查看THIS

并不总是需要以root身份启动PM2。如果您将PM2作为root并安装了cli模块,则安全性是一个很大的风险。只有在1到1024之间的端口上启动应用程序

时才需要这样做

答案 1 :(得分:11)

如果您只需要以root身份运行守护程序以访问端口号(例如80或443),pm2 documentation建议使用authbind。因此,如果您希望用户yourusername有权访问端口80,请运行:

$ sudo apt-get install authbind
$ sudo touch /etc/authbind/byport/80
$ sudo chown yourusername /etc/authbind/byport/80
$ sudo chmod 755 /etc/authbind/byport/80
$ authbind --deep pm2 update

然后使用authbind --deep pm2代替pm2。文档建议设置别名。

答案 2 :(得分:8)

我遇到了sudo pm2 start api的问题,但这是因为pm2已经在没有sudo权限的情况下运行,因此你需要运行:

pm2 kill
sudo pm2 start api

这会首先杀死pm2 deamon,以便它在sudo中启动,但之后你需要sudo用于所有 pm2命令,例如:sudo pm2 ls

答案 3 :(得分:3)

浪费了大约一个小时

在AWS EC2机器上,由于早期安装,一个系统处于不一致状态,这迫使应用程序中sudo的所有命令都必须升至操作系统的所有命令,例如sh等。

pm2 以root用户身份运行:

ps aux | grep pm2
# root ... PM2 v4.1.2: God Daemon (/root/.pm2)

现在pm2 以ubuntu的身份运行:

ps aux | grep pm2
# ubuntu  ...  PM2 v4.1.2: God Daemon (/home/ubuntu/.pm2)

以下命令有效:

sudo pm2 kill
sudo npm remove pm2 -g

sudo npm i -g pm2@latest
sudo pm2 update
sudo chown -R ubuntu:ubuntu /home/ubuntu/.pm2

希望有帮助

答案 4 :(得分:0)

你应该以root身份启动pm2,(sudo pm2启动app.js),然后你的应用将以root身份启动

答案 5 :(得分:0)

首先,全局安装pm2。 然后使用此命令将root权限设置为pm2

sudo chown ubuntu:ubuntu /home/ubuntu/.pm2/rpc.sock /home/ubuntu/.pm2/pub.sock

答案 6 :(得分:0)

您可能会考虑使用iptables路由流量,因为此错误背后有一个原因

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000