Seite 26 von 30

Re: Bottle: Micro Web Framework

Verfasst: Mittwoch 8. September 2010, 09:34
von jbs
Ich präzisiere: Wie viel Speicherplatz verbrauchen die Dateien des Apache Webservers und welche Ressourcen beansprucht dieser?

Re: Bottle: Micro Web Framework

Verfasst: Mittwoch 8. September 2010, 09:47
von Dauerbaustelle
Also ich hab so im Kopf ~80 Megabytes Memory wenn er nur rumidled, ohne irgendwelches Tuning und so Kram.

Re: Bottle: Micro Web Framework

Verfasst: Mittwoch 8. September 2010, 11:35
von noisefloor
Hallo,

> Wie groß issen der Apache eigentlich?
Meinst du installiert oder was den Speicherverbrauch angeht?

Auf meinem virtuellen Server mit _wenig_ Traffic belegt der Apache bzw. dessen Kinderprozesse ca. 20-25% RAM (von 512 MB).

Gruß, noisefloor

Re: Bottle: Micro Web Framework

Verfasst: Mittwoch 8. September 2010, 17:01
von Leonidas
Ansonsten gibt es auch andere Server wie nginx oder Cherokee, aber ich muss sagen dass es, zumindest für mich nicht lohnt sich mit deren Setup zu beschäftigen. Das ist mir inzwischen zu nervig geworden, aber wenn man das mal ausprobieren will...

Re: Bottle: Micro Web Framework

Verfasst: Mittwoch 8. September 2010, 19:47
von MrNiceTry
Hallo.

Hab mich jetzt entschlossen mir lighttpd mal näher anzusehen.
Hab's installiert und probiere rum.

Kann mir jemand einen Tip geben, wie ich Bottle, bzw. die Anwendung einbinde ???


Danke

Re: Bottle: Micro Web Framework

Verfasst: Mittwoch 8. September 2010, 20:08
von Leonidas
Du solltest dir FastCGI ansehen, das unterstützt Lighttpd direkt.

Re: Bottle: Micro Web Framework

Verfasst: Donnerstag 9. September 2010, 09:01
von MrNiceTry
Ich hab jetzt die halbe Nacht mit lighttpd und fastcgi beschäftigt, aber nicht rausgefunden wie man bottle da anbindet.

Aber Bottle läuft doch bei mir an Port 80.
Und ohne Rootrechte geht Port 80 eben nicht.
Und der Port für Webserver ist eben Port 80.

Am Port 80 kommen Anfragen an und die werden vom Programm bearbeitet.

Was kann da schon schlimmes passieren ???

Re: Bottle: Micro Web Framework

Verfasst: Donnerstag 9. September 2010, 10:00
von BlackJack
@MrNiceTry: An Port 80 kann man sich ohne root-Rechte nicht binden, aber *danach* geben Webserver die root-Rechte ab und laufen als eigener Benutzer mit weniger Rechten.

Es kann potentiell *alles* passieren. Wenn es eine Sicherheitslücke gibt, kann jemand von aussen Code mit root-Rechten ausführen. Das will man nicht.

Re: Bottle: Micro Web Framework

Verfasst: Donnerstag 9. September 2010, 10:33
von MrNiceTry
Kann Bottle seine Rechte abgeben?
Oder kann man das mit Bottle machen?

Irgend etwas muß es doch geben Bottle zu benutzen, oder ?

Re: Bottle: Micro Web Framework

Verfasst: Donnerstag 9. September 2010, 13:16
von Dauerbaustelle
Lass Bottle als FastCGI-Server auf irgend nem Port laufen und verwende z.B. nginx als Proxy.

Re: Bottle: Micro Web Framework

Verfasst: Donnerstag 9. September 2010, 13:25
von noisefloor
Hallo,

@MrNiceTry: Beschäftige dich mal mit dem Grundprinzip von CGI. :-) Das heißt vereinfacht gesagt nichts anderes als das der Webserver ein Skript ausführt. Mit den Rechten des Webservers. Und auf der IP und dem Port, auf dem der Webserver läuft. Den in Bottle integrierten Server brauchst du gar nicht.

Wenn da mit FastCGI zu schwierig ist, kannst du auch erstmal "normales" CGI nehmen. Dann brauchst du in lighttpd nur .py Dateien registrieren (ist in der Doku von lighthttpd erklärt) und den Bottle-Skript an CGI binden (ist in der Bottle Dokue erklärt).

Gruß, noisefloor

Re: Bottle: Micro Web Framework

