Wie kann ich node.js Express-Produktion-Modus via sudo?
Ich bin mit dem npm-Paket express version 2.5.2 mit Knoten-version .0.6.5. Ich zu sein scheinen, bash, version 4.1.5 auf Debian 4.4.5.
Ich versuche, meinen server in der Produktion-Modus, aber es läuft immer noch in der Entwicklung-Modus.
Ich führen Sie diese Befehle in meine shell bash:
$ export NODE_ENV=production
$ echo $NODE_ENV
production
$ sudo echo $NODE_ENV
production
$ sudo node bootstrap.js
Habe ich diesen code innerhalb bootstrap.js:
var bootstrap_app = module.exports = express.createServer();
//...
console.log(bootstrap_app.settings.env);
und hier ist, was ich sehe, gedruckt auf standard-out:
development
Ist das ein problem bei meiner Nutzung, oder mein system?
EDIT:
Dank ThiefMaster für seine richtig angeben, dass diese Frage stammt aus meiner aktiven Knoten als Wurzel. ThiefMaster schlug mit iptables forward von port 80 auf einen unprivilegierten port, aber mein system gibt mir eine Fehlermeldung. Verschieben diese Diskussion auf superuser.com oder serverfault.com (link Folgen)
- Die meisten Umgebungsvariablen werden nicht gesetzt, wenn die Verwendung von sudo aus Sicherheitsgründen. So können Sie nicht passieren, dass die Umgebungsvariablen für die Knoten-ohne änderungen an Ihren sudoers-Datei zu erlauben, die variable passt durch. Jedoch, Sie sollte nicht laufen-Knoten als root sowieso. Wenn Sie nur brauchen Sie für port 80 laufen Knoten auf einem unprivilegierten port und setup iptables forward to map port 80, der port.
- Danke für die Anregung! Ich lief eines meiner non-port-80-apps und korrekt identifiziert die Umwelt als die Produktion! Sollten Sie diesen post als Antwort - ich werde es akzeptieren. Nochmals vielen Dank!
- Ich habe gerade versucht die Installation und Verwendung von iptables (iptables -t nat-L) und bekam die Fehlermeldung "iptables v1.4.8: can 'T initialize iptables table `nat': Permission denied (you must be root) Vielleicht iptables oder Ihren kernel aktualisiert werden muss." Debian 4.4 ist eine eher alte version, richtig? /proc/version sagt "Linux version 3.1.9-vs2.3.2.5"
- Ich habe. Jemand dachte, es sollte umgewandelt werden in ein Kommentar. Und Sie können nur die Einrichtung der iptables-forwarding als root. Geschrieben die Antwort wieder.
- Btw,
sudo echo $NODE_ENV
funktioniert, weil die variable ersetzt wird, also, was sudo sieht, istecho "production"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meisten Umgebungsvariablen werden nicht gesetzt, wenn die Verwendung von sudo aus Sicherheitsgründen. So können Sie nicht passieren, dass die Umgebungsvariablen für die Knoten-ohne änderungen an Ihren sudoers-Datei zu erlauben, die variable passt durch.
Jedoch, Sie sollte nicht laufen-Knoten als root sowieso. Hier ist also ein guter workaround:
Wenn Sie nur brauchen Sie für port 80 laufen Knoten auf einem unprivilegierten port und setup iptables forward to map port 80, port:
Ersetzen " 1.2.3.4 mit Ihrer öffentlichen IP, 2.3.4.5 mit der IP-Knoten läuft (könnte sein, den öffentlichen oder 127.0.0.1) und 1234 mit der port-node läuft.
Mit einer ausreichend aktuellen kernel, der hat die Fähigkeit, die Unterstützung, die Sie könnte auch die Berechtigung
node
ausführbare Datei, dieCAP_NET_BIND_SERVICE
Privileg, verwenden Sie den folgenden Befehl als root ein:Beachten Sie, dass dies ermöglicht es jedem Benutzer auf Ihrem system zu öffnen privilegierten ports mit Knoten!
authbind
?