J'ai un démon qui doit être exécuté en tant que root au démarrage.
J'utilise pm2 pour démarrer d'autres applications, mais je ne peux pas savoir s'il peut démarrer une application en tant que root. Peut-on le faire?
Sinon, quelles sont mes options?
Si vous avez seulement besoin que votre démon soit exécuté en tant que root pour accéder à un numéro de port (tel que 80 ou 443), le documentation pm2 recommande d'utiliser authbind
. Donc, si vous voulez que l'utilisateur yourusername
ait accès au port 80, exécutez:
$ Sudo apt-get install authbind
$ Sudo touch /etc/authbind/byport/80
$ Sudo chown yourusername /etc/authbind/byport/80
$ Sudo chmod 755 /etc/authbind/byport/80
$ authbind --deep pm2 update
Et puis utilisez authbind --deep pm2
au lieu de pm2
. La documentation suggère de configurer un alias.
Je recommanderais:
Sudo pm2 start index.js
OR
pm2 start 'http-server' /var/www -p 80
Sudo pm2 startup
pm2 save
OR
pm2 start 'which http-server' /var/www -p 80
Pour le démarrer sur votre port HTTP
Aussi, je mets toujours -i 0
à la fin - cela démarre autant de processus de travail que vous avez de cœurs. Vérifiez [[# # ~] ce [~ # ~]
Il n'est pas toujours nécessaire de démarrer PM2 en tant que root. Si vous avez PM2 en tant que root et le module cli installé, la sécurité est un gros risque. Ceci n'est requis que si vous démarrez votre application sur un port entre 1 et 1024
J'ai eu des problèmes avec Sudo pm2 start api
, mais c'était parce que pm2 fonctionnait déjà sans les privilèges Sudo, vous devez donc exécuter:
pm2 kill
Sudo pm2 start api
Cela tue le démon pm2 en premier, pour qu'il démarre dans Sudo, mais ensuite vous avez besoin de Sudo pour TOUTES LES COMMANDES pm2 ensuite, comme: Sudo pm2 ls
Tout d'abord, installez pm2 à l'échelle mondiale. Définissez ensuite les autorisations root sur pm2 à l'aide de cette commande
Sudo chown ubuntu:ubuntu /home/ubuntu/.pm2/rpc.sock /home/ubuntu/.pm2/pub.sock
Vous devez démarrer pm2 en tant que root (Sudo pm2 start app.js), puis votre application démarrera en tant que root
vous pourriez envisager d'acheminer votre trafic avec iptables, car il y a une raison derrière cette erreur
Sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000