[[fhc:server|zurück zur Übersicht]]
====== FH-Complete Server Installation ======
Diese Installationsanleitung befindet sich noch im Aufbau
Diese Anleitung beschreibt die Installation des FH-Complete Core.
In diesem Setup wird davon ausgegangen, dass sich die Datenbank auf einem eigenen Server befindet.
\\
===== Voraussetzungen =====
Die Installation setzt folgende Infrastruktur voraus:
* LDAP Server (ldap.example.com)
* Mail Server (mail.example.com)
* Storage
* PostgreSQL Server (db.example.com)
* Der Server selbst ist unter (fhcomplete.example.com) erreichbar
\\
===== Grundinstallation =====
Ausgangsbasis für die Installation ist eine Standardinstallation von Debian 9 Stretch.
Die folgenden Befehle für die Installation werden als //root User// ausgeführt.
==== Installation des Apache Webservers ====
apt install apache2
==== Installation der erforderlichen PHP Pakete ====
=== >= PHP 7 ===
apt install php7.0 php7.0-xsl php7.0-gd php7.0-pgsql php7.0-ldap php7.0-mcrypt php7.0-mbstring php7.0-soap php7.0-curl php7.0-zip
=== <= PHP 5 ===
apt-get install php5-xsl php5-gd php5-pgsql php5-ldap php5-mcrypt
**Anpassung der Konfigurationsdatei unter PHP 5**
register_globas = Off
magic_qoutes_gpc = Off
short_open_tags = Off
asp_tags = Off
upload_max_filesize = 15MB
pgsql.allow_persistent = On
output_buffering = 4096
\\
==== Zusätzliche Tools installieren ====
apt install vim zip
Soll die Datenübernahme von einem MSSQL Server erfolgen, muss zusätzlich folgendes Paket installiert werden:
apt-get install php5-sybase
\\
===== NTP - Zeitsynchronisation =====
Die Uhrzeit sollte auf allen FH-Complete Servern annähernd die selbe sein. Deshalb sollte diese mit NTP synchron gehalten werden.
apt-get install ntp
In der Datei /etc/ntp.conf wird dann ein Timeserver hinzugefügt.
# You do need to talk to an NTP server or two (or three).
#server ntp.your-provider.example
server ts.example.com
\\
===== Apache einrichten =====
==== HTTPS aktivieren ====
Um die HTTPS Verschlüsselung zu aktivieren benötigen wir das Server Zertifikat und den dazu passenden private Key.
Den private Key speichern wir unter /etc/ssl/private/fhcomplete.key und das Zertifikat unter /etc/ssl/certs/fhcomplete.pem\\
=> Details und weitere Informationen zu den [[admin:zertifikate|Zertifikaten]]
Mit folgendem Befehl aktivieren wir SSL im Apache
a2enmod ssl
systemctl restart apache2
Wir kopieren das default-ssl Config und passen dort die Zertifikatspfade entsprechend an:
cd /etc/apache2/sites-available/
cp default-ssl.conf fhcomplete-ssl.conf
In der neu erstellten fhcomplete-ssl.conf muss der Pfad zu den Zertifikaten angegeben werden:
SSLCertificateFile /etc/ssl/certs/fhcomplete.pem
SSLCertificateKeyFile /etc/ssl/private/fhcomplete.key
Mit folgendem Befehl aktivieren wir die Konfiguration
a2ensite fhcomplete-ssl.conf
systemctl reload apache2
Nachdem die SSL Verbindung funktioniert richten wir einen Redirect von HTTP auf HTTPS ein. Dazu editieren wir die Datei /etc/apache2/sites-enabled/000-default.conf
....
DocumentRoot /var/www/html
Redirect permanent / https://fhcomplete.example.com
....
In der fhcomplete-ssl.conf richten wir einen Caldav Redirect ein sofern die Caldav Schnittstelle verwendet werden soll.
Zusätzlich setzen wir die Option AllowOverride.
# Redirect für Caldav einrichten. Beim Einrichten des Caldav Clients ist es dadurch nicht nötig die volle URL
# Anzugeben sondern lediglich den Hostnamen
Redirect permanent /.well-known/caldav /webdav/lvplan.php/
Options Indexes FollowSymLinks MultiViews
# AllowOverride auf AuthConfig und Limit setzen damit die Authentifizierung über .htaccess
# Dateien funktioniert
AllowOverride AuthConfig Limit
Order allow,deny
allow from all
Damit die Änderungen übernommen werden starten wir den Apache neu:
systemctl restart apache2
Seamonkey 2.11 benötigt TLS 1.0 für verschlüsselte Verbindungen. Unter Ubuntu ab Version 20.04 müssen TLS 1.0 und die benötigten Ciphers allerdings explizit aktiviert werden! Dazu müssen in /etc/apache2/mods-enabled/ssl.conf folgende Optionen gesetzt sein:
SSLProtocol all
SSLCipherSuite ALL:@SECLEVEL=1
Private Temp deaktivieren - Damit Apache mit Systemd kein eigenes /tmp Verzeichnis erstellt muss das PrivateTmp deaktiviert werden da es sonst zu Problemen bei der Dokumentenerstellung kommt
cd /etc/systemd/system/
mkdir apache2.service.d
cd apache2.service.d
vim nopt.conf
Die Datei hat folgenden Inhalt
[Service]
PrivateTmp=false
Damit die Änderungen übernommen werde muss der Daemon und Apache startet werden.
systemctl daemon-reload
systemctl restart apache2
\\
===== LDAP Anbindung =====
LDAP Modul in Apache aktivieren
a2enmod authnz_ldap
systemctl restart apache2
LDAP Utils installation
apt install ldap-utils
Anpassung der LDAP Config unter /etc/ldap/ldap.conf
host ldap.example.com
base dc=example,dc=com
\\
===== FH-Complete Installation =====
Zuerst stellen wir sicher dass Git und Composer installiert sind
apt install git composer
Danach laden wir den aktuellen FH-Complete Core und das LDAP Addon von GitHub.
cd /home/fhcomplete/
mkdir git
cd git
git clone https://github.com/FH-Complete/FHC-Core.git FHC-Core
git clone https://github.com/FH-Complete/FHC-AddOn-LDAP.git FHC-AddOn-LDAP
Und kopieren den aktuellen Stand in das Webserver-Verzeichnis
rsync -ruv /home/fhcomplete/git/FHC-Core/* /var/www/html/ --exclude=".git"
rsync -ruv /home/fhcomplete/git/FHC-AddOn-LDAP/* /var/www/html/addons/ldap/ --exclude=".git"
Danach laden wir die nötigen Zusatzmodule per Composer nach
cd /var/www/html
composer install
Um die htaccess Dateien zentral zu verwalten erstellen wir einen eigenen Ordner und verlinken die .htaccess Dateien mit symbolischen Links
mkdir /var/fhcomplete
mkdir /var/fhcomplete/htaccess
cd /var/fhcomplete/htaccess
vim .htaccess
vim .htaccessrdf
AuthBasicProvider ldap
AuthName "FH Complete"
AuthType Basic
AuthLDAPURL "ldap://ldap.example.com:389/ou=People,dc=example,dc=com?uid?one?objectclass=posixAccount" STARTTLS
AuthLDAPGroupAttribute memberuid
AuthLDAPGroupAttributeIsDN Off
Require valid-user
Apache 2.2
Order deny,allow
Deny from all
Allow from 127.0.0.1
AuthBasicProvider ldap
AuthName "FH Complete"
AuthType Basic
AuthLDAPURL "ldap://ldap.example.com:389/ou=People,dc=example,dc=com?uid?one?objectclass=posixAccount" STARTTLS
AuthLDAPGroupAttributeIsDN Off
AuthLDAPGroupAttribute memberuid
require valid-user
satisfy any
Apache 2.4
Require local
AuthBasicProvider ldap
AuthName "FH Complete"
AuthType Basic
AuthLDAPURL "ldap://ldap.example.com:389/ou=People,dc=example,dc=com?uid?one?objectclass=posixAccount" STARTTLS
AuthLDAPGroupAttributeIsDN Off
AuthLDAPGroupAttribute memberuid
require valid-user
cd /var/www/html/cis/private/
ln -s /var/fhcomplete/htaccess/.htaccess .htaccess
cd /var/www/html/vilesci/
ln -s /var/fhcomplete/htaccess/.htaccess .htaccess
cd /var/www/html/system/
ln -s /var/fhcomplete/htaccess/.htaccess .htaccess
cd /var/www/html/content/
ln -s /var/fhcomplete/htaccess/.htaccess .htaccess
cd /var/www/html/rdf/
ln -s /var/fhcomplete/htaccess/.htaccessrdf .htaccess
Damit die Installation der Extensions funktioniert müssen Schreibrechte für bestimmte Ordner gesetzt werden:
cd /var/www/html/
chgrp www-data application/extensions/ application/tmp/ application/components/extensions/ application/config/extensions/ application/controllers/extensions/ application/helpers/extensions/ application/hooks/extensions/ application/libraries/extensions/ application/models/extensions/ application/views/extensions/ application/widgets/extensions/ public/extensions/
chmod 775 application/extensions/ application/tmp/ application/config/extensions/ application/components/extensions/ application/controllers/extensions/ application/helpers/extensions/ application/hooks/extensions/ application/libraries/extensions/ application/models/extensions/ application/views/extensions/ application/widgets/extensions/ public/extensions/
Auf den Ordner vilesci/bisdaten müssen Schreibrechte gesetzt werden:
cd /var/www/html/
chgrp www-data vilesci/bisdaten/
chmod g+w vilesci/bisdaten/
Als nächstes erstellen wir die nötigen Konfigurationsdateien.
cd /var/www/html/config/
cp global.config-default.inc.php global.config.inc.php
cp vilesci.config-default.inc.php vilesci.config.inc.php
Im Vilesci Config müssen folgende Einträge zwingend angepasst werden:
define("DB_HOST","db.example.com");
define("DB_NAME","fhcomplete");
define("DB_PASSWORD","PASSWORT");
define('APP_ROOT','https://fhcomplete.example.com/');
define('XML_ROOT','https://fhcomplete.example.com/rdf/');
define("AUTH_SYSTEM", "auth_mixed");
define("AUTH_NAME","FH Complete"); // gleiche Bezeichnung wie AuthName im htaccess
define('LDAP_SERVER','ldap://ldap.example.com');
define('LDAP_BASE_DN','ou=People,dc=example,dc=com');
define('MAIL_DEBUG',''); // Entrag entfernen da sonst alle Mails an diese Addresse gesendet werden
\\
===== Mail-Versand einrichten =====
Damit die Mails vom FH-Complete zugestellt werden, muss der Server entsprechend konfiguriert werden damit die Mails an den Mailserver weitergeleitet werden.
Dazu wird zuerst Postfix installiert:
apt-get install postfix
Sollte nicht automatisch die Konfigurationsseite geöffnet werden, kann dies manuell mit
dpkg-reconfigure postfix
aufgerufen werden.
Hier wird Satellitensystem ausgewählt und die entsprechenden Informationen eingetragen.
Danach wird der User konfiguriert der die E-Mails verschickt. Dazu erstellen wir eine neu Datei:
vim /etc/postfix/password
Und tragen dort den Server, Usernamen und Passwort ein
mail.example.com fhcomplete@example.com:MeinPassw0rT
Und folgender Befehl ausgeführt
postmap /etc/postfix/password
Bei der Versendung der Mails muss ggf die Absendeadresse überschrieben werden damit der Mailversand erlaubt ist.
vi /etc/postfix/generic
In diesem Beispiel werden alle Adressen die von www-data@example.com bzw root@example.com gesendet werden auf fhcomplete@example.com geändert
#Absenderfilter NeuerAbsender
www-data@example.com fhcomplete@example.com
root@example.com fhcomplete@example.com
Um den Absender von allen Mails gleich zu setzen kann im Config die Option MAIL_FROM gesetzt werden
Hashtable erstellen
postmap /etc/postfix/generic
Die restlichen Einstellungen werden in der main.cf vorgenommen.
Hier ein Beispiel für die Verwendung von Office 365:
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/password
smtp_sasl_security_options =
relayhost = outlook.office365.com:587
smtp_generic_maps = hash:/etc/postfix/generic
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
Postfix neu starten
/etc/init.d/postfix restart
Eventuelle Fehlermeldungen beim Versand der E-Mails sind unter /var/log/mail.log sichtbar.
=== Mailversand Testen ===
Testen des Mailversands von der Commandline:
mail -s "TestBetreff" empfaenger@example.com
Nach dem Enter drücken kann der Mailinhalt eingegeben werden. In der letzten Zeile wird ein "." eingegeben und mit Enter wird das Mail versandt.
=== Mailversand über das Messaging System ===
Seit Version 3.2 werden Mails auch über das Messaging System versandt.
Damit die Nachrichten des Messaging Systems korrekt zugestellt werden muss ein Cronjob eingerichtet werden der regelmäßig diese Nachrichten verschickt.
Dazu wird der folgende Befehl in der Cronjobverwaltung im Vilesci hinzugefügt:
/var/www/vilesci/htdocs/index.ci.php MailJob sendMessages
Alternativ kann auch in der Datei application/config/message.php die Einstellung
$config['send_immediately'] = true;
gesetzt werden. Dadurch werden die Messages direkt verschickt. Dies ist jedoch nicht empfehlenswert da bei Messages an viele Empfänger diese direkt gesendet werden und die Mails gegebenenfalls als Spam markiert werden bzw der Mailserver geblockt wird.
Bei der Cronjob Variante werden die Mails stattdessen verzögert bzw portionsweise verschickt.
==== Fehlerquellen ====
=== Mails werden nur an eine bestimmte Adresse versandt ===
Im FH-Complete können zu Debuggingzwecken alle versendeten E-Mails an eine Adresse umgeleitet werden.
Dazu gibt es im Config die Einstellung MAIL_DEBUG.\\
Wenn hier eine E-Mail Adresse eingetragen ist, werden alle vom FH-Complete versendeten Mails an diese Adresse umgeleitet.
=== Domain der Absendeadresse ist falsch ===
/etc/mailname muss den korrekten Domainnamen enthalten
\\
====== Dokumenterstellung einrichten ======
Einige Dokumente benötigen für die Erstellung das Tool unoconv.\\
Teilweise wird auch [[admin:ghostscript|Ghostscript]] verwendet.
Damit unoconv funktioniert, muss es am Server installiert sein (ca. 500MB):
''apt-get install unoconv''
Zusätzlich muss der unoconv Listener am Server laufen.
Um den Listener zu starten, gibt es verschiedene Wege:
==== MANUELL ====
Mittels einem einfachen ''&'' am Ende des Befehls kann der Prozess geforkt werden. Das Problem bei dieser Methode ist, dass wenn das System neu gestartet wird, oder der Prozess durch einen Fehler beendet wird, der Befehl jedes mal erneut ausgeführt werden muss.\\
\\
Daher wird empfohlen, den Prozess über ein Init-System(SystemD, Upstart, SysVinit) starten zu lassen\\
\\
unoconv --listener &
oder\\
unoconv -l &
==== UPSTART ====
Nur bis einschließlich Ubuntu 14.04!\\
Folgende versionen verwenden systemd.\\
Datei [[https://github.com/FH-Complete/FHC-Core/blob/master/system/services/upstart/unoconv.conf|unoconv.conf]] nach ''/etc/init/'' kopieren und gegebenenfalls anpassen.
''setuid'' gibt den Usernamen an\\
\\
''# initctl reload-configuration'' ausführen, um die neue konfiguration zu laden\\
''# start unoconv'' um den Dienst zu starten\\
''# status unoconv'' um den Status abzufragen\\
Das zugehörige Log befindet sich in ''/var/log/upstart/unoconv.log''
==== SYSTEMD ====
Verwenden die meisten neueren Distributionen.\\
Auch Ubuntu seit 14.10.\\
Datei [[https://github.com/FH-Complete/FHC-Core/blob/master/system/services/systemd/unoconv%40.service|unoconv@.service]] nach ''/etc/systemd/system/'' kopieren.
\\
''# systemctl daemon-reload'' ausführen, um die neue konfiguration zu laden\\
''# systemctl enable unoconv@[USERNAME]'' um den Dienst beim Booten zu aktivieren\\
''# systemctl start unoconv@[USERNAME]'' um den Dienst zu starten\\
''# systemctl status unoconv@[USERNAME]'' um den Status und das Log abzufragen\\
\\
Näheres gibt es unter [[admin:systemd|Systemd]].
===== Schriften =====
Da die PDF Dokumente am Server generiert werden, müssen die benötigten Schriftarten auch am Server installiert sein.
==== Arial / Times New Roman / Courier ====
Microsoft Font Pack Installieren
enthält folgende Schriften:
* Andale Mono
* Arial Black
* Arial (Bold, Italic, Bold Italic)
* Comic Sans MS (Bold)
* Courier New (Bold, Italic, Bold Italic)
* Georgia (Bold, Italic, Bold Italic)
* Impact
* Times New Roman (Bold, Italic, Bold Italic)
* Trebuchet (Bold, Italic, Bold Italic)
* Verdana (Bold, Italic, Bold Italic)
* Webdings
Die Microsoft Fonts befinden sich im Contrib Zweig und müssen zuerst zur /etc/apt/sources.list hinzugefügt werden:
deb http://ftp.at.debian.org/debian/ jessie contrib
sudo apt-get install ttf-mscorefonts-installer
fc-cache -v
==== Tahoma ====
Die Schrift Tahoma ist in dem Font-Pack nicht enthalten. Diese kann wie folgt installiert werden:
apt-get install cabextract
wget https://master.dl.sourceforge.net/project/corefonts/OldFiles/IELPKTH.CAB
cabextract -F 'tahoma*ttf' IELPKTH.CAB
mkdir -p /usr/share/fonts/truetype/msttcorefonts/
mv -f tahoma*ttf /usr/share/fonts/truetype/msttcorefonts/
chmod 644 /usr/share/fonts/truetype/msttcorefonts/tahoma*
fc-cache -v
rm -f IELPKTH.CAB
==== Schriftarten im .ttf Format====
Schriften die im .ttf Format vorhanden sind können in den Ordner /usr/share/fonts/ kopiert werden.
Mit dem Befehl
fc-cache -fv
muss dann der Font Cache erneuert werden damit die neuen Schriften erkannt werden.
Damit unoconv die neue Schriftart beim Erstellen der PDFs auch wirklich verwendet, muss nach der installation der Schrift, der unoconv listener neu gestartet werden.
(Dabei müssen der unoconv listener und alle soffice prozesse beendet werden)
\\