Mongo DB Express auf Port :8081 zum Laufen kriegen. Was mach ich falsch?
Hab mal eine Frage zum Thema IT & Server & Ports und würde mich freuen wenn mir einer mit Fachkenntnissen weiterhelfen kann:
Also ich versuche hier seit Tagen eine kleine Webseite auf einem angemieteten Server (Debian 10) zum Laufen zu kriegen und möchte dabei das Datenbanksystem Mongo DB (+ das Webinterface mongo-express) verwenden. Die wichtigsten Grundabhängigkeiten wie Mongo DB, PHP, Java, node.js, npm etc. konnte ich bereits alle installieren und hab es nach sehr langem Herumprobieren sogar geschafft mit einem kleinen .sh Script den Port :8081 zu öffnen, sodass dieser zumindest in den IP-Tables angezeigt wird. Auch konnte ich (Mithilfe verschiedener Anleitungen) alle Anwendungen erfolgreich starten, teils erst nach dem Setzen einiger Umgebungsvariablen setzen und bekomme nun die Meldung, dass der DB-Express Server auf dem richtigen Port lauscht. Dennoch komm ich nun seit gestern nicht weiter bzw. mein Browser kann sich mit dem Port :8081 des Servers einfach nicht verbinden > "Netzwerkfehler", wobei die Ursache alles und nichts sein kann! Hab auch schon mit anderen Ports probiert mit ähnlichem Resultat. Meine Frage wäre jetzt ob irgendeiner diese Anwendung hier (dieses Problem) zufällig kennt oder weiß was hier zutun ist oder was ein mögliches Problem sein kann? Ich hab da zwar eine wage Vermutung aber da ich das alles komplett blind und zum ersten mal mache und derzeit keinen *richtigen* IT-Experten habe wären ein paar Ratschläge, die jetzt nicht unbedingt in den Anleitungen stehen nicht schlecht?
2 Antworten
und hab es nach sehr langem Herumprobieren sogar geschafft mit einem kleinen .sh Script den Port :8081 zu öffnen, sodass dieser zumindest in den IP-Tables angezeigt wird.
Rumprobieren ist einfach kein geeignetes Vorgehen. Die Aussage bezüglich des Öffnen des Ports ist nicht hinreichend eindeutig - es wäre gut, wenn Du das etwas detailierter ausführst, denn es kann keiner hellsehen.
, teils erst nach dem Setzen einiger Umgebungsvariablen setzen
auch das hier spricht nicht gerade dafür, daß die Dinge richtig angegangen wurden, ansich sollte das mittelbar durchs Initsystem erfolgen.
Wenn man ein solches Problem hat, dann sollte man es schrittweise analysieren, dazu gehören dann ggf. auch Logs.
- Laufen MongoBD und mongo-express
- Lauschen sie an den richtigen Sockets
- Funktioniert ein lokaler Aufruf
Wenn lokale alles klappt und man andere Verbindungen zum Server hat, die funktionieren, dann kann man relattiv sicher sein, daß man sich die FW-Konfiguration nochmal anschauen sollte.
Default Policy ist DROP?
Im Prinzip passt das, Du solltest sicherheitshalber schauen, ob davor eien andere Rule ggf. verhindert, daß diese greift:
iptables -L INPUT.
----
Ich nutze kein Debian, hab das mal kurz getestet:
~ # systemctl start mongodb
~ # systemctl status mongodb
● mongodb.service - High-performance, schema-free document-oriented database
Loaded: loaded (/usr/lib/systemd/system/mongodb.service; disabled; preset: disabled)
Active: active (running) since Fri 2024-04-12 20:56:08 CEST; 20s ago
Main PID: 1558138 (mongod)
CPU: 2.251s
CGroup: /system.slice/mongodb.service
└─1558138 /usr/bin/mongod --quiet --config /etc/mongodb.conf
Apr 12 20:56:08 stratus systemd[1]: Started High-performance, schema-free document-oriented database.
mongodb läuft soweit, schauen wir mal mit netstat nach:
~ # netstat -lop|grep mongo
tcp 0 0 localhost:27017 0.0.0.0:* LISTEN 1558138/mongod off (0.00/0/0)
unix 2 [ ACC ] STREAM LISTENING 6792448 1558138/mongod /tmp/mongodb-27017.sock
Lauscht auf TCP Port 27017 und auf unix domain socket, soweit so gut.
Installation von mongo-express habe ich mit npm gemacht, das ist insofern krüppelig, da er am eigentlichen PM der Distri vorbeitpfuscht und auch die Eigenheiten der Platform nicht korrekt honoriert - aber das ist ein anderes Thema und soll hier nicht stören.
npm install -g mongo-express
Und danach starten mit:
# mongo-express
No custom config.js found, loading config.default.js
Welcome to mongo-express
------------------------
Mongo Express server listening at http://localhost:8081
basicAuth credentials are "admin:pass", it is recommended you change this in your config.js!
Wie man sieht, ich war sogar zu faul ne Konfiguration festzulegen. Schauen wir mit netstat:
~ # netstat -lnop |grep node
tcp6 0 0 ::1:8081 :::* LISTEN 1558188/node off (0.00/0/0)
Du siehst, standardmässig ist hier NUR an die IPv6 des Loopback gebunden.
Wie dem auch sei, öffne ich nen Webbrowser und rufe localhost:8081 auf, erreiche ich die Landign Page von mongo-express.
Ich habe mir jetzt nich die Mühe gemacht mongo-express ordentlich als Service einzurichten.
Auf dem Server lokal kannst du für nen Test auch sowas wie lynx oder links nutzen, es geht ja nur darum zu sehen OB mongo-express erstmal grundlegend läuft.
Und dann schau insbesondere mit netstat nach wo Dein mongo-express wirklich lauscht.
Default Policy ist ACCEPT. Ich konnte es jetzt durch einen entsprechenden Eintrag in den Apache Konfigurationsdateien (ports.conf, apache.conf und 000-default.conf so lösen, dass sich der Browser immerhin mit dem Port (8081) verbinden kann und es keinen Netzwerkfehler mehr gibt. Dafür gibt es jetzt einen 403 Forbidden Error und ein versuchter Neustart von MongoDB Express spuckt die Warnung aus, dass der Port belegt ist. Das hier sind die Prozesse, die scheinbar den Port blockieren:
apache2 1241486 root 6u IPv6 1907164896 0t0 TCP *:tproxy (LISTEN)
apache2 1241487 www-data 6u IPv6 1907164896 0t0 TCP *:tproxy (LISTEN)
apache2 1241488 www-data 6u IPv6 1907164896 0t0 TCP *:tproxy (LISTEN)
apache2 1241489 www-data 6u IPv6 1907164896 0t0 TCP *:tproxy (LISTEN)
apache2 1241490 www-data 6u IPv6 1907164896 0t0 TCP *:tproxy (LISTEN)
apache2 1241491 www-data 6u IPv6 1907164896 0t0 TCP *:tproxy (LISTEN)
apache2 1241494 www-data 6u IPv6 1907164896 0t0 TCP *:tproxy (LISTEN)
Das obige Shellscript hab ich gelöscht und dafür IP-Tables installiert und dort nochmal den Port als Eintrag in die rules.v4 eingefügt. Versucht MongoDB evtl. schon per Default diesen Port zu aktivieren und das Ganze hier ist doppelt gemoppelt?
Was hat apache bei Dir in der Gleichung denn zu suchen?
mongo-express läuft doch auf NodeJS.
Es geht ja um den Port. Ich hab den Eindruck, dass bei mir die Verzeichnisse die nicht von Apache gewhitelisted sind überhaupt nicht ansurfbar sind. (Hab das Ganze auch schon mit anderen Dateien & Scripten probiert)
Apache ist ein HTTP-daemon (Webserver), NodeJS ist ein Laufzeitumgebung für Javascript und bringt einen eigenen Webserver mit.
Sofern Du nicht irgendein besonderes Konstrukt hast (das Du noch nicht genannt hast) ist apache für mongoDB und mongo-express außen vor. Natürlich darf er nicht den Port binden, den node (respektive mongo-express) nutzen will.
Um noch kurz auf etwas anderes hinzuweisen, wenn Deine Default Policy ACCEPT ist, dann brauchst Du ansich für mongo-express auch keien Rule in der table.
OK dann müsste evtl. der Webserver von NodeJS separat gestartet / konfiguriert werden? Hängt es evtl. damit zusammen?
Nein, das macht mongo-express alles. Im Prinzip ist das einfach nur das instanziieren eines HTTPServer-Objektes, Handler registrieren, listen() ausführen.
sogar geschafft mit einem kleinen .sh Script den Port :8081 zu öffnen
Dann ist der Port belegt, und du kannst ihn mit dem Server nicht mehr nutzen.
Davon abgesehen gibt es bessere Möglichkeiten, mit einer Datenbank zu interagieren, als über ein Webinterface.
Könnte der Port durch obige Shelldatei blockiert werden? (Ich hab nur befolgt was mir geraten wurde)
Also zu dem .sh Script: Ich hab auf dem Server im Ordner /etc/network/if-up.d eine kleine ausführbare Shelldatei erstellt die folgenden Inhalt hat:
#!/bin/bash
iptables -A INPUT -p tcp --dport 8081 -j ACCEPT
Der Port ist danach in dem IP-Table gelistet worden und wartet scheinbar auf eingehende Verbindungen. Stimmt das so oder hab ich jetzt kompletten Murks gebaut?
MongoDB und mongo-express laufen bzw. werden zumindest als aktive Prozesse gefunden.