Python Webentwicklung mit Python, was ist gängig

Blutschlumpf

Fleet Admiral
Registriert
März 2001
Beiträge
20.050
Ich habe vor ein paar Wochen mit Python begonnen.
Als alter Sack, der noch mit Pascal/C/VB groß und mit Apache / PHP / MySQL als fancy shit alt geworden ist (da stellte sich ja immer nur die Glaubensfrage, sprich ob man PHP als Modul oder per CGI nutzen wollte), stellt sich für mich gerade die Frage wie man python und Webentwicklung kombiniert, sprich was da der verbreitetste Weg ist (ich habe keinen konkreten Anwendungsfall, den es zu lösen gilt).

Zu Apache/nginx + Python finde ich recht wenig (also deutlich weniger als erwartet) und oft auch sehr alte Sachen, was mich vermuten lässt, dass das nicht sehr verbreitet ist.
In dem udemy-Kurs, den ich gerade bespiele, wird Flask benutzt und damit dann aus python raus ein Server gestartet.
Das macht mir jetzt nicht den Eindruck, dass das Maß der Dinge ist, zum einen weil man bei jeder Codeänderung den Application-Server neu startet und zum anderen weils spätestens bei nem Webhoster keine Option sein dürfte selber nen Port zu öffnen.
Allerdings ist das Web voll von Guides, die solche Framworks (meist Django oder Flask) nutzen.

Falls die Methode Webserver + CGI tot ist: Wie funktioniert das bei Shared Hosting Umgebungen?
1000 User, jeder bekommt 5 Ports, die er nutzen kann und per Webserver/Proxy davor werden 80 und 443 je nach Domain auf den Kundenport umgeleitet?
 
Django ist aktiv und angenehm.
Ich betreibe ein paar Django ANwendungen bei Hetzner. dank flinker SSDs und CPUs bekommt man schon einige tausend User auf eine VM unter 10 Euro/Monat packen.

Als reverse proxy davor auf jeden Fall nginx. Kein Apache. Das geht mit Django im Backend gern schief und ist auch einfach weniger performant.

Blutschlumpf schrieb:
1000 User, jeder bekommt 5 Ports, die er nutzen kann und per Webserver/Proxy davor werden 80 und 443 je nach Domain auf den Kundenport umgeleitet?
bestimmt. kommt da sicher auf den hoster an wie viel OP sie betreiben
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: jb_alvarado
madmax2010 schrieb:
Als reverse proxy davor auf jeden Fall nginx. Kein Apache. Das geht mit Django im Backend gern schief und ist auch einfach weniger performant.
Warum? Man benutzt mit nginx doch ebenfalls wsgi oder nicht? Ich habe gehört, gUnicorn ist moderner aber meine alte Anwendung läuft immer noch mit Apache und mod_wsgi

Inwiefern sich Django bei einem Hoster nutzen lässt, bin ich mir aber auch unsicher. Wenn ich keinen SSH Zugriff habe, kann ich ja kaum Module mit pip nachinstallieren. Ich habe bei Netcup aktuell glaube ich sogar ein Hosting Paket inkl. Python aber wüsste nicht, wie ich da ein Django installiert und zum laufen bekomme. Wenn es ein richtiger vServer mit Plesk ist (oder auch ohne, Hauptsache SSH), dann kann ich da ja alle möglichen Pakete nachinstallieren. Wenn es aber nur ein Webhosting ist, was macht man dann?
 
madmax2010 schrieb:
dank flinker SSDs und CPUs bekommt man schon einige tausend User auf eine VM unter 10 Euro/Monat packen.
Damit umgehst du ja nur die Frage der Shared Systeme, deine VM dürfte ja vermutlich ne eigene IP haben. ;)

Ich meinte damit wie man z.B. 1000 Kunden (nicht Clients) mit belanglos unterfrequentierten Seiten versorgt.
Du wirst ja nicht für jeden Kunden ne IP hochfahren.

