我需要以root用户(使用sudo)启动一个Node.js服务器,其启动参数如下:
w.start = "sudo node #{KTHXBYE_NODE_ROOT}/poll.js"
因为我使用的是Socket.IO,需要使用Flash Sockets(需要Node.js以root身份运行)。
然而,每当我启动上帝时,它都无法启动节点。我尝试使用sudo
而不是sudo
作为rvmsudo
运行上帝(因为我正在使用RVM来管理我机器上的ruby版本),似乎没有任何修复方法。任何人都知道在神中使用sudo
运行流程的方法吗?
感谢。
答案 0 :(得分:2)
这是我使用“god”运行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”权限:我认为没有必要在你的god config“start”命令中包含sudo。您可能宁愿使用sudo“god”本身调用,然后它也将使用sudo运行受监视的进程。例如,我正在使用以下命令测试“god”配置:
sudo god -c conf/chapayev.god -D
( - D用于在控制台中打印输出以立即查看所有配置错误)
有关详细信息,请查看此帖子: http://blog.acmarques.com/deploying_node_with_nginx_and_god
答案 1 :(得分: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身份运行时,节点创建的文件所有权也可能存在问题。
如果以root用户身份启动节点,则可以在端口绑定后对其进行chroot或更改UID。