Verfasst: Samstag 11. September 2010, 13:29
von uKev
MrNiceTry hat geschrieben:Kann Bottle seine Rechte abgeben?
Oder kann man das mit Bottle machen?

Irgend etwas muß es doch geben Bottle zu benutzen, oder ?
Nein, das kann Bottle in der "offiziellen" Version nicht. Ich habe einen Patch dazu geschrieben, der genau das ermöglicht [1], weil ich die selben Anforderungen hatte. (Möglichst leicht, nicht besonders performant auf Port 80 laufend). Der Patch wurde nicht übernommen und mein Repository ist nicht gepflegt. Ich würde dir davon abraten einfach die dortige Bottle Version zu übernehmen. Du könntest aber den Patch auf die aktuelle Bottle Version portieren. Für mehr Infos gibt es einen Thread [2] dazu.

Wenn man möglichst leichtgewichtig und performant sein will, kann man statt dem WSGIRefServer den Tornado Adapter benutzen, dann ist die ganze Geschichte auch multithreaded. Damit funktioniert mein Patch aber (noch) nicht.

Alternativ kann ich dir cherokee empfehlen, den kann man ohne Einarbeitungszeit innerhalb weniger Minuten über ein Webfrontend konfigurieren und ist sehr leichtgewichtig, aber trotzdem vielseitig (uwsgi und fastCGI fähig). Das Webfrontend startet man nur zum Zweck der Konfiguration und wird anschließend beendet. Es gibt dort Assistenten für die gängigsten Aufgaben. Alles ziemlich selbsterklärend, aber halt doch wieder ein eigener Server vor dem Python-Prozess, wie bei nginx, Apache, lighttpd.

Ansonsten, wenn es ohne den Patch auskommen soll und ohne vorgeschalteten "ausgewachsenen" Webserver, habe ich sehr gute Erfahrungen mit Pound gemacht. Der macht nichts anderes als auf Port 80 zu laufen, die Anfragen entgegenzunehmen und lokal an Port 8080 (oder einen beliebigen anderen unpriviligierten Port) weiter zu reichen. Nennt sich dann http-proxy / load balancer. Da hast du dann zusätzlich zum Bottle Python Prozess noch <1 MiB im Speicher. Wenn du dann noch Bottle mit Tornado nutzt, hast du eine superschnelle und leichtgewichtige Kombi. Pound gibts im Ubuntu Repo und Tornado sind nur ein paar .py Dateien, die du in das Verzeichnis mit der bottly.py wirfst.



[1] http://github.com/uKev/bottle/commit/5c ... b3156db759
[2] http://www.python-forum.de/viewtopic.php?t=21221

Re: Bottle: Micro Web Framework

Verfasst: Sonntag 12. September 2010, 07:17
von Leonidas
uKev hat geschrieben:Alternativ kann ich dir cherokee empfehlen, den kann man ohne Einarbeitungszeit innerhalb weniger Minuten über ein Webfrontend konfigurieren und ist sehr leichtgewichtig, aber trotzdem vielseitig (uwsgi und fastCGI fähig). Das Webfrontend startet man nur zum Zweck der Konfiguration und wird anschließend beendet. Es gibt dort Assistenten für die gängigsten Aufgaben. Alles ziemlich selbsterklärend, aber halt doch wieder ein eigener Server vor dem Python-Prozess, wie bei nginx, Apache, lighttpd.
Das Problem ist, dass im Gegensatz zu Apaches mod_fastcgi/mod_fcgid sich Cherokee nicht um die FastCGI-Prozessverwaltung kümmert. Somit muss man immer selbst drauf achten dass der Prozess immer läuft. Bei Apache wird der FastCGI-Prozess mitverwaltet, so dass man dieses Problem nicht hat und Apache sich darum kümmert ihn zu starten bevor ein Request fehlschlägt.

Re: Bottle: Micro Web Framework

Verfasst: Sonntag 12. September 2010, 10:48
von uKev
Leonidas hat geschrieben: Das Problem ist, dass [...] sich Cherokee nicht um die FastCGI-Prozessverwaltung kümmert. Somit muss man immer selbst drauf achten dass der Prozess immer läuft. [...]
Äh, nicht ganz, das ist nur die halbe Wahrheit. Cherokee kennt zwei Modi: Entfernter Host und lokaler Interpreter. Der erste Modi entspricht deiner Beschreibung, ist aber eigentlich für entfernte Server gedacht. Wenn man lokaler Interpreter auswählt, gibt man den Befehl an, der ausgeführt werden soll, wenn der Prozess nicht läuft. Cherokee kümmert sich also um alles selbstständig. Läuft bei mir schon ne ganze weile sehr zuverlässig mit FastCGI.