Wie steuert man das Starten und Stoppen der Scripte?
Ich habe sagen wir mal 1000 Kunden, die jeweils 5 Scripte haben.
Jedes Script wird im Schnitt nur 10 mal am Tag aufgerufen.
Lässt man da jetzt 5000 Python-Prozesse incl. dem ganzen Framework-Geraffel kontinuierlich laufen?
Das muss doch Speicher ohne Ende verbrauchen. Ein Python-Einzeiler ("x = input (x:)") ohne Module braucht schon 16MB Ram.
Oder startet man dann bei jedem Aufruf den Prozess und killt den Prozess wieder wenn da 5 Sekunden lang keine Anfrage kam? Stell ich mir in Punkto Latenz/Ladezeit schwierig vor.

btw: Seit wann kopiert CB denn Stackoverflow mit dem Hoch/Runtervoten und "als Lösung markieren"? Sehe ich gerade zum ersten mal. Ist das nur im Programmier-Forum aktiv?
 
Webentwicklung mit Python, ist nicht gängig.

Kann man natürlich machen, aber ist die Nische.

Ohne Framework, kommt man heute, allgemein nicht mehr besonders weit.
 
  • Gefällt mir
Reaktionen: EyeSeaTee
Ich bin ein großer Fan von Django, einfach weil es ein All in One Paket ist, dass auch leicht zu verstehen ist.
Es gibt unmengen an Dokumentation und die Nutzerbase ist riesig, sodass man eigentlich auf alle Fragen eine Antwort findet. Ich benutze Django allerdings für Rest, da ich die Frontendgestaltung dort nicht ganz so cool finde (ist aber Geschmackssache, ich benutze Vue fürs Frontend).
Noch ein paar Vorteile:
  • Auto Reloader: Bei Code Änderungen wird der Server automatisch neugestartet (dauert 2 sek)
  • Datenbank Management integriert: Modelle werden in Python geschrieben, Django erstellt, verändert, löscht damit dann in allen gängingen Datenbanksysteme wie MySQL und PostgreSQL alle Tabellen und verwaltet diese dann auch
  • Datenbank abfragen: Auch alles Python und vieles durchautomatisiert, sprich bis auf das reine anlegen der Datenbank hat man mit ihr nichts mehr zu tun
  • Fertige Admin Ansicht um Daten zu verwalten
  • Schnittstellen auch vieles automatisiert, aber auch komplett selbst anpassbar
  • Viele fertige Module, wie Benutzerverwaltung, Email versenden, Loginsessions, etc. von Haus + extrem viele private Dinger
  • Langer Support
Nachteile:
  • Es ist Python und damit nicht unbedingt das absolut schnellste (wobei mit Python 3.10 und 3.11 daran gearbeitet wird)
  • Es beinhaltet viel und ist daher auf den ersten Blick ein bisschen erschlagend und es gibt auch ein paar Abwandlungen wie schon erwähnt mit eigenen Frontend oder externen Frontend und muss sich da ein bisschen durschlagen
  • Es ist ein goldener Käfig, solange man darin bleibt ist alles supi, will man ausbrechen weil man ein crazy feature einbauen möchte könnte es schwer werden
Zum Hosting:
Nginx mit Gunicorn oder Nginx mit uwsgi ist da die Wahl, ein Server mit SSH Zugriff ist dafür natürlich Vorraussetzung (geht ja weit über ein normalen WebServer hinaus...)
Ich habe mich da immer in diese Anleitung gehalten: https://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html

Wobei ich persöhnlich inzwischen einen F*ck darauf gebe, weil mir diese ganzen Webconfigs auf den Senkel gehen und benutze AWS Elastic Beanstalk, was mir (naja fast) alles automatisch konfiguriert, dafür aber auch ein bissl was kostet.

Blutschlumpf schrieb:
Wie funktioniert das bei Shared Hosting Umgebungen?
Naja, die Weiterleitung von der Url zu deiner Instanz(en) sollte eigentlich Sache des Anbieters ein, dass einizige was du noch machen solltest ist nginx sagen auf welchem Port deine Applikation läuft, Django läuft Standardmäßig auf Port 8000

