• This forum has a zero tolerance policy regarding spam. If you register here to publish advertising, your user account will be deleted without further questions.

Nodejs Applikation auf Ubuntu 16.04 - Apache

Verso

New Member
Hallo.

Ich würde nun gerne eine fertiggestellte NodeJS Applikation auf einem Virtual Server laufen lassen.

Kurz ein paar Infos zu mir:

-Ich habe bis jetzt noch keine Erfahrung mit Ubuntu
-Ich hatte vorher nie mit Servern zu tun.

Bitte seid nicht so hart zu mir :)

Der Server hat:
Plesk
Ubuntu: 16.04.2 LTS (codename xenial)
Apache: 2.4.18
NodeJS: 6.10.3

und ist von hosteurope.de (falls das irgendwie wichtig ist).

Problem: Ich habe keine Ahnung, wie ich den Apache konfigurieren muss.
Es gibt dutzende Anleitungen, mit denen ich nicht so wirklich viel anfangen kann, da sie anscheinend nicht richtig ziehen oder ich irgendetwas falsch mache.

Wenn ich auf den Server im Browser zugreife per IP, erhalte ich aktuell:

You don't have permission to access / on this server.


Was ich mir bereits erlesen konnte:
-Man muss anscheinend Apache mit NodeJS über proxy konnektieren, damit das Vorhaben funktioniert.

Wie mache ich das ?
 
Last edited by a moderator:
Deine Anwendung kannst Du auf Port 80 laufen auf der nach aussen zugänglichen IP laufen lassen. Das müsste in Deiner Nodes-Anwendung konfiguriert werden.

Ansonsten kann man später einen richtigen Webserver(Apache, NGINX) als Reverseproxy durchaus gebrauchen, z. B. wegen:

  • SSL / Letsencrypt
  • Rechtevergaben
  • Virtualhosting
  • Umleitungen
  • vieles mehr

Die Grundkonfiguration für Apache sollte recht einfach sein. Einfach das vorhandene Template(/etc/apache2/sites-available/000-default.conf) um die Proxydirektiven erweitern:

Code:
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        ProxyPass / http://127.0.0.1:12345
        ProxyPassReverse / http://127.0.0.1:12345
</VirtualHost>

12345 ist der Port auf dem deine Node-Anwendung läuft. Das musst Du anpassen.

Anschliessend noch das Proxy-Modul aktivieren:

Code:
a2enmod proxy

Einmal die Konfiguration prüfen, ob alles richtig geschrieben wurde:

Code:
apache2ctl configtest

und Apache durchstarten:

Code:
systemctl restart apache2
 
Last edited by a moderator:
[...]
Einmal die Konfiguration prüfen, ob alles richtig geschrieben wurde:

Code:
apache2ctl configtest

und Apache durchstarten:

Code:
systemctl restart apache2



Hi und vielen Dank für deine Antwort! Das nenne ich mal verständliche Anleitung.
Deine Schritte habe ich soweit befolgt, ich habe jedoch den Pfad zu meiner NodeJS Anwendung angepasst und zwar so:

/var/www/vhosts/system/*NAMEMEINERNODEJSAnwendung*

Und natürlich dieses "Serveradmin" angepasst.

Rufe ich jedoch meine Serverip im Browser auf, erhalte ich folgende Meldung:

You don't have permission to access / on this server.
Apache Server at ***.***.***.*** Port 80


In den Logdateien steht folgende Meldung:


Code:
AH01276: Cannot serve directory /var/www/vhosts/*MEINEANWENDUNG*/my-app/public/: No matching DirectoryIndex (at_domains_index.html,index.html,index.cgi,index.pl,index.php,index.xhtml,index.htm,index.shtml,index.cfm) found, and server-generated directory index forbidden by Options directive

Wie kann ich das lösen?
 
