【问题标题】:Start app as root with pm2使用 pm2 以 root 身份启动应用程序
【发布时间】:2016-05-08 09:40:18
【问题描述】:

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

我使用 pm2 启动其他应用程序,但不知道它是否可以以 root 身份启动应用程序。能做到吗?

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

【问题讨论】:

    标签: node.js root pm2


    【解决方案1】:

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

    【讨论】:

    • 这确实有效,但似乎需要我以 root 身份运行其他应用程序。
    【解决方案2】:

    我会推荐:

    sudo pm2 start index.js
    

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

    pm2 start 'which http-server' /var/www -p 80
    

    在您的 HTTP 端口上启动它

    另外,我总是将-i 0 放在最后——这会启动与内核数量一样多的工作进程。检查THIS

    并不总是需要以 root 身份启动 PM2。如果您以 root 身份安装了 PM2 并安装了 cli 模块,则安全性是一个很大的风险。仅当您在 1 到 1024 之间的端口上启动应用时才需要这样做

    【讨论】:

      【解决方案3】:

      如果您只需要以 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。文档建议设置别名。

      【讨论】:

      • 你假设是 linux 吗?
      • 是的,apt-get 仅适用于基于 Debian 的发行版。
      【解决方案4】:

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

      pm2 kill
      sudo pm2 start api
      

      这首先会杀死 pm2 守护进程,因此它以 sudo 启动,但之后您需要 sudo 来执行 ALL pm2 命令,例如:sudo pm2 ls

      【讨论】:

      • 完美!我让 pm2 以 ubuntu 用户身份运行,一旦我运行这些命令,我​​的 pm2 实例现在根据需要以 root 身份运行,以便使用端口 3000 在我的节点服务器上运行 https。
      【解决方案5】:

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

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

      【讨论】:

      • 你为什么要传入ubuntu:ubuntu?在不同的发行版中会是root:user_to_give_root_access吗?
      • 我在 aws 中使用了一个 ec2 实例,并以 ubuntu 用户身份登录,对于 root 用户,您的答案将有效。我只是举了一个例子来说明它是如何工作的。感谢您指出。
      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:

        浪费了大约一个小时

        在 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
        

        希望有帮助

        【讨论】:

        • 这很有帮助。谢谢:)
        • @Rayon 很高兴知道 :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 2014-10-17
        • 1970-01-01
        • 2021-02-27
        • 2011-04-20
        • 2015-09-25
        • 1970-01-01
        相关资源
        最近更新 更多