Blutschlumpf schrieb:
Wie steuert man das Starten und Stoppen der Scripte?
Ich habe sagen wir mal 1000 Kunden, die jeweils 5 Scripte haben.

Äh, wie soll man das verstehen? Die Kunden laden ein Skript hoch und dass wird dann auf dem Server ausgeführt? Was ist der Sinn dahinter?

Ich kenne mich mit Flask jetzt besonders gut aus, aber Flask als auch Django laufen als eine Applikation, das wird einmal gestartet (man kann noch über wsgi angeben wie viele Threads verwendet werden sollen),
Da laufen keine 5000 Prozesse sondern nur Einer und der Dauerhaft, alle eingehenden Requests werden von den beiden Frameworks verwaltet, bei langandauernden Tasks kann man noch schauen, dass man die asynchron abarbeitet (dafür gibts dann aber auch plugins)
 
Du kannst ja vermutlich nicht mehrere Kunden mit einem python-Prozess bzw. einer Flask-Instanz bedienen.
Ich meinte da nicht eine große Applikation sondern wie man 1000 Kunden mit "Tante Emmas Stickecke" Websites abfrühstückt.
Aber ich entnehme daraus, dass Python bei normalem Webhosting (also <= VM) schlichtweg überhaupt kein Thema ist (oder hier niemand verstanden hat was ich wissen wollte).
Angeboten wirds ja offenbar, steht natürlich bei ner Strato oder co nicht dabei wie genau die das machen.
 
Blutschlumpf schrieb:
Du kannst ja vermutlich nicht mehrere Kunden mit einem python-Prozess bzw. einer Flask-Instanz bedienen.
Ja doch, sogar verdammt viele, werden alle parallel abgerabeitet, das wird komplett von den Frameworks verwaltet und braucht man sich nicht drum zu kümmern (wie ja eigentlich von jedem Framework), dabei kannst du den Server natürlich skalieren, oder mit Hilfe eines Loadbalancers mehrere Server damit betreiben.

Blutschlumpf schrieb:
Python bei normalem Webhosting (also <= VM)
Was verstehst du unter Webhosting?
Statische Websiten, dann ist das natürlich Overkill
Du willst im Backend einige/viele Daten verarbeiten, dann bist du damit gut bedient.

Webentwicklung mit Python ist halt viel jünger als z.B. mit PHP und konzentriert sich auch eigentlich fast ausschließlich aufs Backend, die Frontend Möglichkeiten sind nette Schmakeln kann man aber eigentlich vergessen
 
Webhosting = Anbieter (Strato, Hosteurope, usw) hosten auf einem Server für mehrere Dutzend/Hundert/Tausend Kunden Websites, die nicht auf separaten VMs und auf einer IP laufen.
Jeder Kunde hat da seinen Ordner auf dem Server und kann da seinen Kram (also seine Website) hochladen.
In LAMP-Logik hat jeder Kunde technisch gesehen sein Verzeichnis auf dem Webserver, einen vhost im Apache und einen ftp-User, die auf das Verzeichnis verweisen, dazu ne Datenbank und meinetwegen Mailpostfächer.
PHP wird als CGI-Modul geladen und mit den User-Rechten des Kunden-Users gestartet.

Wenn ich von mehreren Kunden rede, dann meint das mehrere Websites, die die Kunden da hochladen und hosten.
Wenn ich von Clients rede, dann sind das die, die die Website aufrufen.
Dass ein Frontend mehrere Clients kann erwarte ich jetzt, aber die Funktionsweise von Flask scheint mir auf den ersten Blick nicht dafür ausgelegt, dass da verschiedene Websites drauf laufen da der Server ja Teil vom python Code selber ist.
 