Last edited by a moderator:
Code:
/var/www/vhosts/system/*NAMEMEINERNODEJSAnwendung*

So würdest Du NodeJS aufrufen, wenn der Apache das ausführen würde.

NodeJS ist aber eine eigene Laufzeitumgebung, in der die Anwendung unabhängig vom Apache ausgeführt wird.

D. h. Du musst Deine NodeJS-Anwendung erst starten. Falls Du noch nicht weisst wie das geht, dann beschäftige Dich erst mal mit NodeJS weiter.

Anschliessend sind die wichtigen Zeilen in der Apache Konfiguration, die Du anpassen musst:

Code:
ProxyPass / http://127.0.0.1:12345
ProxyPassReverse / http://127.0.0.1:12345
 
Leider hat die von dir genannte Methode auch nicht funktioniert.

Die NodeJS Applikation läuft, MongoDB ebenfalls.

Ich kann einfach die angegebenen Contextroots nicht nutzen bzw. die Applikation generell nicht aufrufen.
 
Du gibst aber schnell auf.

Was bleibt mir anderes übrig?

Ich weiß nicht, was ich noch ausprobieren kann.

Bekomme andauernd:

HTML:
Cannot serve directory /var/www/vhosts/smbd-meineSeite.com/sUniverseApp/test/: No matching DirectoryIndex (at_domains_index.html,index.html,index.cgi,index.pl,index.php,index.xhtml,index.htm,index.shtml,index.cfm) found, and server-generated directory index forbidden by Options directive
 
Last edited by a moderator:
Fange doch mal mit was einfachem an. Z. B. den deutschen Tutorials hier:

http://nodecode.de

Dort gibt es oben den Punkt Einführung. Die Unterpunkte davon helfen Dir zu verstehen, was dieses NodeJS so ist und wie es mal grundsätzlich läuft. Das mit dem Chat brauchst Du wahrscheinlich nicht unbedingt.

Danach kannst du Deine Anwendung erst einmal standalone(d. h. ohne Webserver(e. g. apache/nginx) ausführen. Am besten machst Du das auf Deinem Rechner zu Hause.

Es gibt noch viele Tutorials zum Thema.

Nachdem Du dann Erfahrung mit kleinen Anwendung gesammelt hast und Dir die Umgebung klar wird, kannst du deine NodeJS-Anwendung mit dem Webserver zusammenbringen. Auch dafür gibt es sehr viele Anleitungen im Netz, die viel besser sind und mehr Tips enthalten als meine 5 Zeilen von oben.
 
Last edited by a moderator:
[...]

Dort gibt es oben den Punkt Einführung. Die Unterpunkte davon helfen Dir zu verstehen, was dieses NodeJS so ist und wie es mal grundsätzlich läuft. Das mit dem Chat brauchst Du wahrscheinlich nicht unbedingt.

Danach kannst du Deine Anwendung erst einmal standalone(d. h. ohne Webserver(e. g. apache/nginx) ausführen. Am besten machst Du das auf Deinem Rechner zu Hause.

Es gibt noch viele Tutorials zum Thema.

Nachdem Du dann Erfahrung mit kleinen Anwendung gesammelt hast und Dir die Umgebung klar wird, kannst du deine NodeJS-Anwendung mit dem Webserver zusammenbringen. Auch dafür gibt es sehr viele Anleitungen im Netz, die viel besser sind und mehr Tips enthalten als meine 5 Zeilen von oben.


Meine Anwendung läuft doch lokal (und da steckt etwa ein Jahr programmierarbeit drin), ich programmiere schon seit einem Jahr in NodeJS. Diese Antwort von dir passt nicht zu meiner Frage, da wie gesagt die Anwendung auf dem Server bereits erfolgreich läuft.
Es läuft also zusammengefasst alles, außer dem scheiß Apache.

Lediglich den Apache bekomme ich nicht eingestellt.
 
Auf welchem Port läuft die NodeJS-Anwendung auf dem Server?

EDIT

Das sieht etwas abenteuerlich aus, wie man das aufsetzt, aber im Endeffekt muss ja nur die Anwendung ausgeführt werden.

Hier ist z. B. eine Anleitung zum Setup unter Ubuntu 16.04 LTS mit nginx:

https://www.digitalocean.com/commun...js-application-for-production-on-ubuntu-16-04

EDIT-2

Ich vermute dass Deine NodeJS-Anwendung eben noch nicht läuft, sondern dass die Dateien von Dir bisher lediglich auf den Server kopiert wurden. Deswegen auch der Hinweis nochmal auf die Anleitung im vorigen Abschnitt. Dort wird erläutert, wie Du Dir die NodeJS-Umgebung installierst.
 
Last edited by a moderator:
Alterntativ könntest Du einfach mal die komplette relevante Konfig posten. Also z.B. mal den Apache-VHost, dazu noch Logeinträge.

Nur zu sagen "es geht nicht" hilft nicht vie weiter - da könnte ich auch einfach antworten "doch, tut es. Hier zumindest."
 
Auf welchem Port läuft die NodeJS-Anwendung auf dem Server?

EDIT
Hier ist z. B. eine Anleitung zum Setup unter Ubuntu 16.04 LTS mit nginx:

https://www.digitalocean.com/commun...js-application-for-production-on-ubuntu-16-04

EDIT-2

Ich vermute dass Deine NodeJS-Anwendung eben noch nicht läuft. Deswegen auch der Hinweis nochmal auf die Anleitung im vorigen Abschnitt. Dort wird erläutert, wie Du Dir die NodeJS-Umgebung installierst.


Die NodeJS Anwendung läuft auf Port 4000.
Die Anwendung läuft definitiv, da sie beim Start Werte in der Datenbank ablegt, die ich konfiguriert habe (also einige Datensätze). Das ist geschehen. Abgesehen davon gebe ich auch eine Startnachricht aus, die mir ebenfalls angezeigt wurde. Die Anwendung läuft also, wie bereits gesagt.


Alterntativ könntest Du einfach mal die komplette relevante Konfig posten. Also z.B. mal den Apache-VHost, dazu noch Logeinträge.

[...]

default.conf:

HTML:
<VirtualHost *:80>
        ServerAdmin s*****@gmail.com
        DocumentRoot /var/www/vhosts/meineseite.com/sUniverseApp
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        ProxyPass / http://127.0.0.1:4000
        ProxyPassReverse / http://127.0.0.1:4000
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
 

Attachments

  • errors.PNG
    errors.PNG
    113.3 KB · Views: 119
Last edited by a moderator:
Die NodeJS Anwendung läuft auf Port 4000.

Damit kann man was anfangen.

Bitte mal mit netstat -ntlp4 bzw. ss -nlt4 prüfen ob die Anwendung wirklich läuft.

Ansonsten mal die Ausgabe aus dem Apache error Log(/var/log/apache2/error.log) hier rein stellen.

Die DocumentRoot-Angabe kannst Du auch entfernen. Das geht ja bei Dir eh' alles zu NodeJS.

Ich meine das Modul proxy_http müsste auch noch eingeschaltet werden. (a2enmod proxy_http ; /etc/init.d/apache2 restart)
 
Last edited by a moderator:
Damit kann man was anfangen.

Bitte mal mit netstat -ntlp4 bzw. ss -nlt4 prüfen ob die Anwendung wirklich läuft.

Ansonsten mal die Ausgabe aus dem Apache error Log(/var/log/apache2/error.log) hier rein stellen.

Die DocumentRoot-Angabe kannst Du auch entfernen. Das geht ja bei Dir eh' alles zu NodeJS.

Ich meine das Modul proxy_http müsste auch noch eingeschaltet werden. (a2enmod proxy_http ; /etc/init.d/apache2 restart)

Deine genannten Befehle zeigen mir eine Übersicht, in der ich jedoch den Port 4000 nicht finden kann... Schlechtes Zeichen.


Ausschnitt aus dem Log:

HTML:
[Wed May 24 19:26:23.405253 2017] [:error] [pid 9000:tid 140717893740416] python_init: Python version mismatch, expected '2.7.6', found '2.7.12'.
[Wed May 24 19:26:23.405320 2017] [:error] [pid 9000:tid 140717893740416] python_init: Python executable found '/usr/bin/python'.
[Wed May 24 19:26:23.405325 2017] [:error] [pid 9000:tid 140717893740416] python_init: Python path being used '/usr/lib/python2.7/:/usr/lib/python2.7/plat-x86_64-linux-gnu:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload'.
[Wed May 24 19:26:23.405343 2017] [:notice] [pid 9000:tid 140717893740416] mod_python: Creating 8 session mutexes based on 6 max processes and 25 max threads.
[Wed May 24 19:26:23.405346 2017] [:notice] [pid 9000:tid 140717893740416] mod_python: using mutex_directory /tmp 
[Wed May 24 19:26:23.413487 2017] [ssl:warn] [pid 9000:tid 140717893740416] AH01909: lists:443:0 server certificate does NOT include an ID which matches the server name
[Wed May 24 19:26:23.413679 2017] [ssl:warn] [pid 9000:tid 140717893740416] AH01909: default-46_163_73_152:443:0 server certificate does NOT include an ID which matches the server name
[Wed May 24 19:26:23.417396 2017] [mpm_event:notice] [pid 9000:tid 140717893740416] AH00489: Apache/2.4.18 (Ubuntu) mod_fcgid/2.3.9 mod_python/3.3.1 Python/2.7.12 OpenSSL/1.0.2g mod_perl/2.0.9 Perl/v5.22.1 configured -- resuming normal operations
[Wed May 24 19:26:23.417423 2017] [core:notice] [pid 9000:tid 140717893740416] AH00094: Command line: '/usr/sbin/apache2'
[Wed May 24 22:17:03.564962 2017] [mpm_event:notice] [pid 9000:tid 140717893740416] AH00491: caught SIGTERM, shutting down
[Wed May 24 22:17:04.662484 2017] [ssl:warn] [pid 12663:tid 139671878350720] AH01909: lists:443:0 server certificate does NOT include an ID which matches the server name
[Wed May 24 22:17:04.662745 2017] [ssl:warn] [pid 12663:tid 139671878350720] AH01909: default-46_163_73_152:443:0 server certificate does NOT include an ID which matches the server name
[Wed May 24 22:17:04.663089 2017] [suexec:notice] [pid 12663:tid 139671878350720] AH01232: suEXEC mechanism enabled (wrapper: /usr/lib/apache2/suexec)
[Wed May 24 22:17:04.684033 2017] [auth_digest:notice] [pid 12664:tid 139671878350720] AH01757: generating secret for digest authentication ...
[Wed May 24 22:17:04.685661 2017] [:error] [pid 12664:tid 139671878350720] python_init: Python version mismatch, expected '2.7.6', found '2.7.12'.
[Wed May 24 22:17:04.685744 2017] [:error] [pid 12664:tid 139671878350720] python_init: Python executable found '/usr/bin/python'.
[Wed May 24 22:17:04.685750 2017] [:error] [pid 12664:tid 139671878350720] python_init: Python path being used '/usr/lib/python2.7/:/usr/lib/python2.7/plat-x86_64-linux-gnu:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload'.
[Wed May 24 22:17:04.685769 2017] [:notice] [pid 12664:tid 139671878350720] mod_python: Creating 8 session mutexes based on 6 max processes and 25 max threads.
[Wed May 24 22:17:04.685773 2017] [:notice] [pid 12664:tid 139671878350720] mod_python: using mutex_directory /tmp 
[Wed May 24 22:17:04.693823 2017] [ssl:warn] [pid 12664:tid 139671878350720] AH01909: lists:443:0 server certificate does NOT include an ID which matches the server name
[Wed May 24 22:17:04.694075 2017] [ssl:warn] [pid 12664:tid 139671878350720] AH01909: default-46_163_73_152:443:0 server certificate does NOT include an ID which matches the server name
[Wed May 24 22:17:04.697530 2017] [mpm_event:notice] [pid 12664:tid 139671878350720] AH00489: Apache/2.4.18 (Ubuntu) mod_fcgid/2.3.9 mod_python/3.3.1 Python/2.7.12 OpenSSL/1.0.2g mod_perl/2.0.9 Perl/v5.22.1 configured -- resuming normal operations
[Wed May 24 22:17:04.697556 2017] [core:notice] [pid 12664:tid 139671878350720] AH00094: Command line: '/usr/sbin/apache2'
 
Ok, es gibt Neuigkeiten.

Die NodeJS Anwendung (samt MongoDb und Nodejs) läuft, sie gibt per

HTML:
curl http://localhost:4000
eine korrekte Antwort. PM2 ist eingerichtet.


Nachdem ich jetzt den Apache2 neugestartet habe und mit
HTML:
sudo service apache2 status
geprüft habe, ob Apache korrekt läuft,
musste ich folgendes feststellen:

Starting Apache httpd web server apache2

dann habe ich Folgendes eingegeben:

HTML:
sudo service apache2 start

und siehe da:

unable to resolve host www.MEINESEITE.de (MEINESEITE ist hier natürlich durch den namen meiner Domain ersetzt).

DNS scheint nicht zu funktionieren, sieht man auch, wenn man auf meine domain zugreifen möchte.


Wie sieht meine /etc/hostname aus ?

Dort steht nur der Name meiner Seite drin:
s***-**** (ohne www und ohne suffix oder sonstiges). Also im prinzip nur ein Name (keine Domain).

Wie sieht meine /etc/hosts aus ?

HTML:
127.0.0.1	localhost.localdomain localhost	
::1	localhost.localdomain localhost ip6-localhost ip6-loopback	
ff02::1	ip6-allnodes	
ff02::2	ip6-allrouters	

# Auto-generated hostname. Please do not remove this comment.
46.xxx.xxx.xxx	s***-****.com s***-****

Wie sieht mein DNS aus ? Siehe Bild im Anhang.
 

Attachments

  • dns.PNG
    dns.PNG
    61.3 KB · Views: 138
Back
Top