Python client mit externer Verbindung zu MongoDB

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
cypher28
User
Beiträge: 24
Registriert: Mittwoch 8. Dezember 2021, 00:54

Hallo zusammen,

ich habe folgende Frage an euch.
Ich habe ein python client auf meinem Windows Rechner. Besser gesagt ist es ein kleines PyGame Spiel. Es existiert ein externer Ubuntu Server auf dem ich MongoDBinstalliert habe.
Jetzt möchte ich mit dem Client eine Verbindung zur externen MongoDB aufbauen um Daten zu schreiben oder zu lesen.

Kann ich direkt mit PyMongo eine Verbindung zur MongoDB aufbauen?

Wenn ich MongoDB local auf dem Rechner habe kann ich mit folgendem Code:

Code: Alles auswählen

from pymongo import MongoClient

connection_string = "mongodb://localhost:27017/tutorial"
client = MongoClient(connection_string) 

print(client.list_database_names())
meine Datenbank ausgeben. Nur zum externen Server mit MongoDB kriege ich keine Verbindung.
Muss ich irgendein Dienst von MongoDB starten auf dem Server, damit dieser von aussen erreichbar ist?

in der connection_String habe ich auch die selben Daten eingetragen, die ich auch in putty eintrage, aber die Verbindung kommt nicht zu stande.

Code: Alles auswählen

"mongodb://root:"password"@"link zum Server":PORT/tutorial"
Folgende Fehlermeldung: "pymongo.errors.ServerSelectionTimeoutError...."
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wahrscheinlich hat der externe Server eine Firewall, die das verhindert. Und im allgemeinen ist das eine gute Idee, man öffnet eine Datenbank nicht direkt einem Client. Aus zwei Gründen: Sicherheit, vor allem aber weil man verhindern will, dass jemand die Datenbank von außen manipulieren kann. Denn die enthält zb Daten wie Highscores, die jetzt einfach von jedem, der dein Spiel spielt, manipuliert werden können. Soll das so?
paddie
User
Beiträge: 101
Registriert: Donnerstag 11. Oktober 2018, 18:09

Was __deets__ schreibt ist natürlich vollkommen richtig ;-). Eine DB sollte NIE direkt erreichbar sein.

Ich hab mich bisher noch nie mit MongoDB beschäftigt, aber kann es sein, dass MongoDB einfach in der Standardconfig nur an localhost gebunden ist? Einfach mal in den Config-Files gucken. Wenns jetzt nur im lokalen eigenen Netz zum Testen sein soll, kann man das ja schon so machen. Später... --> siehe oben ;-). Produktiv auf einem frei zugänglichen Server wird das GARANTIERT in die Hose gehen. Im "besten" Fall wird dir nur einer an der Datenbank rumfummeln. Im schlimmsten Fall wird der Server komplett übernommen.

Ich habs bei mir zum entwickeln mit einem SSH Tunnel gelöst. Auf meinem vServer liegt die DB (Postgres) die nur an localhost gebunden ist und auf den Clients habe ich ein Portforwarding durch den SSH-Tunnel. Für den Client ists einfach nur eine Verbindung auf Port xxxx auf localhost die dann durch den Tunnel weitergeleitet wird.
cypher28
User
Beiträge: 24
Registriert: Mittwoch 8. Dezember 2021, 00:54

Vielen dank für die antworten.
Es ist tatsächlich erstmal nur dazu da um PyGame zu erlernen. Sicherheit war erstmal an letzter stelle.
Es lag an dem PORT auf dem Server. Der war nicht richtig konfiguriert. Jetzt funktioniert es auch.
:D
Antworten