Blutschlumpf schrieb:
hosten auf einem Server für mehrere Dutzend/Hundert/Tausend Kunden Websites, die nicht auf separaten VMs und auf einer IP laufen.
Ja, aber dass ist doch Sache des Anbieters, der konfiguiert dir dass doch alles, da hat man ja selbst keinerlei/minimalst Einfluss drauf...

Blutschlumpf schrieb:
Jeder Kunde hat da seinen Ordner auf dem Server und kann da seinen Kram (also seine Website) hochladen.
Ja, dass geht mit Python, oder auch JavaScript natürlich nicht, die brauchen natürlich die jeweilige Engine dahinter, da gibts dann entweder Managed Server, was dem hier nahe kommt, wo vieles vorkonfiguriert ist oder unmanged server, wo man alles selber aufsetzten muss.

Blutschlumpf schrieb:
Flask scheint mir auf den ersten Blick nicht dafür ausgelegt, dass da verschiedene Websites drauf
Du willst also eine Website bauen, wo man mehrere Websites mit verwalten kann, also sowas wie Plesk?
Flask ist dann in der Tat dafür nicht ausgelegt, aber dafür würde ich dann aber auch Plesk oder äquivalentes benutzen, die haben das ja schon fertig.
 
Also bei Strato etc sind die Server virtualisiert (KVM i.d.R.), sozusagen virtuelle Maschinen, in jeder läuft dann ein eigener Webserver und man kann ganz normal virtuelle Hosts anlegen (so heißt es bei Apache) und die über WSGI mit Django verbinden.

Und das geht von der Performance her, auch wenn sich mehrere Kunden eine Hardware teilen und jeder mehrere Anwendungen drauf laufen lässt. Wie genau das Threading Model von Apache / nginx und Python aussieht kann ich dir nicht sagen. Einer meiner Studenten hat es aber neulich mal geschafft, mit seinem Python Code dann den kompletten Server lahm zu legen - ich weiß bis heute nicht wie er das geschafft hat. Normalerweise sind die Prozesse schon stark von einander getrennt.

Und nein, der OP will keine Website wie Plesk bauen. Er wundert sich nur über die Performance.

Ich habe jetzt mal wieder just for fun bei meinem Webhosting Paket geschaut - da ist angeblich alles dabei, Ruby, NodeJS, PHP natürlich und Python aber wenn ich mich per SSH einlogge kann ich kein Python ausführen und natürlich nichts installieren. Das geht alles erst ab vServer denke ich. Mit einem günstigen Webhosting kommt man nicht weit. Ich verstehe ja bis heute nicht, wieso die Anbieter dann damit werden.

edit: Hab eine Anleitung gefunden wie man ggf. Flask und Django zum laufen bekommen. Komfortabel ist das aber nicht: https://forum.netcup.de/anwendung/w...on-mit-phusion-passenger-auf-webhosting-8000/
 
Zuletzt bearbeitet:
xxhagixx schrieb:
Ja, aber dass ist doch Sache des Anbieters, der konfiguiert dir dass doch alles, da hat man ja selbst keinerlei/minimalst Einfluss drauf...
Und ich möchte einfach nur wissen wie es gemacht wird, mehr nicht. ;)
Ich habe meinen physikalischen Server incl. vms drauf, sprich es stellt auch keine reale Limitierung dar, die es zu umgehen gäbe.

xxhagixx schrieb:
Du willst also eine Website bauen, wo man mehrere Websites mit verwalten kann, also sowas wie Plesk?
Flask ist dann in der Tat dafür nicht ausgelegt, aber dafür würde ich dann aber auch Plesk oder äquivalentes benutzen, die haben das ja schon fertig.
Ich möchte gar nichts konkret machen, ich suche schlichtweg nach Erleuchtung weil ich mich in den letzten 10 Jahren da wenig bis gar nicht mit beschäftigt habe ;)
Blutschlumpf schrieb:
ich habe keinen konkreten Anwendungsfall, den es zu lösen gilt

