Revision cddb2fd7
Von Enrique Morales vor fast 2 Jahren hinzugefügt
doc/html/ch02s07.html | ||
---|---|---|
<html><head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
<title>2.7. Der Task-Server</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.8.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s06.html" title="2.6. Webserver-Konfiguration"><link rel="next" href="ch02s08.html" title="2.8. Benutzerauthentifizierung und Administratorpasswort"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.7. Der Task-Server</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s06.html">Zurück</a> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <a accesskey="n" href="ch02s08.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.7. Der Task-Server"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="config.task-server"></a>2.7. Der Task-Server</h2></div></div></div><p>Der Task-Server ist ein Prozess, der im Hintergrund läuft, in
|
||
regelmäßigen Abständen nach abzuarbeitenden Aufgaben sucht und diese zu
|
||
festgelegten Zeitpunkten abarbeitet (ähnlich wie Cron). Dieser Prozess
|
||
wird u.a. für die Erzeugung der wiederkehrenden Rechnungen und weitere
|
||
essenzielle Aufgaben benutzt.</p><p>Der Task-Server muss einmalig global in der Konfigurationsdatei
|
||
konfiguriert werden. Danach wird er für jeden Mandanten, für den er
|
||
laufen soll, in der Adminsitrationsmaske eingeschaltet.</p><p>Beachten Sie, dass der Task-Server in den Boot-Vorgang Ihres
|
||
Servers integriert werden muss, damit er automatisch gestartet wird.
|
||
Dies kann kivitendo nicht für Sie erledigen.</p><p>Da der Task-Server als Perlscript läuft, wird Arbeitsspeicher, der
|
||
einmal benötigt wurde, nicht mehr an das Betriebssystem zurückgegeben,
|
||
solange der Task-Server läuft. Dies kann dazu führen, dass ein länger
|
||
laufender Task-Server mit der Zeit immer mehr Arbeitsspeicher für sich
|
||
beansprucht. Es ist deshalb sinnvoll, dass der Task-Server in
|
||
regelmässigen Abständen neu gestartet wird. Allerdings berücksichtigt der
|
||
Task-Server ein Memory-Limit, wenn dieses in der Konfigurationsdatei
|
||
angegeben ist. Bei Überschreiten dieses Limits beendet sich der
|
||
Task-Server. Sofern der Task-Server als systemd-Service mit dem
|
||
mitgelieferten Skript eingerichtet wurde, startet dieser danach
|
||
automatisch erneut.</p><div class="sect2" title="2.7.1. Verfügbare und notwendige Konfigurationsoptionen"><div class="titlepage"><div><div><h3 class="title"><a name="Konfiguration-des-Task-Servers"></a>2.7.1. Verfügbare und notwendige Konfigurationsoptionen</h3></div></div></div><p>Die Konfiguration erfolgt über den Abschnitt
|
||
<code class="literal">[task_server]</code> in der Datei
|
||
<code class="filename">config/kivitendo.conf</code>. Die dort verfügbaren
|
||
Optionen sind:</p><div class="variablelist"><dl><dt><span class="term">
|
||
<code class="varname">run_as</code>
|
||
</span></dt><dd><p>Wird der Server vom Systembenutzer <code class="literal">root</code>
|
||
gestartet, so wechselt er auf den mit <code class="literal">run_as</code>
|
||
angegebenen Systembenutzer. Der Systembenutzer muss dieselben
|
||
Lese- und Schreibrechte haben, wie auch der Webserverbenutzer
|
||
(siehe see <a class="xref" href="ch02s03.html" title="2.3. Manuelle Installation des Programmpaketes">Manuelle Installation des Programmpaketes</a>). Daher
|
||
ist es erforderlich, hier denselben Systembenutzer einzutragen,
|
||
unter dem auch der Webserver läuft.</p></dd><dt><span class="term">
|
||
<code class="varname">debug</code>
|
||
</span></dt><dd><p>Schaltet Debug-Informationen an und aus.</p></dd></dl></div></div><div class="sect2" title="2.7.2. Konfiguration der Mandanten für den Task-Server"><div class="titlepage"><div><div><h3 class="title"><a name="Konfiguration-der-Mandanten-fuer-den-Task-Servers"></a>2.7.2. Konfiguration der Mandanten für den Task-Server</h3></div></div></div><p>Ist der Task-Server grundlegend konfiguriert, so muss
|
||
anschließend jeder Mandant, für den der Task-Server laufen soll,
|
||
einmalig konfiguriert werden. Dazu kann in der Maske zum Bearbeiten
|
||
von Mandanten im Administrationsbereich eine kivitendo-Benutzerkennung
|
||
ausgewählt werden, unter der der Task-Server seine Arbeit
|
||
verrichtet.</p><p>Ist in dieser Einstellung keine Benutzerkennung ausgewählt, so
|
||
wird der Task-Server für diesen Mandanten keine Aufgaben
|
||
ausführen.</p></div><div class="sect2" title="2.7.3. Automatisches Starten des Task-Servers beim Booten"><div class="titlepage"><div><div><h3 class="title"><a name="Einbinden-in-den-Boot-Prozess"></a>2.7.3. Automatisches Starten des Task-Servers beim Booten</h3></div></div></div><p>Der Task-Server verhält sich von seinen Optionen her wie ein
|
||
reguläres SystemV-kompatibles Boot-Script. Außerdem wechselt er beim
|
||
Starten automatisch in das kivitendo-Installationsverzeichnis.</p><p>Deshalb ist es möglich, ihn durch Setzen eines symbolischen
|
||
Links aus einem der Runlevel-Verzeichnisse heraus in den Boot-Prozess
|
||
einzubinden. Da das bei neueren Linux-Distributionen aber nicht
|
||
zwangsläufig funktioniert, werden auch Start-Scripte mitgeliefert, die
|
||
anstelle eines symbolischen Links verwendet werden können.</p><div class="sect3" title="2.7.3.1. SystemV-basierende Systeme (z.B. ältere Debian, ältere openSUSE, ältere Fedora)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1458"></a>2.7.3.1. SystemV-basierende Systeme (z.B. ältere Debian, ältere
|
||
openSUSE, ältere Fedora)</h4></div></div></div><p>Kopieren Sie die Datei
|
||
<code class="filename">scripts/boot/system-v/kivitendo-task-server</code>
|
||
nach <code class="filename">/etc/init.d/kivitendo-task-server</code>. Passen
|
||
Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
|
||
<code class="literal">DAEMON=....</code>). Binden Sie das Script in den
|
||
Boot-Prozess ein. Dies ist distributionsabhängig:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Debian-basierende Systeme:</p><pre class="programlisting">update-rc.d kivitendo-task-server defaults
|
||
insserv kivitendo-task-server</pre></li><li class="listitem"><p>Ältere openSUSE und ältere Fedora:</p><pre class="programlisting">chkconfig --add kivitendo-task-server</pre></li></ul></div><p>Danach kann der Task-Server mit dem folgenden Befehl gestartet
|
||
werden:</p><pre class="programlisting">/etc/init.d/kivitendo-task-server start</pre></div><div class="sect3" title="2.7.3.2. Upstart-basierende Systeme (z.B. Ubuntu bis 14.04)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1487"></a>2.7.3.2. Upstart-basierende Systeme (z.B. Ubuntu bis 14.04)</h4></div></div></div><p>Kopieren Sie die Datei
|
||
<code class="filename">scripts/boot/upstart/kivitendo-task-server.conf</code>
|
||
nach <code class="filename">/etc/init/kivitendo-task-server.conf</code>.
|
||
Passen Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
|
||
<code class="literal">exec ....</code>).</p><p>Danach kann der Task-Server mit dem folgenden Befehl gestartet
|
||
werden:</p><pre class="programlisting">service kivitendo-task-server start</pre></div><div class="sect3" title="2.7.3.3. systemd-basierende Systeme (z.B. neure openSUSE, neuere Fedora, neuere Ubuntu und neuere Debians)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1505"></a>2.7.3.3. systemd-basierende Systeme (z.B. neure openSUSE, neuere
|
||
Fedora, neuere Ubuntu und neuere Debians)</h4></div></div></div><p>Kopieren Sie die Datei
|
||
<code class="filename">scripts/boot/systemd/kivitendo-task-server.service</code>
|
||
nach <code class="filename">/etc/systemd/system/</code>. Passen Sie in der
|
||
kopierten Datei den Pfad zum Task-Server an (Zeilen
|
||
<code class="literal">ExecStart=....</code> und
|
||
<code class="literal">ExecStop=...</code>).</p><p>Machen Sie anschließend das Script systemd bekannt, und binden
|
||
Sie es in den Boot-Prozess ein. Dazu führen Sie die folgenden Befehl
|
||
aus:</p><pre class="programlisting">systemctl daemon-reload
|
||
systemctl enable kivitendo-task-server.service</pre><p>Wenn Sie den Task-Server jetzt sofort starten möchten, anstatt
|
||
den Server neu zu starten, so können Sie das mit dem folgenden
|
||
Befehl tun:</p><pre class="programlisting">systemctl start kivitendo-task-server.service</pre><p>Ein so eingerichteter Task-Server startet nach Beendigung
|
||
automatisch erneut. Das betrifft eine Beendigung über die Oberfläche,
|
||
eine Beendingung über die Prozesskontrolle und eine Beendigung bei
|
||
Überschreiten des Memory-Limits. Soll der Task-Server nicht erneut
|
||
starten, so können Sie ihn mit folgendem Befehl stoppen:</p><pre class="programlisting">systemctl stop kivitendo-task-server.service</pre></div></div><div class="sect2" title="2.7.4. Wie der Task-Server gestartet und beendet wird"><div class="titlepage"><div><div><h3 class="title"><a name="Prozesskontrolle"></a>2.7.4. Wie der Task-Server gestartet und beendet wird</h3></div></div></div><p>Der Task-Server wird wie folgt kontrolliert:</p><pre class="programlisting">./scripts/task_server.pl Befehl</pre><p>
|
||
<code class="literal">Befehl</code> ist dabei eine der folgenden
|
||
Optionen:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
||
<code class="literal">start</code> startet eine neue Instanz des
|
||
Task-Servers. Die Prozess-ID wird innerhalb des
|
||
<code class="filename">users</code>-Verzeichnisses abgelegt.</p></li><li class="listitem"><p>
|
||
<code class="literal">stop</code> beendet einen laufenden
|
||
Task-Server.</p></li><li class="listitem"><p>
|
||
<code class="literal">restart</code> beendet und startet ihn
|
||
neu.</p></li><li class="listitem"><p>
|
||
<code class="literal">status</code> berichtet, ob der Task-Server
|
||
läuft.</p></li></ul></div><p>Der Task-Server wechselt beim Starten automatisch in das
|
||
kivitendo-Installationsverzeichnis.</p><p>Dieselben Optionen können auch für die SystemV-basierenden
|
||
Runlevel-Scripte benutzt werden (siehe oben).</p><p>Wurde der Task-Server als systemd-Service eingerichtet (s.o.),
|
||
so startet dieser nach Beendigung automatisch erneut.</p></div><div class="sect2" title="2.7.5. Exemplarische Konfiguration eines Hintergrund-Jobs, der die Jahreszahl in allen Nummernkreisen zum Jahreswechsel erhöht"><div class="titlepage"><div><div><h3 class="title"><a name="Tasks-konfigurieren"></a>2.7.5. Exemplarische Konfiguration eines Hintergrund-Jobs, der die Jahreszahl in allen Nummernkreisen zum Jahreswechsel erhöht</h3></div></div></div><p>Hintergrund-Jobs werden über System -> Hintergrund-Jobs und Task-Server -> Aktuelle Hintergrund-Jobs anzeigen -> Aktions-Knopf 'erfassen' angelegt. </p><p>Nachdem wir über das Menü dort angelangt sind, legen wir unseren exemplarischen Hintergrund-Jobs "Erhöhung der Nummernkreise" mit folgenden Werten an:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
||
<code class="literal">Aktiv:</code> Hier ein 'Ja' auswählen</p></li><li class="listitem"><p>
|
||
<code class="literal">Ausführungsart:</code> 'wiederholte Ausführung' auswählen</p></li><li class="listitem"><p>
|
||
<code class="literal">Paketname:</code> 'SetNumberRange' auswählen</p></li><li class="listitem"><p>
|
||
<code class="literal">Ausführungszeitplan:</code> Hier entsprechend Werte wie in der crontab eingeben.</p><p>Syntax:</p><pre class="programlisting">* * * * *
|
||
┬ ┬ ┬ ┬ ┬
|
||
│ │ │ │ │
|
||
│ │ │ │ └──── Wochentag (0-7, Sonntag ist 0 oder 7)
|
||
│ │ │ └────── Monat (1-12)
|
||
│ │ └──────── Tag (1-31)
|
||
│ └────────── Stunde (0-23)
|
||
└──────────── Minute (0-59) </pre><p>Die Sterne können folgende Werte haben:</p><pre class="programlisting">
|
||
1 2 3 4 5
|
||
<title>2.7. Webserver-Konfiguration</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.8.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s06.html" title="2.6. Anpassung der PostgreSQL-Konfiguration"><link rel="next" href="ch02s08.html" title="2.8. Der Task-Server"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.7. Webserver-Konfiguration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s06.html">Zurück</a> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <a accesskey="n" href="ch02s08.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.7. Webserver-Konfiguration"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Apache-Konfiguration"></a>2.7. Webserver-Konfiguration</h2></div></div></div><div class="sect2" title="2.7.1. Grundkonfiguration mittels CGI"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1202"></a>2.7.1. Grundkonfiguration mittels CGI</h3></div></div></div><div class="note" title="Anmerkung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Anmerkung]" src="system/docbook-xsl/images/note.png"></td><th align="left">Anmerkung</th></tr><tr><td align="left" valign="top"><p>Für einen deutlichen Performanceschub sorgt die Ausführung
|
||
mittels FastCGI/FCGI. Die Einrichtung wird ausführlich im Abschnitt
|
||
<a class="xref" href="ch02s07.html#Apache-Konfiguration.FCGI" title="2.7.2. Konfiguration für FastCGI/FCGI">Konfiguration für FastCGI/FCGI</a> beschrieben.</p></td></tr></table></div><p>Der Zugriff auf das Programmverzeichnis muss in der Apache
|
||
Webserverkonfigurationsdatei <code class="literal">httpd.conf</code> eingestellt
|
||
werden. Fügen Sie den folgenden Abschnitt dieser Datei oder einer
|
||
anderen Datei hinzu, die beim Starten des Webservers eingelesen
|
||
wird:</p><pre class="programlisting">AliasMatch ^/kivitendo-erp/[^/]+\.pl /var/www/kivitendo-erp/dispatcher.pl
|
||
Alias /kivitendo-erp/ /var/www/kivitendo-erp/
|
||
|
||
1 = Minute (0-59)
|
||
2 = Stunde (0-23)
|
||
3 = Tag (0-31)
|
||
4 = Monat (1-12)
|
||
5 = Wochentag (0-7, Sonntag ist 0 oder 7)
|
||
</pre><p>Um die Ausführung auf eine Minute vor Sylvester zu setzen, müssen die folgenden Werte eingetragen werden:</p><pre class="programlisting">59 23 31 12 *</pre></li><li class="listitem"><p>
|
||
<code class="literal">Daten:</code>In diesem Feld können optionale Parameter für den Hintergrund im JSON-Format gesetzt werden. Der Hintergrund-Job <code class="literal">SetNumberRange</code> akzeptiert zwei Variable nämlich <code class="literal">digit_year</code> sowieso <code class="literal">multiplier</code>.</p><p>
|
||
<code class="literal">digit_year</code> kann zwei Werte haben entweder 2 oder 4, darüber wird gesteuert ob die Jahreszahl zwei oder vierstellig kodiert wird (für 2019, dann entweder 19 oder 2019). Der Standardwert ist vierstellig.</p><p>
|
||
<code class="literal">multiplier</code> ist ein Vielfaches von 10, darüber wird die erste Nummer im Nummernkreis (die Anzahl der Stellen) wie folgt bestimmt:</p><pre class="programlisting">
|
||
multiplier Nummernkreis 2020
|
||
10 -> 20200
|
||
100 -> 202000
|
||
1000 -> 2020000
|
||
</pre><p>Wir gehen jetzt beispielhaft von einer letzten Rechnungsnummer von RE2019456 aus. Demnach sollte ab Januar 2020 die erste Nummer RE2020001 sein. Da der Task auch Präfixe berücksichtigt, kann dies mit folgenden JSON-kodierten Werten umgesetzt werden:</p><p>
|
||
<code class="literal">Daten:</code>
|
||
</p><pre class="programlisting">multiplier: 100
|
||
digits_year: 4</pre></li></ul></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s06.html">Zurück</a> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02s08.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.6. Webserver-Konfiguration </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 2.8. Benutzerauthentifizierung und Administratorpasswort</td></tr></table></div></body></html>
|
||
<Directory /var/www/kivitendo-erp>
|
||
AddHandler cgi-script .pl
|
||
Options ExecCGI Includes FollowSymlinks
|
||
</Directory>
|
||
|
||
<Directory /var/www/kivitendo-erp/users>
|
||
Require all granted
|
||
</Directory></pre><p>Ersetzen Sie dabei die Pfade durch diejenigen, in die Sie vorher
|
||
das kivitendo-Archiv entpacket haben.</p><div class="note" title="Anmerkung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Anmerkung]" src="system/docbook-xsl/images/note.png"></td><th align="left">Anmerkung</th></tr><tr><td align="left" valign="top"><p>Vor den einzelnen Optionen muss bei einigen Distributionen ein
|
||
Plus ‘<code class="literal">+</code>’ gesetzt werden.</p><p>Bei einigen Distribution (Ubuntu ab 14.04, Debian ab 8.2) muss
|
||
noch explizit das cgi-Modul mittels </p><pre class="programlisting">a2enmod cgi</pre><p>
|
||
aktiviert werden.</p></td></tr></table></div><p>Auf einigen Webservern werden manchmal die Grafiken und
|
||
Style-Sheets nicht ausgeliefert. In solchen Fällen hat es oft
|
||
geholfen, die folgende Option in die Konfiguration aufzunehmen:</p><pre class="programlisting">EnableSendfile Off</pre></div><div class="sect2" title="2.7.2. Konfiguration für FastCGI/FCGI"><div class="titlepage"><div><div><h3 class="title"><a name="Apache-Konfiguration.FCGI"></a>2.7.2. Konfiguration für FastCGI/FCGI</h3></div></div></div><div class="sect3" title="2.7.2.1. Was ist FastCGI?"><div class="titlepage"><div><div><h4 class="title"><a name="Apache-Konfiguration.FCGI.WasIstEs"></a>2.7.2.1. Was ist FastCGI?</h4></div></div></div><p>Direkt aus <a class="ulink" href="http://de.wikipedia.org/wiki/FastCGI" target="_top">Wikipedia</a>
|
||
kopiert:</p><p>
|
||
[<span class="citation"> 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. </span>]
|
||
</p></div><div class="sect3" title="2.7.2.2. Warum FastCGI?"><div class="titlepage"><div><div><h4 class="title"><a name="Apache-Konfiguration.FCGI.Warum"></a>2.7.2.2. Warum FastCGI?</h4></div></div></div><p>Perl Programme (wie kivitendo 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 kivitendo 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 kivitendo Aufruf der Kernmasken mittlerweile
|
||
deutlich länger dauert als früher, und dass davon 90% für das Laden
|
||
der Module verwendet wird.</p><p>Mit FastCGI werden nun die Module einmal geladen, und danach
|
||
wird nur die eigentliche Programmlogik ausgeführt.</p></div><div class="sect3" title="2.7.2.3. Getestete Kombinationen aus Webservern und Plugin"><div class="titlepage"><div><div><h4 class="title"><a name="Apache-Konfiguration.FCGI.WebserverUndPlugin"></a>2.7.2.3. Getestete Kombinationen aus Webservern und Plugin</h4></div></div></div><p>Folgende Kombinationen sind getestet:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Apache 2.4.7 (Ubuntu 14.04.2 LTS) und mod_fcgid.</p></li><li class="listitem"><p>Apache 2.4.18 (Ubuntu 16.04 LTS) und mod_fcgid</p></li><li class="listitem"><p>Apache 2.4.29 (Ubuntu 18.04 LTS) und mod_fcgid</p></li><li class="listitem"><p>Apache 2.4.41 (Ubuntu 20.04 LTS) und mod_fcgid</p></li></ul></div><p>Als Perl Backend wird das Modul <code class="filename">FCGI.pm</code>
|
||
verwendet.</p><div class="warning" title="Warnung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warnung]" src="system/docbook-xsl/images/warning.png"></td><th align="left">Warnung</th></tr><tr><td align="left" valign="top"><p>FCGI-Versionen ab 0.69 und bis zu 0.71 inklusive sind extrem
|
||
strict in der Behandlung von Unicode, und verweigern bestimmte
|
||
Eingaben von kivitendo. Falls es Probleme mit Umlauten in Ihrer
|
||
Installation gibt, muss zwingend Version 0.68 oder aber Version
|
||
0.72 und neuer eingesetzt werden.</p><p>Mit <a class="ulink" href="http://www.cpan.org" target="_top">CPAN</a> lässt sie
|
||
sich die Vorgängerversion wie folgt installieren:</p><pre class="programlisting">force install M/MS/MSTROUT/FCGI-0.68.tar.gz</pre></td></tr></table></div></div><div class="sect3" title="2.7.2.4. Konfiguration des Webservers"><div class="titlepage"><div><div><h4 class="title"><a name="Apache-Konfiguration.FCGI.Konfiguration"></a>2.7.2.4. Konfiguration des Webservers</h4></div></div></div><p>Bevor Sie versuchen, eine kivitendo Installation unter FCGI
|
||
laufen zu lassen, empfiehlt es sich die Installation ersteinmal
|
||
unter CGI aufzusetzen. FCGI macht es nicht einfach Fehler zu
|
||
debuggen die beim ersten aufsetzen auftreten können. Sollte die
|
||
Installation schon funktionieren, lesen Sie weiter.</p><p>Zuerst muss das FastCGI-Modul aktiviert werden. Dies kann
|
||
unter Debian/Ubuntu z.B. mit folgendem Befehl geschehen:</p><pre class="programlisting">a2enmod fcgid</pre><p>Die Konfiguration für die Verwendung von kivitendo mit FastCGI
|
||
erfolgt durch Anpassung der vorhandenen <code class="function">Alias</code>-
|
||
und <code class="function">Directory</code>-Direktiven. Dabei wird zwischen
|
||
dem Installationspfad von kivitendo im Dateisystem
|
||
("<code class="filename">/path/to/kivitendo-erp</code>") und der URL
|
||
unterschieden, unter der kivitendo im Webbrowser erreichbar ist
|
||
("<code class="filename">/url/for/kivitendo-erp</code>").</p><p>Folgender Konfigurationsschnipsel funktioniert mit
|
||
mod_fastcgi:</p><pre class="programlisting">AliasMatch ^/url/for/kivitendo-erp/[^/]+\.pl /path/to/kivitendo-erp/dispatcher.fcgi
|
||
Alias /url/for/kivitendo-erp/ /path/to/kivitendo-erp/
|
||
|
||
<Directory /path/to/kivitendo-erp>
|
||
AllowOverride All
|
||
Options ExecCGI Includes FollowSymlinks
|
||
Require all granted
|
||
</Directory>
|
||
|
||
<DirectoryMatch /path/to/kivitendo-erp/users>
|
||
Require all denied
|
||
</DirectoryMatch></pre><div class="warning" title="Warnung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warnung]" src="system/docbook-xsl/images/warning.png"></td><th align="left">Warnung</th></tr><tr><td align="left" valign="top"><p>Wer einen älteren Apache als Version 2.4 im Einsatz hat,
|
||
muss entsprechend die Syntax der Directorydirektiven verändert.
|
||
Statt</p><pre class="programlisting">Require all granted</pre><p>muß man Folgendes einstellen:</p><pre class="programlisting">
|
||
Order Allow,Deny
|
||
Allow from All </pre><p>und statt</p><pre class="programlisting">Require all denied</pre><p>muss stehen:</p><pre class="programlisting">
|
||
Order Deny,Allow
|
||
Deny from All </pre></td></tr></table></div><p>Seit mod_fcgid-Version 2.3.6 gelten sehr kleine Grenzen für
|
||
die maximale Größe eines Requests. Diese sollte wie folgt
|
||
hochgesetzt werden:</p><pre class="programlisting">FcgidMaxRequestLen 10485760</pre><p>Das Ganze sollte dann so aussehen:</p><pre class="programlisting">AddHandler fcgid-script .fpl
|
||
AliasMatch ^/url/for/kivitendo-erp/[^/]+\.pl /path/to/kivitendo-erp/dispatcher.fpl
|
||
Alias /url/for/kivitendo-erp/ /path/to/kivitendo-erp/
|
||
FcgidMaxRequestLen 10485760
|
||
|
||
<Directory /path/to/kivitendo-erp>
|
||
AllowOverride All
|
||
Options ExecCGI Includes FollowSymlinks
|
||
Require all granted
|
||
</Directory>
|
||
|
||
<DirectoryMatch /path/to/kivitendo-erp/users>
|
||
Require all denied
|
||
</DirectoryMatch></pre><p>Hierdurch wird nur ein zentraler Dispatcher gestartet. Alle
|
||
Zugriffe auf die einzelnen Scripte werden auf diesen umgeleitet.
|
||
Dadurch, dass zur Laufzeit öfter mal Scripte neu geladen werden,
|
||
gibt es hier kleine Performance-Einbußen.</p><p>Es ist möglich, die gleiche kivitendo Version parallel unter
|
||
CGI und FastCGI zu betreiben. Dafür bleiben die Directorydirektiven
|
||
wie oben beschrieben, die URLs werden aber umgeleitet:</p><pre class="programlisting"># Zugriff über CGI
|
||
Alias /url/for/kivitendo-erp /path/to/kivitendo-erp
|
||
|
||
# Zugriff mit mod_fcgid:
|
||
AliasMatch ^/url/for/kivitendo-erp-fcgid/[^/]+\.pl /path/to/kivitendo-erp/dispatcher.fpl
|
||
Alias /url/for/kivitendo-erp-fcgid/ /path/to/kivitendo-erp/</pre><p>Dann ist unter <code class="filename">/url/for/kivitendo-erp/</code>
|
||
die normale Version erreichbar, und unter
|
||
<code class="constant">/url/for/kivitendo-erp-fcgid/</code> die
|
||
FastCGI-Version.</p></div></div><div class="sect2" title="2.7.3. Authentifizierung mittels HTTP Basic Authentication"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1356"></a>2.7.3. Authentifizierung mittels HTTP Basic Authentication</h3></div></div></div><p>
|
||
Kivitendo unterstützt, dass Benutzerauthentifizierung über den Webserver mittels des »Basic«-HTTP-Authentifizierungs-Schema erfolgt
|
||
(siehe <a class="ulink" href="https://tools.ietf.org/html/rfc7617" target="_top">RFC 7617</a>). Dazu ist es aber nötig, dass der dabei vom Client
|
||
mitgeschickte Header <code class="constant">Authorization</code> vom Webserver an Kivitendo über die Umgebungsvariable
|
||
<code class="constant">HTTP_AUTHORIZATION</code> weitergegeben wird, was standardmäßig nicht der Fall ist. Für Apache kann dies über die
|
||
folgende Konfigurationsoption aktiviert werden:
|
||
</p><pre class="programlisting">SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1</pre></div><div class="sect2" title="2.7.4. Aktivierung von mod_rewrite/directory_match für git basierte Installationen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1372"></a>2.7.4. Aktivierung von mod_rewrite/directory_match für git basierte Installationen</h3></div></div></div><p>
|
||
Aufgrund von aktuellen (Mitte 2020) Sicherheitswarnungen für git basierte Webanwendungen ist die mitausgelieferte .htaccess
|
||
restriktiver geworden und verhindert somit das Auslesen von git basierten Daten.
|
||
Für debian/ubuntu muss das Modul mod_rewrite einmalig so aktiviert werden:
|
||
</p><pre class="programlisting">a2enmod rewrite</pre><p>
|
||
Alternativ und für Installationen ohne Apache ist folgender Artikel interessant:
|
||
<a class="ulink" href="https://www.cyberscan.io/blog/git-luecke" target="_top">git-lücke</a>.
|
||
Anstelle des dort beschriebenen DirectoryMatch für Apache2 würden wir etwas weitergehend auch noch das Verzeichnis config miteinbeziehen
|
||
sowie ferner auch die Möglichkeit nicht ausschließen, dass es in Unterverzeichnissen auch noch .git Repositories geben kann.
|
||
Die Empfehlung für Apache 2.4 wäre damit:
|
||
</p><pre class="programlisting">
|
||
<DirectoryMatch "/(\.git|config)/">
|
||
Require all denied
|
||
</DirectoryMatch></pre><p>
|
||
|
||
</p></div><div class="sect2" title="2.7.5. Weitergehende Konfiguration"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1386"></a>2.7.5. Weitergehende Konfiguration</h3></div></div></div><p>Für einen deutlichen Sicherheitsmehrwert sorgt die Ausführung
|
||
von kivitendo nur über https-verschlüsselten Verbindungen, sowie
|
||
weiteren Zusatzmassnahmen, wie beispielsweise Basic Authenticate. Die
|
||
Konfigurationsmöglichkeiten sprengen allerdings den Rahmen dieser
|
||
Anleitung, hier ein Hinweis auf einen entsprechenden <a class="ulink" href="http://redmine.kivitendo-premium.de/boards/1/topics/142" target="_top">Foreneintrag
|
||
(Stand Sept. 2015)</a> und einen aktuellen (Stand Mai 2017) <a class="ulink" href="https://mozilla.github.io/server-side-tls/ssl-config-generator/" target="_top">
|
||
SSL-Konfigurations-Generator</a>.</p></div><div class="sect2" title="2.7.6. Aktivierung von Apache2 modsecurity"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1397"></a>2.7.6. Aktivierung von Apache2 modsecurity</h3></div></div></div><p>Aufgrund des OpenSource Charakters ist kivitendo nicht "out of the box" sicher.
|
||
Organisatorisch empfehlen wir hier die enge Zusammenarbeit mit einem kivitendo Partner der auch in der
|
||
Lage ist weiterführende Fragen in Bezug auf Datenschutz und Datensicherheit zu beantworten.
|
||
Unabhängig davon empfehlen wir im Webserver Bereich die Aktivierung und Konfiguration des Moduls modsecurity für den Apache2, damit
|
||
XSS und SQL-Injections verhindert werden.</p><p> Als Idee hierfür sei dieser Blog-Eintrag genannt:
|
||
<a class="ulink" href="https://doxsec.wordpress.com/2017/06/11/using-modsecurity-web-application-firewall-to-prevent-sql-injection-and-xss-using-blocking-rules/" target="_top">
|
||
Test Apache2 modsecurity for SQL Injection</a>.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s06.html">Zurück</a> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02s08.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.6. Anpassung der PostgreSQL-Konfiguration </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 2.8. Der Task-Server</td></tr></table></div></body></html>
|
Auch abrufbar als: Unified diff
Anleitung für installation mit Ansible hinzugefüegt