2016-04-27 4 views
0

Ich habe eine Knoten-Anwendung, die gut läuft, wenn ich manuell in die gcloud computeVM kitt und es ausführen.Wie öffne ich den Port 80 für eine node.js-Anwendung ohne deploy.sh-Datei auf gcloud?

Hier sind die Komplikationen (alle realted auf Unix):

1.) ich einen Domain-Namen haben. Also habe ich den DNS-Zonen-Datensatz hinzugefügt, um auf die obige VM zu zeigen.

2.) Für die Compute-VM zu reagieren, sollte es Verfahren auf 80

3.) hören, wenn wir die https://cloud.google.com/nodejs/getting-started/run-on-compute-engine#download_app folgen, gibt es die App auf 8080.

4.) laufen Für die Ports < 1024 werden Root-Berechtigungen zum Öffnen von Ports benötigt.

5.) So von npm Start, änderte es das Skript starten zu verwenden "sudo npm starten"

6.) Dann ist es die folgenden Fehler gab: my-app-Instanz supervisord: nodeapp sudo: nein tty vorhanden und kein askpass-Programm angegeben

7.) Wenn ich jedes Mal "sudo visudo" und fügen Sie die "Benutzername ALL = NOPASSWD:" jedes Mal, wenn ich die Instanz neu starten nach der Bereitstellung, was ich am wenigsten bevorzugen würde.

Ich habe den relevanten Teil des stratup-Skript für weitere Informationen enthalten:

# Install app dependencies 
cd /myrepo/opt/app/servers 
sudo npm install 

# Create a nodeapp user. The application will run as this user. 
useradd -m -d /home/nodeapp nodeapp 
chown -R nodeapp:nodeapp /myrepo/opt/app/servers 

# Configure supervisor to run the node app. 
cat >/etc/supervisor/conf.d/node-app.conf << EOF 
[program:nodeapp] 
directory=/myrepo/opt/app/servers 
command=sudo npm start 
autostart=true 
autorestart=true 
user=nodeapp 
environment=HOME="/home/nodeapp",USER="nodeapp",NODE_ENV="production" 
stdout_logfile=syslog 
stderr_logfile=syslog 
EOF 

A.) Meine Forderung ist einfach: Mein Google-Domain verweist auf die oben Compute jetzt VM. Wann immer der Benutzer www.domainname.com eingibt, sollte er ihn ohne Portnummern in der URL zur Website bringen. Wie öffne Port 80 mit einer einfachen Modifikation des Start-Skripts (bevorzugt)?

B.) Und wenn ich mit deploy.sh gehen muss, das im Tutorial spezifiziert wurde, wird es automatisch ausgeführt? Oder wenn ich es automatisch ausführen muss, was das Verfahren ist.

Hinweis: Ich bin kein Unix-Experte. Jede Hilfe wäre willkommen.

Antwort

2

Schauen Sie sich mit einem reverse proxy. Auf diese Weise können Sie Ihre App ohne root-Berechtigungen auf einem Port wie 8080 ausführen und einen privilegierten HTTP-Server (wie Apache oder Nginx) auf Port 80 ausführen und Traffic an Ihre App weitergeben. Dies ist gängige Praxis und viel sicherer als das Ausführen Ihrer App mit Root-Rechten.

+0

Ich habe nginx aktiviert. Und ich kann die Conf-Dateien hochladen. So löschte ich meinen vorherigen Kommentar !!! Versuchen, Reverse-Proxy zu überprüfen. –

+0

nginx Reverse Proxy funktioniert. :) ... Domainname auf einem anderen Server auf 8080 geroutet:). Aber es sieht so aus, als ob nginx bezahlt wird. Jetzt bin ich auf Probe. Und ich denke, sie erlauben nur "nginx plus" in der Cloud. –

+0

Es gibt ein Premium-Nginx-Plus, aber Sie sollten in der Lage sein, die kostenlose Open-Source-Version auf einer beliebigen Linux Google Compute Engine-VM einzurichten. Sehen Sie zum Beispiel [dieses Tutorial] (https://cloud.google.com/solutions/https-load-balancing-nginx) (es tut nicht genau, was Sie hier wollen, aber es gibt ein Beispiel für die kostenlose Version von Nginx). –

Verwandte Themen