@Falc410
Jedem pauschal ne vm zu verpassen ist sicherlich auch ne Option, ressourcenseitig ist das aber natürlich noch ne Ecke ineffizienter.
 
Blutschlumpf schrieb:
Und ich möchte einfach nur wissen wie es gemacht wird, mehr nicht. ;)
Ich habe meinen physikalischen Server incl. vms drauf, sprich es stellt auch keine reale Limitierung dar, die es zu umgehen gäbe.
https://docs.python-guide.org/scenarios/web/
Mein Tipp:
- Pyramid
- Masonite

Disclaimer - ich habe in etwa den selben Weg wie Du hinter mir, aber mehr Perl/Apache-bezogen. Meine ersten Versuche mit Web/Python führten mich zu obigen Tipps. Ich habe es inzwischen gelassen, weil viel zu kompliziert für kleine Anwendungen. Selbst unter Windows 10 einen Webserver mit/für Apache2/mod_perl2/HTML::Mason ist (für mich zumindest) viel einfacher.
 
Blutschlumpf schrieb:
Aber ich entnehme daraus, dass Python bei normalem Webhosting (also <= VM) schlichtweg überhaupt kein Thema ist (oder hier niemand verstanden hat was ich wissen wollte).
Angeboten wirds ja offenbar, steht natürlich bei ner Strato oder co nicht dabei wie genau die das machen.

Soll keine Werbung sein aber Uberspace bietet in ihrer Anleitung, wenigstens ein Überblick https://manual.uberspace.de/lang-python/ (auch den Lab Link, ganz am Ende, beachten dort gibt es Guides zu Flask und anderen Dingen)

Diese Anleitung, soll aber nur Abdecken was nötig ist, um dies auf dem Uberspace Webspace, zum Laufen zu bringen. Die Kenntnisse zu der Technologie dahinter, musst du leider trotzdem selbst mitbringen.

Zum Abarbeiten mehrere Requests gibt es verschiedene Ansätze. Einer seits könntest du für jede Verbindung einen neuen Prozess spawnen. Aber das ist unglaublich viel Overhead und so wird oft nur mit select() viele Anfragen in einem Prozess verarbeitet. Das wird manchmal auch, Green Threads genannt. Bei Python dann, Twisted Python

nginx kann hier auch Arbeit abnehmen im Verbindungs Management und Caching sowie im Ausliefern, von statischen Inhalten, für die es nicht erst durch Python gehen braucht
 
  • Gefällt mir
Reaktionen: madmax2010
Falc410 schrieb:
Also bei Strato etc sind die Server virtualisiert (KVM i.d.R.), sozusagen virtuelle Maschinen,
Hat sich da was geändert? Vor ein paar Jahren war das noch Virturozzo und wir waren nicht wirklich glücklich damit... Kommt aber auch immer stark drauf an, mit wem man sich einen Host teilt.

Django wäre auch meine Empfehlung, außen wenn man das Backend nur für Datenbankenoperationen braucht. Dann würde ich zu fastAPI und sqlAlchemy tendieren.

Wurde ja auch schon erwähnt: wenn die Performance nicht reicht -> Caching von nginx nutzen. Wenn man etwas Ram antreten kann, würde ich dafür auch eine Ramdisk anlegen und den Cache dort rein verfrachten. Dann ist man nicht ganz so abhängen von den VM Nachbarn.
 
Abgesehen davon war PHP/MySQL nie der "fancy shit".
In Entwicklerkreisen gibts ja immer eine Fraktion, die von den anderen etwas belächelt wird. In den 80er Jahren war das halt die Leute die BASIC machen, in den 90er Jahren die VBA-Klicker. Dann halt die PHP-Frickler und jetzt zu letzt die Javascript/node.js Leute. :-)
 
andy_m4 schrieb:
In Entwicklerkreisen gibts ja immer eine Fraktion, die von den anderen etwas belächelt wird.
programming_languages.jpg

:)
 
  • Gefällt mir
Reaktionen: Falc410 und andy_m4
Zurück
Oben