2010-10-05 7 views
0

je dois commencer un serveur Node.js en tant qu'utilisateur root (en utilisant sudo) avec un param de démarrage qui ressemble à:A partir Node avec Dieu avec sudo

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

Comme je me sers Socket.IO et le besoin l'utilisation de Flash Sockets (qui nécessite que Node.js soit exécuté en tant que root). Cependant, chaque fois que je lance Dieu, il ne démarre pas le nœud. J'ai essayé d'exécuter Dieu avec sudo, sans sudo, comme rvmsudo (car j'utilise RVM pour gérer la version de ruby ​​sur ma machine) et rien ne semble y remédier. Quelqu'un sait-il un moyen d'exécuter des processus avec sudo dans Dieu?

Merci.

+0

http://god.rubyforge.org/: "Dieu ne travaille actuellement que sur les systèmes Linux, BSD et Darwin." Bon chagrin avec ces noms de projets. –

Répondre

2

Voici mon fichier minimal de configuration pour exécuter serveur Node.js avec « Dieu »:

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 

Il commence Node.js automatiquement si elle n'a pas encore été mis, et utilise des moyens de démonisation « de Dieu » interne .

Assurez-vous que vous avez une partie "start_if" dans votre configuration, qui définit une condition pour démarrer le processus surveillé. Ici, nous avons une condition pour démarrer si le processus ne fonctionne pas, exactement ce dont nous avons besoin! En ce qui concerne les privilèges "sudo": Je pense qu'il n'est pas nécessaire d'inclure sudo dans votre commande "start" de config de dieu. Vous pouvez plutôt invoquer avec sudo "dieu" lui-même, alors il exécutera également des processus surveillés avec sudo. Par exemple je teste « dieu » config avec la commande suivante:

sudo god -c conf/chapayev.god -D 

(-D pour imprimer la sortie de la console pour voir toutes les erreurs de configuration immédiatement)

Pour plus de détails s'il vous plaît jeter un oeil sur ce post: http://blog.acmarques.com/deploying_node_with_nginx_and_god

0

N'est-il pas préférable de serveur fichier de politique de socket flash avec serveur web, par exemple Nginx?

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

et le fichier crossdomain.xml (remplacez * avec des valeurs appropriées):

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

Ce nœud moyen ne doit être commencé avec sudo. C'est plus facile et plus sûr à mon avis. Il peut également y avoir des problèmes avec la propriété des fichiers créés par le noeud lors de l'exécution en tant que root.

Si le nœud est démarré en tant que root, il est bon de le chrooter ou de changer l'UID après la liaison de port.

Questions connexes