2016-07-21 16 views
3

Ich verwende NVM, um eine Sails-Webanwendung zu entwickeln. Ich habe den Knoten v0.12.7 über NVM installiert und verwende diese Version, um die Website auszuführen.Wie geht es mit NVM in Produktionsumgebungen?

nvm use 0.12.7 
sails lift 

Segel verwendet Port 1337 standardmäßig, aber für Produktionsumgebung wir es 443. Das Problem ändern ist, dass dieser Port Root-Rechte erfordert, und NVM ist nur für einen Benutzer installiert. Also, wenn ich versuche, sudo Segel Aufzug, bekomme ich eine Fehlermeldung, dass Segel nicht installiert ist.

Was ist der effektivste Weg, um mit diesem Problem umzugehen? Wie kann ich mit NVM mein Projekt entwickeln und bereitstellen?

Ich habe verschiedene mögliche Lösungen gedacht, aber ich weiß nicht, ob sie gut oder unsicher sind.

  1. Weiterleiten von Ports mit iptables. Das Problem damit ist, dass Socket nicht funktioniert, weil ein Proxy.
  2. Ändern Sie die Berechtigungen für einen Port. Könnte ein Sicherheitsrisiko sein, wenn der Knoten Sicherheitslücken aufweist.
  3. Installieren Sie NVM mit Root. Das Problem ist, dass ich NVM verwende, um die Verwendung sudo für die Bereitstellung oder das Ausführen von Anwendungen zu vermeiden, und dies wird mich dazu zwingen.

Was sind die besten Praktiken in diesem Zusammenhang?

Vielen Dank im Voraus.

+1

Warum funktionieren würde Lösung 1 nicht? Die Portweiterleitung ist keine Proxyfunktion. Wie auch immer, meine bevorzugte Lösung ist, immer einen kampferprobten Front-End-Server wie nginx oder apache2 zu haben und sie dann zum Reverse-Proxy der Web-App zu verwenden. Es gibt auch andere Vorteile, aber der Hauptgrund für mich wäre Sicherheit - es fügt eine weitere Schicht hinzu, um zu hacken. – slebetman

+0

Zustimmen - Reverse-Proxy über Nginx funktioniert perfekt für dieses Szenario einschließlich der Sockets. Ich würde nicht in Erwägung ziehen, Option 2 und 3 überhaupt zu verwenden. Option 1 oder unsere neue Option 4 = nginx/apache/lighttpd usw. Ich freue mich, meine nginx-Konfiguration zu teilen, wenn Sie Probleme auftreten und sich entschließen, diese Route zu wählen. – munkee

+0

Wenn Sie sich auf Websockets beziehen (wie socket.io), dann ist das Reverseproxying ein bisschen schwierig, aber machbar (ich habe es vorher gemacht). Googeln Sie einfach für Websocket Proxy für den Server Ihrer Wahl. Möglicherweise müssen Sie jedoch eine neuere Version des Servers auf Ihrem Produktionsserver verwenden. – slebetman

Antwort

0

Ich habe das Problem gelöst, das folgende zu tun.

Ich habe den Besitzer und die Gruppe von Knoten ändern.

which node # gives a string with the path to node 
sudo chown root:root path_to_node 
sudo chmod u+s path_to_node 

Auf diese Weise wird jeder Benutzer, der Knoten ausführt, dies mit den Eigentümerprivilegien tun. Und in diesem Fall ist der Besitzer root und seine Berechtigungen reichen aus, um Ports unter 1024 zu verwenden.

Was halten Sie von dieser Lösung?

0

Aus Sicherheitsgründen wird nicht empfohlen, NodeJS mit root-Rechten auszuführen.

Sie können versuchen, Ihre Anwendung auf einem Port auszuführen, der für einen anderen Benutzer ohne root-Berechtigungen zugänglich ist, und anschließend einen Reverse-Proxy über den Port 443 konfigurieren. Dies habe ich mit nginx als Reverse-Proxy gemacht, der leicht konfiguriert werden kann, um diese Aufgabe auszuführen und den SSL-Verkehr zu behandeln.

Auf diesem Link Sie weitere Informationen über die Konfiguration von nginx als Reverse-Proxy finden können, ist es von der offiziellen Dokumentation: https://www.nginx.com/resources/admin-guide/reverse-proxy/