Foreman ne peut pas démarrer Nginx, mais je peux le démarrer manuellement. Pourquoi?

Je suis actuellement en train de lancer Foreman sur la mise en scène (Ubuntu).

Mon Procfile.staging ressemble à ceci:

nginx: sudo service nginx start unicorn: bundle exec unicorn -c ./config/unicorn.rb redis: bundle exec redis-server sidekiq: bundle exec sidekiq -v -C ./config/sidekiq.yml 

Je peux commencer à utiliser nginx avec:

 $ sudo service nginx start 

Cependant, lorsque je lance $ foreman start , alors que les trois autres processus démarrent avec succès, nginx ne le fait pas:

 11:15:46 nginx.1 | started with pid 15966 11:15:46 unicorn.1 | started with pid 15968 11:15:46 redis.1 | started with pid 15971 11:15:46 sidekiq.1 | started with pid 15974 11:15:46 nginx.1 | Starting nginx: nginx. 11:15:46 nginx.1 | exited with code 0 11:15:46 system | sending SIGTERM to all processes SIGTERM received 11:15:46 unicorn.1 | terminated by SIGTERM 11:15:46 redis.1 | terminated by SIGTERM 11:15:46 sidekiq.1 | terminated by SIGTERM 

Alors, pourquoi nginx ne démarre-t-il pas lorsqu’il est lancé par Foreman?

Il y a un problème dans votre Procfile.

La commande nginx ne peut pas utiliser sudo dans foreman , car elle always ask for a password et échouera. C’est pourquoi vous ne lancez pas nginx et les journaux sont vides.

Si vous devez vraiment utiliser sudo dans un fichier procfile, vous pouvez utiliser quelque chose comme ceci:

 sudo_app: echo "sudo_password" | sudo -S app_command nginx: echo "sudo_password" | sudo -S service nginx start 

ce que je ne recommande vraiment pas. Une autre option consiste à appeler sudo foreman start

Pour plus d’informations, consultez ce problème sur github , c’est précisément ce que vous voulez résoudre.

Tenez-moi au courant si cela fonctionne pour vous.

Vous devriez pouvoir append un access sudo sans mot de passe à votre utilisateur local pour permettre la gestion de ce service. Cela peut être une grande faille de sécurité, mais si vous mettez en liste blanche les commandes qui peuvent être exécutées, vous réduisez considérablement le risque. Je recommande d’append une entrée de sudoers sans mot de passe pour la commande de services et tout ce que vous voulez écrire dans un script:

/ etc / sudoers:

 your_user_name ALL = (ALL) NOPASSWD: /usr/sbin/service 

Une autre option si vous n’êtes pas à l’aise avec cela serait d’exécuter nginx directement, pas via le gestionnaire de services:

 nginx: /usr/sbin/nginx -c /path/to/nginx.conf