kivitendo/doc/INSTALL.fcgi @ 5cc5f954
5585180a | Sven Schöling | |||
a07567c2 | Sven Schöling | Diese Datei ist in Plain Old Documentation geschrieben. Mit
|
||
5585180a | Sven Schöling | |||
a07567c2 | Sven Schöling | > perldoc INSTALL.fcgi
|
||
5585180a | Sven Schöling | |||
a07567c2 | Sven Schöling | ist sie deutlich leichter zu lesen.
|
||
5585180a | Sven Schöling | |||
a07567c2 | Sven Schöling | =head1 FastCGI f?r Lx-Office
|
||
=head2 Was ist FastCGI?
|
||||
Direkt aus L<http://de.wikipedia.org/wiki/FastCGI> kopiert:
|
||||
FastCGI ist ein Standard f?r die Einbindung externer Software zur Generierung
|
||||
dynamischer Webseiten in einem Webserver. FastCGI ist vergleichbar zum Common
|
||||
Gateway Interface (CGI), wurde jedoch entwickelt, um dessen
|
||||
Performance-Probleme zu umgehen.
|
||||
=head2 Warum FastCGI?
|
||||
Perl Programme (wie Lx-Office eines ist) werden nicht statisch kompiliert.
|
||||
Stattdessen werden die Quelldateien bei jedem Start ?bersetzt, was bei kurzen
|
||||
Laufzeiten einen Gro?teil der Laufzeit ausmacht. W?hrend SQL Ledger einen
|
||||
Gro?teil der Funktionalit?t in einzelne Module kapselt, um immer nur einen
|
||||
kleinen Teil laden zu m?ssen, ist die Funktionalit?t von Lx-Office soweit
|
||||
gewachsen, dass immer mehr Module auf den Rest des Programms zugreifen.
|
||||
Zus?tzlich benutzen wir umfangreiche Bibliotheken um Funktionalt?t nicht selber
|
||||
entwickeln zu m?ssen, die zus?tzliche Ladezeit kosten. All dies f?hrt dazu dass
|
||||
ein Lx-Office Aufruf der Kernmasken mittlerweile deutlich l?nger dauert als
|
||||
fr?her, und dass davon 90% f?r das Laden der Module verwendet wird.
|
||||
Mit FastCGI werden nun die Module einmal geladen, und danach wird nur die
|
||||
eigentliche Programmlogik ausgef?hrt.
|
||||
=head2 Kombinationen aus Webservern und Plugin.
|
||||
5585180a | Sven Schöling | |||
Folgende Kombinationen sind getestet:
|
||||
a07567c2 | Sven Schöling | * Apache 2.2.11 (Ubuntu) und mod_fastcgi.
|
||
5585180a | Sven Schöling | |||
Folgende Kombinationen funktionieren nicht:
|
||||
a07567c2 | Sven Schöling | * Apache 2.2.11 (Ubuntu) + mod_fcgid:
|
||
5585180a | Sven Schöling | |||
a07567c2 | Sven Schöling | =head2 Konfiguration des Webservers.
|
||
5585180a | Sven Schöling | |||
Variante 1:
|
||||
AddHandler fastcgi-script .pl
|
||||
Variante 2:
|
||||
a07567c2 | Sven Schöling | AliasMatch ^/web/path/to/lx-office-erp/[^/]+\.pl /path/to/lx-office-erp/dispatcher.fpl
|
||
<Directory /path/to/lx-office-erp>
|
||||
AllowOverride All
|
||||
AddHandler fastcgi-script .fpl
|
||||
Options ExecCGI Includes FollowSymlinks
|
||||
Order Allow,Deny
|
||||
Allow from All
|
||||
</Directory>
|
||||
2e9d34aa | Moritz Bunkus | <DirectoryMatch /path/to/lx-office-erp/users>
|
||
a07567c2 | Sven Schöling | Order Deny,Allow
|
||
Deny from All
|
||||
</DirectoryMatch>
|
||||
2e9d34aa | Moritz Bunkus | Variante 1 startet einfach jeden Lx-Office Request als fcgi
|
||
Prozess. F?r sehr gro?e Installationen ist das die schnellste Version,
|
||||
ben?tigt aber sehr viel Arbeitspseicher: wurden alle Module mindestens
|
||||
einmal aufgerufen, so werden dauerhaft ca. 2GB pro Installation
|
||||
belegt.
|
||||
a07567c2 | Sven Schöling | |||
Variante 2 startet nur einen zentralen Dispatcher und lenkt alle Scripte auf
|
||||
diesen. Dadurch dass zur Laufzeit ?fter mal Scripte neu geladen werden gibt es
|
||||
2e9d34aa | Moritz Bunkus | hier kleine Performance Einbu?en. Trotzdem ist diese Variante vorzuziehen.
|
||
a07567c2 | Sven Schöling | |||
5585180a | Sven Schöling | |||
63a90446 | Sven Schöling | =head2 Entwicklungsaspekte
|
||
5585180a | Sven Schöling | |||
a07567c2 | Sven Schöling | Die AddHandler Direktive vom Apache ist entgegen der Dokumentation
|
||
anscheinend nicht lokal auf das Verzeichnis beschr?nkt sondern global im
|
||||
vhost.
|
||||
5585180a | Sven Schöling | |||
a07567c2 | Sven Schöling | Wenn ?nderungen in der Konfiguration von Lx-Office gemacht werden, oder wenn
|
||
Templates editiert werden muss der Server neu gestartet werden.
|
||||
5585180a | Sven Schöling | |||
63a90446 | Sven Schöling | Es ist m?glich die gleiche Lx-Office Version parallel unter cgi und fastcgi zu
|
||
betreiben. Da nimmt man Variante 2 wie oben beschrieben, und ?ndert die
|
||||
2e9d34aa | Moritz Bunkus | AliasMatch Zeile auf eine andere URL, und l?sst alle anderen URLs auch
|
||
63a90446 | Sven Schöling | weiterleiten:
|
||
5585180a | Sven Schöling | |||
2e9d34aa | Moritz Bunkus | # Zugriff ohne FastCGI
|
||
Alias /web/path/to/lx-office-erp /path/to/lx-office-erp
|
||||
5585180a | Sven Schöling | |||
2e9d34aa | Moritz Bunkus | # Zugriff mit FastCGI:
|
||
63a90446 | Sven Schöling | AliasMatch ^/web/path/to/lx-office-erp-fcgi/[^/]+\.pl /path/to/lx-office-erp/dispatcher.fpl
|
||
2e9d34aa | Moritz Bunkus | Alias /web/path/to/lx-office-erp-fcgi/ /path/to/lx-office-erp/
|
||
63a90446 | Sven Schöling | |||
Dann ist unter C</web/path/to/lx-office-erp/> die normale Version erreichbar,
|
||||
und unter C</web/opath/to/lx-office-erp-fcgi/> die FastCGI Version.
|
||||
Bei der Entwicklung f?r FastCGI ist auf ein paar Fallstricke zu achten. Dadurch
|
||||
dass das Programm in einer Endlosschleife l?uft, m?ssen folgende Aspekte
|
||||
geachtet werden:
|
||||
2e9d34aa | Moritz Bunkus | =head3 Programmende und Ausnahmen: C<warn>, C<die>, C<exit>, C<carp>, C<confess>
|
||
63a90446 | Sven Schöling | |||
2e9d34aa | Moritz Bunkus | Fehler, die dass Programm normalerweise sofort beenden (fatale Fehler), werden
|
||
mit dem FastCGI Dispatcher abgefangen, um das Programm am Laufen zu halten. Man
|
||||
63a90446 | Sven Schöling | kann mit C<die>, C<confess> oder C<carp> Fehler ausgeben, die dann vom Dispatcher
|
||
angezeigt werden. Die Lx-Office eigene C<$::form->error()> tut im Prinzip das
|
||||
Gleiche, mit ein paar Extraoptionen. C<warn> und C<exit> hingegen werden nicht
|
||||
abgefangen. C<warn> wird direkt nach STDERR, also in Server Log eine Nachricht
|
||||
schreiben, und C<exit> wird die Ausf?hrung beenden.
|
||||
2e9d34aa | Moritz Bunkus | Prinzipiell ist es kein Beinbruch, wenn sich der Prozess beendet, fcgi wird ihn
|
||
sofort neu starten. Allerdings sollte das die Ausnahme sein. Quintessenz: Bitte
|
||||
kein C<warn> oder C<exit> benutzen, alle anderen Exceptionmechanismen sind ok.
|
||||
63a90446 | Sven Schöling | |||
=head3 Globale Variablen
|
||||
2e9d34aa | Moritz Bunkus | Um zu vermeiden, dass Informationen von einem Request in einen anderen gelangen,
|
||
63a90446 | Sven Schöling | m?ssen alle globalen Variablen vor einem Request sauber initialisiert werden.
|
||
Das ist besonders wichtig im C<$::cgi> und C<$::auth> Objekt, weil diese nicht
|
||||
gel?scht werden pro Instanz, sondern persistent gehalten werden.
|
||||
Datenbankverbindungen wird noch ein Guide verfasst werden, wie man sichergeht,
|
||||
dass man die richtige erwischt.
|
||||
a07567c2 | Sven Schöling | =head2 Performance und Statistiken
|
||
5585180a | Sven Schöling | |||
a07567c2 | Sven Schöling | Die kritischen Pfade des Programms sind die Belegmasken, und unter diesen ganz
|
||
besonders die Verkaufsrechnungsmaske. Ein Aufruf der Rechnungsmaske in
|
||||
Lx-Office 2.4.3 stable dauert auf einem Core2duo mit 2GB Arbeitsspeicher und
|
||||
Ubuntu 9.10 eine halbe Sekunde. In der 2.6.0 sind es je nach Menge der
|
||||
definierten Variablen 1-2s. Ab der Moose/Rose::DB Version sind es 5-6s.
|
||||
f805c9a2 | Moritz Bunkus | |||
a07567c2 | Sven Schöling | Mit FastCGI ist die neuste Version auf 0,4 Sekunden selbst in den kritischen
|
||
Pfaden, unter 0,15 sonst.
|
||||
f805c9a2 | Moritz Bunkus | |||
a07567c2 | Sven Schöling | =head2 Bekannte Probleme
|
||
f805c9a2 | Moritz Bunkus | |||
a07567c2 | Sven Schöling | Bei mehreren Benutzern scheint ab und zu eine Datenbankverbidung von Rose::DB
|
||
in den falschen Benutzer zu geraten. Das ist ein kritischer Bug und muss gefixt
|
||||
werden.
|
||||
f805c9a2 | Moritz Bunkus | |||
a07567c2 | Sven Schöling | Bei Administrativen T?tigkeiten werden in seltenen F?llen die Locales nicht
|
||
richtig geladen und die Maske erscheint in Englisch.
|