0

我需要以 root 用户身份(使用 sudo)启动 Node.js 服务器,启动参数如下所示:

w.start = "sudo node #{KTHXBYE_NODE_ROOT}/poll.js"

因为我正在使用 Socket.IO 并且需要使用 Flash Sockets(这需要 Node.js 以 root 身份运行)。

但是,每当我启动上帝时,它都无法启动节点。我试过用sudo, without sudo, as来运行 God rvmsudo(因为我正在使用 RVM 来管理我机器上的 ruby​​ 版本),但似乎没有任何东西可以解决它。sudo有人知道在上帝中运行进程的方法吗?

谢谢。

4

2 回答 2

2

这是我使用“上帝”运行 node.js 服务器的最小配置文件:

APP_ROOT = "/home/sphynx/app"                   # application root

God.pid_file_directory = "#{APP_ROOT}/pids"     # directory to store PID files

God.watch do |w|
    w.name = "chapayev"
    w.interval = 5.seconds # default
    w.start = "env node #{APP_ROOT}/server.js"  # path to node.js server file
    w.stop = "env killall node"                 # stopping node explicitly
    w.start_grace = 10.seconds
    w.restart_grace = 10.seconds            
    w.log = "#{APP_ROOT}/log/chapayev.log"      # to enable logging

    w.start_if do |start|                       # start if condition is met
      start.condition(:process_running) do |c|  # check if process is running
        c.interval = 5.seconds
        c.running = false
      end
    end
end

如果 node.js 尚未启动,它会自动启动它,并使用内部的“上帝”守护进程。

确保您的配置中有“start_if”部分,它定义了启动受监控进程的条件。在这里,我们有一个条件,如果进程没有运行,正是我们需要的!

至于“sudo”权限:我认为没有必要在你的上帝配置“start”命令中包含 sudo。您可能宁愿使用 sudo "god" 本身调用,然后它也会使用 sudo 运行受监控的进程。例如,我正在使用以下命令测试“上帝”配置:

sudo god -c conf/chapayev.god -D

(-D 用于在控制台打印输出以立即查看所有配置错误)

有关更多详细信息,请查看此帖子: http ://blog.acmarques.com/deploying_node_with_nginx_and_god

于 2011-02-14T22:03:29.347 回答
0

使用 Web 服务器(例如 nginx)服务器闪存套接字策略文件不是更好吗?

server { 
    listen 843; 
    server_name {{ SERVER_NAME }} www.{{ SERVER_NAME }}; 
    location / { 
        root {{ PATH_TO_FOLDER_WITH_crossdomain.xml_FILE }}; 
        autoindex off; 
    } 
} 

和 crossdomain.xml 文件(将 * 替换为适当的值):

<cross-domain-policy> 
     <allow-access-from domain="*" to-ports="*" /> 
</cross-domain-policy> 

这样节点就不必以 sudo 启动。我认为这更容易,更安全。以 root 身份运行时,节点创建的文件所有权也可能存在问题。

如果 node 以 root 身份启动,最好将其 chroot 或在端口绑定后更改 UID。

于 2011-02-14T22:39:32.530 回答