⚲
Projekt
Allgemein
Profil
Anmelden
Hauptseite
Projekte
Hilfe
Suche
:
projekt kivitendo
Alle Projekte
projekt kivitendo
Übersicht
Aktivität
Roadmap
Tickets
Aufgewendete Zeit
News
Dokumente
Wiki
Foren
Repository
Herunterladen (358 KB)
Statistiken
| Zweig:
2017-validator-args
2018-cvar-presenter
2020-cgi-removal
2020-helper-number
2020-inventory-helper
2020-inventory-helper2
2020-leistungsdatum
2021-delivery-order-controller-3
2021-delivery-order-controller-5
2021-delivery-order-controller-7
2021-delivery-order-controller-8
2021-delivery-order-controller-test
2021-mobile
Sie den evtl. voreingestellten Benutzer “postgres” auf “kivitendo”
bzw. den hier gewählten Benutzernamen.
</para>
</sect2>
</sect1>
<sect1
id=
"Apache-Konfiguration"
>
<title>
Webserver-Konfiguration
</title>
<sect2>
<title>
Grundkonfiguration mittels CGI
</title>
<note>
<para>
Für einen deutlichen Performanceschub sorgt die Ausführung
mittels FastCGI/FCGI. Die Einrichtung wird ausführlich im Abschnitt
<xref
linkend=
"Apache-Konfiguration.FCGI"
/>
beschrieben.
</para>
</note>
<para>
Der Zugriff auf das Programmverzeichnis muss in der Apache
Webserverkonfigurationsdatei
<literal>
httpd.conf
</literal>
eingestellt
werden. Fügen Sie den folgenden Abschnitt dieser Datei oder einer
anderen Datei hinzu, die beim Starten des Webservers eingelesen
wird:
</para>
<programlisting>
AliasMatch ^/kivitendo-erp/[^/]+\.pl /var/www/kivitendo-erp/dispatcher.pl
Alias /kivitendo-erp/ /var/www/kivitendo-erp/
<
Directory /var/www/kivitendo-erp
>
AddHandler cgi-script .pl
Options ExecCGI Includes FollowSymlinks
<
/Directory
>
<
Directory /var/www/kivitendo-erp/users
>
Require all granted
<
/Directory
>
</programlisting>
<para>
Ersetzen Sie dabei die Pfade durch diejenigen, in die Sie vorher
das kivitendo-Archiv entpacket haben.
</para>
<note>
<para>
Vor den einzelnen Optionen muss bei einigen Distributionen ein
Plus ‘
<literal>
+
</literal>
’ gesetzt werden.
</para>
<para>
Bei einigen Distribution (Ubuntu ab 14.04, Debian ab 8.2) muss
noch explizit das cgi-Modul mittels
<programlisting>
a2enmod cgi
</programlisting>
aktiviert werden.
</para>
</note>
<para>
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:
</para>
<programlisting>
EnableSendfile Off
</programlisting>
</sect2>
<sect2
id=
"Apache-Konfiguration.FCGI"
xreflabel=
"Konfiguration für FastCGI/FCGI"
>
<title>
Konfiguration für FastCGI/FCGI
</title>
<sect3
id=
"Apache-Konfiguration.FCGI.WasIstEs"
>
<title>
Was ist FastCGI?
</title>
<para>
Direkt aus
<ulink
url=
"http://de.wikipedia.org/wiki/FastCGI"
>
Wikipedia
</ulink>
kopiert:
</para>
<para><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.
</citation></para>
</sect3>
<sect3
id=
"Apache-Konfiguration.FCGI.Warum"
>
<title>
Warum FastCGI?
</title>
<para>
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.
</para>
<para>
Mit FastCGI werden nun die Module einmal geladen, und danach
wird nur die eigentliche Programmlogik ausgeführt.
</para>
</sect3>
<sect3
id=
"Apache-Konfiguration.FCGI.WebserverUndPlugin"
>
<title>
Getestete Kombinationen aus Webservern und Plugin
</title>
<para>
Folgende Kombinationen sind getestet:
</para>
<itemizedlist>
<listitem>
<para>
Apache 2.4.7 (Ubuntu 14.04.2 LTS) und mod_fcgid.
</para>
</listitem>
<listitem>
<para>
Apache 2.4.18 (Ubuntu 16.04 LTS) und mod_fcgid
</para>
</listitem>
<listitem>
<para>
Apache 2.4.29 (Ubuntu 18.04 LTS) und mod_fcgid
</para>
</listitem>
<listitem>
<para>
Apache 2.4.41 (Ubuntu 20.04 LTS) und mod_fcgid
</para>
</listitem>
</itemizedlist>
<para>
Als Perl Backend wird das Modul
<filename>
FCGI.pm
</filename>
verwendet.
</para>
<warning>
<para>
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.
</para>
<para>
Mit
<ulink
url=
"http://www.cpan.org"
>
CPAN
</ulink>
lässt sie
sich die Vorgängerversion wie folgt installieren:
</para>
<programlisting>
force install M/MS/MSTROUT/FCGI-0.68.tar.gz
</programlisting>
</warning>
</sect3>
<sect3
id=
"Apache-Konfiguration.FCGI.Konfiguration"
>
<title>
Konfiguration des Webservers
</title>
<para>
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.
</para>
<para>
Zuerst muss das FastCGI-Modul aktiviert werden. Dies kann
unter Debian/Ubuntu z.B. mit folgendem Befehl geschehen:
</para>
<programlisting>
a2enmod fcgid
</programlisting>
<para>
Die Konfiguration für die Verwendung von kivitendo mit FastCGI
erfolgt durch Anpassung der vorhandenen
<function>
Alias
</function>
-
und
<function>
Directory
</function>
-Direktiven. Dabei wird zwischen
dem Installationspfad von kivitendo im Dateisystem
("
<filename>
/path/to/kivitendo-erp
</filename>
") und der URL
unterschieden, unter der kivitendo im Webbrowser erreichbar ist
("
<filename>
/url/for/kivitendo-erp
</filename>
").
</para>
<para>
Folgender Konfigurationsschnipsel funktioniert mit
mod_fastcgi:
</para>
<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
>
</programlisting>
<warning>
<para>
Wer einen älteren Apache als Version 2.4 im Einsatz hat,
muss entsprechend die Syntax der Directorydirektiven verändert.
Statt
</para>
<programlisting>
Require all granted
</programlisting>
<para>
muß man Folgendes einstellen:
</para>
<programlisting>
Order Allow,Deny
Allow from All
</programlisting>
<para>
und statt
</para>
<programlisting>
Require all denied
</programlisting>
<para>
muss stehen:
</para>
<programlisting>
Order Deny,Allow
Deny from All
</programlisting>
</warning>
<para>
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:
</para>
<programlisting>
FcgidMaxRequestLen 10485760
</programlisting>
<para>
Das Ganze sollte dann so aussehen:
</para>
<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
>
</programlisting>
<para>
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.
</para>
<para>
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:
</para>
<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/
</programlisting>
<para>
Dann ist unter
<filename>
/url/for/kivitendo-erp/
</filename>
die normale Version erreichbar, und unter
<constant>
/url/for/kivitendo-erp-fcgid/
</constant>
die
FastCGI-Version.
</para>
</sect3>
</sect2>
<sect2>
<title>
Authentifizierung mittels HTTP Basic Authentication
</title>
<para>
Kivitendo unterstützt, dass Benutzerauthentifizierung über den Webserver mittels des »Basic«-HTTP-Authentifizierungs-Schema erfolgt
<para>
Mahnungen können unter folgenden Einschränkungen mit den
odt-Vorlagen im Vorlagensatz rev-odt erzeugt werden:
</para>
<itemizedlist>
<listitem>
<para>
als Druckoption steht nur 'PDF(OpenDocument/OASIS)' zur
Verfügung, das heisst, die Mahnungen werden als PDF-Datei
ausgegeben.
</para>
</listitem>
<listitem>
<para>
für jede Rechnung muss eine eigene Mahnung erzeugt werden
(auch wenn bei einzelnen KundInnen mehrere überfällige Rechnungen
vorhanden sind).
</para>
</listitem>
</itemizedlist>
<para>
Mehrere Mahnungen für eine Kundin / einen Kunden werden zu einer
<title>
Informationen über den Bearbeiter
</title>
<variablelist>
<varlistentry>
<term><varname>
employee_address
</varname></term>
<listitem>
<para>
Adressfeld
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
employee_businessnumber
</varname></term>
<listitem>
<para>
Firmennummer
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
employee_company
</varname></term>
<listitem>
<para>
Firmenname
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
employee_co_ustid
</varname></term>
<listitem>
<para>
Usatzsteuer-Identifikationsnummer
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
employee_duns
</varname></term>
<listitem>
<para>
DUNS-Nummer
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
employee_email
</varname></term>
<listitem>
<para>
Email
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
employee_fax
</varname></term>
<listitem>
<para>
Fax
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
employee_name
</varname></term>
<listitem>
<para>
voller Name
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
employee_signature
</varname></term>
<listitem>
<para>
Signatur
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
employee_taxnumber
</varname></term>
<listitem>
<para>
Steuernummer
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
employee_tel
</varname></term>
<listitem>
<para>
Telefonnummer
</para>
</listitem>
</varlistentry>
</variablelist>
</sect3>
<sect3
id=
"dokumentenvorlagen-und-variablen.allgemein-verkaeufer"
>
<title>
Informationen über den Verkäufer
</title>
<variablelist>
<varlistentry>
<term><varname>
salesman_address
</varname></term>
<listitem>
<para>
Adressfeld
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
salesman_businessnumber
</varname></term>
<listitem>
<para>
Firmennummer
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
salesman_company
</varname></term>
<listitem>
<para>
Firmenname
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
salesman_co_ustid
</varname></term>
<listitem>
<para>
Usatzsteuer-Identifikationsnummer
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
salesman_duns
</varname></term>
<listitem>
<para>
DUNS-Nummer
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
salesman_email
</varname></term>
<listitem>
<para>
Email
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
salesman_fax
</varname></term>
<listitem>
<para>
Fax
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
salesman_name
</varname></term>
<listitem>
<para>
voller Name
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
salesman_signature
</varname></term>
<listitem>
<para>
Signatur
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
salesman_taxnumber
</varname></term>
<listitem>
<para>
Steuernummer
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
salesman_tel
</varname></term>
<listitem>
<para>
Telefonnummer
</para>
</listitem>
</varlistentry>
</variablelist>
</sect3>
<sect3
id=
"dokumentenvorlagen-und-variablen.allgemein-steuern"
>
<title>
Variablen für die einzelnen Steuern
</title>
<variablelist>
<varlistentry>
<term><varname>
tax
</varname></term>
<listitem>
<para>
Steuer
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
taxbase
</varname></term>
<listitem>
<para>
zu versteuernder Betrag
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
taxdescription
</varname></term>
<listitem>
<para>
Name der Steuer
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
taxrate
</varname></term>
<listitem>
<para>
Steuersatz
</para>
</listitem>
</varlistentry>
</variablelist>
</sect3>
<sect3
id=
"dokumentenvorlagen-und-variablen.allgemein-lieferbedingungen"
>
<title>
Variablen für Lieferbedingungen
</title>
<variablelist>
<varlistentry>
<term><varname>
delivery_term
</varname></term>
<listitem>
<para>
Datenbank-Objekt der Lieferbedingung
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
delivery_term.description
</varname></term>
<listitem>
<para>
Beschreibung der Lieferbedingung
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
delivery_term.description_long
</varname></term>
<listitem>
<para>
Langtext bzw. übersetzter Langtext der
Lieferbedingung
</para>
</listitem>
</varlistentry>
</variablelist>
</sect3>
<sect3
id=
"dokumentenvorlagen-und-variablen.abweichende-rechnungsadresse"
>
<title>
Informationen über abweichende Rechnungsadressen (nur Verkaufsbelege)
</title>
<para>
Abweichende Rechnungsadressen gibt es nur in Verkaufsbelegen. Die entsprechenden Variablen sind nur dann mit Inhalt gefüllt,
wenn im Beleg eine abweichende Rechnungsadresse ausgewählt wurde. Ob eine Adresse überhaupt ausgewählt wurde, kann über die
Variable
<literal>
billing_address_id
</literal>
getestet werden, die die Datenbank-ID der abweichenden Rechnungsadresse enthält,
wenn eine ausgewählt ist.
</para>
<para>
Die Variablennamen starten alle mit dem Präfix
<literal>
billing_address_
</literal>
und heißen anschließend so, wie ihre Pendants
aus der Standard-Rechnungsadresse des Kunden. Beispiel: die Postleitzahl, die in der normalen Rechnungsadresse in
<literal>
zipcode
</literal>
steht, steht für die abweichende Rechnungsadresse in
<literal>
billing_address_zipcode
</literal>
.
</para>
<para>
Die folgenden Variablen stehen so zur Verfügung:
<literal>
billing_address_name
</literal>
,
<literal>
billing_address_department_1
</literal>
,
<literal>
billing_address_department_2
</literal>
,
<literal>
billing_address_contact
</literal>
,
<literal>
billing_address_street
</literal>
,
<literal>
billing_address_zipcode
</literal>
,
<literal>
billing_address_city
</literal>
,
<literal>
billing_address_country
</literal>
,
<literal>
billing_address_gln
</literal>
,
<literal>
billing_address_email
</literal>
,
<literal>
billing_address_phone
</literal>
und
<literal>
billing_address_fax
</literal>
.
</para>
</sect3>
</sect2>
<sect2
id=
"dokumentenvorlagen-und-variablen.invoice"
>
<title>
Variablen in Rechnungen
</title>
<sect3
id=
"dokumentenvorlagen-und-variablen.invoice-allgemein"
>
<title>
Allgemeine Variablen
</title>
<variablelist>
<varlistentry>
<term><varname>
creditremaining
</varname></term>
<listitem>
<para>
Verbleibender Kredit
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
currency
</varname></term>
<listitem>
<para>
Währung
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
cusordnumber
</varname></term>
<listitem>
<para>
Bestellnummer beim Kunden
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
deliverydate
</varname></term>
<listitem>
<para>
Lieferdatum
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
duedate
</varname></term>
<listitem>
<para>
Fälligkeitsdatum
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
globalprojectnumber
</varname></term>
<listitem>
<para>
Projektnummer des ganzen Beleges
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
globalprojectdescription
</varname></term>
<listitem>
<para>
Projekbeschreibung des ganzen Beleges
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
intnotes
</varname></term>
<listitem>
<para>
Interne Bemerkungen
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
invdate
</varname></term>
<listitem>
<para>
Rechnungsdatum
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
invnumber
</varname></term>
<listitem>
<para>
Rechnungsnummer
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
invtotal
</varname></term>
<listitem>
<para>
gesamter Rechnungsbetrag
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
notes
</varname></term>
<listitem>
<para>
Bemerkungen der Rechnung
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
orddate
</varname></term>
<listitem>
<para>
Auftragsdatum
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
ordnumber
</varname></term>
<listitem>
<para>
Auftragsnummer, wenn die Rechnung aus einem Auftrag
erstellt wurde
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
payment_description
</varname></term>
<listitem>
<para>
Name der Zahlart
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
payment_terms
</varname></term>
<listitem>
<para>
Zahlungskonditionen
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>
quodate
</varname></term>
<listitem>