2010-10-05 32 views
0

我需要啓動的Node.js服務器作爲根用戶(使用sudo)與一個開始PARAM看起來像:起始節點與神使用sudo

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

由於我使用Socket.IO和需要使用Flash套接字(需要Node.js作爲root運行)。

但是,每當我啓動上帝,它就無法啓動節點。我試過用sudo來運行上帝,沒有sudo,因爲rvmsudo(因爲我使用RVM來管理我機器上的ruby版本)並且沒有任何東西可以解決它。任何人都知道在神中運行sudo的流程嗎?

謝謝。

+0

http://god.rubyforge.org/:「上帝目前只適用於Linux,BSD和Darwin系統。」對這些項目名稱感到悲傷。 – 2010-10-05 20:08:01

回答

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」權限:我認爲沒有必要在你的上帝配置「開始」命令中包含sudo。您可能更願意使用sudo「god」本身,然後它將使用sudo運行受監視的進程。比如我測試「神」 Config中使用以下命令:

sudo god -c conf/chapayev.god -D 

(-D打印控制檯輸出看到所有立即配置錯誤)

欲瞭解更多詳情,請看一看在這篇文章: http://blog.acmarques.com/deploying_node_with_nginx_and_god

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。