Ich zitiere mal aus der Doku[1]:
Interpreter: command to spawn a new source in case it were not accessible[...]
Note that you will have to manually launch the spawner if you use a Remote host as Information source instead of a Local interpreter.
Das gilt so ziemlich für alle Arten von Interpreter Anbindung, egal ob fastCGI, uwsgi, scgi... in der Doku[1] findest du sogar Screenshots, die die Konfiguration am Beispiel von scgi und Django zeigen.

[1] http://www.cherokee-project.com/doc/coo ... jango.html

Apache - WSGI - adapter.wsgi findet bottle.py nicht

Verfasst: Freitag 8. Oktober 2010, 21:21
von MrNiceTry
Hallo,

nach einigen Überlegungen bezüglich der Ansteuerung von Bottle (auch hier im Forum - Danke) habe ich mich jetzt für die klassische Variante mit Apache und WSGI entschieden.

Aber auch das bringt mir im Moment Probleme.

Ubuntu 10.4 Server
Apache
mod-wsgi

In: /var/www/todo
todo.py
bottle.py
adapter.wsgi - alles nach Bottle-Anleitung. (so glaube ich)

Folgender Fehler:

Code: Alles auswählen

[Fri Oct 08 21:32:32 2010] [notice] Apache/2.2.14 (Ubuntu) mod_wsgi/2.8 Python/2.6.5 configured -- resuming normal operations
[Fri Oct 08 21:32:47 2010] [error] [client xx.xxx.116.91] mod_wsgi (pid=12237): Target WSGI script '/var/www/todo/adapter.wsgi' cannot be loaded as Python module.
[Fri Oct 08 21:32:47 2010] [error] [client xxx.xxx.116.91] mod_wsgi (pid=12237): Exception occurred processing WSGI script '/var/www/todo/adapter.wsgi'.
[Fri Oct 08 21:32:47 2010] [error] [client xxx.xxx.116.91] Traceback (most recent call last):
[Fri Oct 08 21:32:47 2010] [error] [client xxx.xxx.116.91]   File "/var/www/todo/adapter.wsgi", line 1, in <module>
[Fri Oct 08 21:32:47 2010] [error] [client xxx.xxx.116.91]     import sys, os, bottle
[Fri Oct 08 21:32:47 2010] [error] [client xxx.xxx.116.91] ImportError: No module named bottle
adapter.wsgi (nach Anleitung)

Code: Alles auswählen

import sys, os, bottle

sys.path = ['/var/www/todo/'] + sys.path
os.chdir(os.path.dirname(__file__))

import todo # This loads your application

application = bottle.default_app()


bottle.py ist im gleichen Verzeichnis: /var/www/todo/bottle.py


Danke für jede Unterstützung.

MrNiceTry

Re: Bottle: Micro Web Framework

Verfasst: Freitag 8. Oktober 2010, 22:46
von jbs
Du solltest natürlich erst in das richtige Verzeichnis wechseln und dann importieren.

Re: Bottle: Micro Web Framework

Verfasst: Freitag 8. Oktober 2010, 22:56
von MrNiceTry
Was meinst Du mit "Du solltest natürlich erst in das richtige Verzeichnis wechseln".

Es ist alles im gleichen Verzeichnis: /var/www/todo

Re: Bottle: Micro Web Framework

Verfasst: Freitag 8. Oktober 2010, 23:21
von jbs
Na schau dir mal deinen Code an. Du wechselt ja mit os.chdir in dein Verzeichnis. Nur vorher versuchst du bottle zu importieren - und das kann er einfach nicht finden. Importierst du bottle nach dem os.chdir, sollte es eigentlich klappen.

Re: Bottle: Micro Web Framework

Verfasst: Freitag 8. Oktober 2010, 23:29
von MrNiceTry
Danke.

Habe wie folgt geändert:

Code: Alles auswählen

import sys, os

sys.path = ['/var/www/todo/'] + sys.path
os.chdir(os.path.dirname(__file__))

import bottle

import todo # This loads your application

application = bottle.default_app()

Funktioniert.
Sieht zumindest so aus. Bin morgen sicher.


Danke nochmal und gute Nacht.


MrNiceTry

Re: Bottle: Micro Web Framework

Verfasst: Montag 11. Oktober 2010, 18:47
von MrNiceTry
Wie muß ein Decorator aussehen, der mir ALLE Unterverzeichnisse durchreicht.
Also in jeder Tiefe.

Danke

MrNiceTry