Bare Metal

Sollten Sie sich für die Bare Metal Lösung entschieden haben finden Sie hier alle wichtigen Informationen zur Installation der notwendigen Komponenten für Troi unter Ubuntu. Der Betrieb der Troi Software auf eigener Infrastruktur benötigt grundlegende Linux Kenntnisse, insbesondere im Umgang mit der Konsole.

Anforderungen

Die Bare Metal Variante setzt Ubuntu 18.04 Headless LTS als Basissystem voraus. Troi läuft in der Theorie auch unter anderen *Nix Systemen, aber nur Ubuntu wird offiziell als Bare Metal System unterstützt.

Hardware

  • OS: Linux (Bevorzugt Ubuntu 18.04 LTS Headless)
  • Prozessor: mind. 2 VCPU's 2,4 GHz
  • RAM: mind. 4 GB RAM

  • HD: mind. 25 GB (empfohlen 2 HDs im Raid1-Verbund)

Step-By-Step

Sicherstellen das Ubuntu auf dem aktuellen Stand ist

Der eingesetzte Ubuntu Server sollte auf dem aktuellen Stand sein:

sudo apt update
sudo apt dist-upgrade


In einer Zeile bitte wie folgt:

sudo apt update && sudo apt dist-upgrade

Installation der notwendigen Pakete

Bitte installieren Sie nicht das Standard LAMP Paket bei der Ubuntu Server Edition sondern folgende Pakete:

sudo apt install openjdk-8-jre-headless nginx-light php7.2-fpm php7.2-curl php7.2-gd php7.2-cli php7.2-mysql php7.2-mbstring php7.2-zip php7.2-sqlite3 php7.2-bcmath php7.2-xml php7.2-intl php-redis redis-server


Installation des Datenbankservers: Hier kann zwischen MySQL 5.7 oder MariaDB (mind. 10.3) gewählt werden. In unserem Beispiel hier setzen wir auf MySQL:

sudo apt install mysql-server mysql-client

FOPServer

Der FOPServer kann über folgenden Link heruntergeladen werden: https://dist.troi.software/fopserver/fopserver-v2.6.0.tar.gz

Download und Installation per Shell:

cd /tmp
wget https://dist.troi.software/fopserver/fopserver-v2.6.0.tar.gz
mkdir -p /opt/troi /var/troi/fopserver/log
tar -C /opt/troi -xzf fopserver-v2.6.0.tar.gz
rm /tmp/fopserver-v2.6.0.tar.gz
chown -R www-data:www-data /var/troi /opt/troi


Anschließend wird der Dienst noch bei Systemd registriert: /etc/systemd/system/troi-fopserver.service

[Unit]
Description = Troi FOPServer
After = NetworkManager-wait-online.service network.target network-online.target
Wants = NetworkManager-wait-online.service network-online.target

[Service]
ExecStart = /bin/sh -c '/usr/bin/java -jar /opt/troi/fopserver/fopserver.jar >> /var/troi/fopserver/log/fopserver.log 2>&1'
Restart = on-abort
User = www-data
StartLimitInterval = 60
StartLimitBurst = 10

[Install]
WantedBy = multi-user.target
systemctl enable troi-fopserver.service
systemctl start troi-fopserver.service


Logrorate kümmert sich um die anfallenden Logs: /etc/logrotate.d/troi-fopserver

/var/troi/fopserver/log/fopserver.log {
        rotate 12
        daily
        copytruncate
        missingok
        notifempty
        compress
        delaycompress
}

JobScheduler

Der JobScheduler kann über folgenden Link heruntergeladen werden: https://dist.troi.software/jobscheduler/jobscheduler-linux.tar.gz

Download und Installation per Shell:

cd /tmp
wget https://dist.troi.software/jobscheduler/jobscheduler-linux.tar.gz
mkdir -p /opt/troi /var/troi/jobscheduler/log
tar -C /opt/troi -xzf jobscheduler-linux.tar.gz
rm /tmp/jobscheduler-linux.tar.gz
ln -s /var/troi/jobscheduler/log/ /opt/troi/jobscheduler/log
chown -R www-data:www-data /var/troi /opt/troi


Anschließend wird der Dienst noch bei Systemd registriert: /etc/systemd/system/troi-jobscheduler.service

[Unit]
Description = Troi Jobscheduler

[Service]
User = www-data
Group = www-data
Type = simple
ExecStart = /opt/troi/jobscheduler/jobscheduler
RestartSec = 10s
Restart = on-failure
KillMode = process

[Install]
WantedBy = multi-user.target
systemctl enable troi-jobscheduler.service
systemctl start troi-jobscheduler.service


Logrorate kümmert sich um die anfallenden Logs: /etc/logrotate.d/troi-jobscheduler

/var/troi/jobscheduler/log/general.log {
        rotate 12
        daily
        copytruncate
        missingok
        notifempty
        compress
        delaycompress
}
/var/troi/jobscheduler/log/error.log {
        rotate 12
        daily
        copytruncate
        missingok
        notifempty
        compress
        delaycompress
}


Konfiguration der Dienste

Bevor die Installation von Troi selbst durchgeführt werden kann, ist die Konfiguration der Dienste notwendig.


MySQL / MariaDB

Der Datenbankserver benötigt folgende Konfiguration (es empfiehlt sich, die Konfiguration in eine eigene Konfigurationsdatei abzulegen (z.B. /etc/mysql/mysql.conf.d/troi.cnf) um Änderungen bei Systemupdates vorzubeugen) :

[mysqld]
explicit_defaults_for_timestamp = Off
sql_mode =
innodb_strict_mode = 0


MariaDB ab Version 10.4 benötigt eine zusätzliche Änderung, um die Performance unter Troi zu verbessern:

[mysqld]
optimizer_switch=rowid_filter=off

Performance Probleme

Unter MariaDB 10.3 sollte der Parameter `join_buffer_size` nicht angepasst werden, da dieser die Performance stark beeinträchtigen kann.

PHP

Es empfiehlt sich, die Konfiguration in eine eigene Konfigurationsdatei abzulegen (z.B. /etc/php/7.2/fpm/conf.d/99-troi.ini) um Änderungen bei Systemupdates vorzubeugen.

memory_limit = 1G
upload_max_filesize = 20M
max_execution_time = 120
cgi.fix_pathinfo = 0
max_input_vars = 16000
post_max_size = 21M
display_errors = Off
display_startup_errors = Off
allow_url_fopen = On
error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR

PHP-FPM

Es empfiehlt sich, die Konfiguration in eine eigene Konfigurationsdatei abzulegen (z.B. /etc/php/7.2/fpm/pool.d/troi.conf) um Änderungen bei Systemupdates vorzubeugen.

[troi]
user = www-data
group = www-data
listen = /var/run/php-fpm-troi.sock
listen.owner = www-data
listen.group = www-data
pm = ondemand
pm.max_children = 75
pm.process_idle_timeout = 10s
pm.max_requests = 500
catch_workers_output = yes
chdir = /var/www
php_admin_value[openssl.cafile] = /etc/ssl/certs/ca-certificates.crt
php_admin_value[openssl.capath] = /etc/ssl/certs
php_flag[display_errors] = off
php_admin_value[error_reporting] = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR
listen.backlog = 5000

Nginx

Es empfiehlt sich, die Konfiguration in eine eigene Konfigurationsdatei abzulegen (z.B. /etc/nginx/sites-available/troi.conf) um Änderungen bei Systemupdates vorzubeugen.

server {
	listen 80;

	server_name troi.lan;
	root /var/www/troi/public;

	index index.html index.htm index.php;

	location = /config {
		return 301 /;
	}

	location = /config/ {
		return 301 /;
	}

	index index.html index.htm index.php;

	rewrite_log  on;

	## Frontend
	rewrite ^/app(.*)$ /dist/index.html?$1 last;

	## APIv1
	location /api/v1/rest {
		set $rewrite_real_path "/api/v1/rest/troi.php?auth=$http_authorization&$query_string";
		try_files $uri /index.php$is_args$args;
	}

	## APIv2
	location /api/v2/rest {
		set $rewrite_real_path "/api/v2/rest/troi.php?auth=$http_authorization&$query_string";
		try_files $uri /index.php$is_args$args;
	}

	## Caldav
	location /caldav {
		set $rewrite_real_path "/caldav/index.php?auth=$http_authorization&$query_string";
		try_files $uri /index.php$is_args$args;
	}

	## Carddav
	location /carddav {
		set $rewrite_real_path "/carddav/addressbookserver.php?$query_string";
		try_files $uri /index.php$is_args$args;
	}

	## frontend assets
	rewrite ^/assets/(.*)$ /dist/assets/$1 last;

	location / {
		# try to serve file directly, fallback to index.php
		try_files $uri /index.php$is_args$args;
	}

	# assets, media
	location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
		expires 7d;
		access_log off;
	}

	# svg, fonts
	location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
		add_header Access-Control-Allow-Origin "*";
		expires 7d;
		access_log off;
	}

	# robots.txt
	location = /robots.txt {
		allow all;
		access_log off;
		add_header  Content-Type  text/plain;
		return 200 "User-agent: *\nDisallow: /\n";
	}

	# deny dot-files
	location ~ /\. {
		deny all;
		access_log off;
		log_not_found off;
	}

	location ~ ^/(index\.php(/|$)|site/includes/roundcubemail/index\.php(/|$)|site/includes/roundcubemail/(/|$)) {
		fastcgi_split_path_info ^(.+\.php)(/.*)$;
		if (!-f $document_root$fastcgi_script_name) {
			return 404;
		}
		fastcgi_pass unix:/var/run/php-fpm-troi.sock;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
		fastcgi_param DOCUMENT_ROOT $realpath_root;
		fastcgi_param REWRITE_REAL_PATH $rewrite_real_path;
		include fastcgi_params;
		fastcgi_buffer_size 128k;
		fastcgi_buffers 256 16k;
		fastcgi_busy_buffers_size 256k;
		fastcgi_temp_file_write_size 256k;
		fastcgi_read_timeout 3600;
	}
}

Vorbereitungen

Nach dem alle Dienste konfiguriert und neu gestartet wurden, gilt es die Datenbank sowie die Benutzer vorzubereiten.

In diesem Beispiel lautet das Passwort für den MySQL Troi Benutzer "nopass". Bitte ändern Sie das Kennwort anschließend auf Ihrer Seite.

CREATE USER 'troi'@'%' IDENTIFIED BY 'nopass';
GRANT USAGE ON * . * TO 'troi'@'%' IDENTIFIED BY 'nopass' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
GRANT ALL PRIVILEGES ON `troi\_%` . * TO 'troi'@'%';
CREATE DATABASE troi_live CHARACTER SET utf8 COLLATE utf8_general_ci;

Installation

Die Troi Installationsdaten erhalten Sie vom Troi Team. Diese bestehen aus 2 Komponenten: Datenbank und Applikation inklusive Konfiguration und Storage (Alle hochgeladenen Dateien von Troi sind hier vorzufinden).

Datenbank

Die Troi Datenbank wird als MySQL Datenbankdump per GZIP Archive ausgeliefert. Der Import wird wie folgt durchgeführt:

zcat troi.sql.gz | mysql -u troi -p troi_live --default-character-set=utf8

MySQL Import Fehler

Eventuell tritt ein Fehler beim Import auf: ERROR 1227 (42000) at line *: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

Dieser kann ignoriert werden.

Applikation

Die Software selbst wird in das zuvor in Nginx festgelegte übergeordnete Webverzeichnis gelegt, bedeutet bei unserem Beispiel also /var/www/troi. Vergessen Sie bitte nicht die Rechte der Dateien / Ordner anzupassen.

Folgende Konfiguration muss angepasst werden:


Datenbank- / Cacheeinstellungen:

.env

Sicherung

In einem Produktivbetrieb ist die Datensicherung von größter Bedeutung. Folgende Punkte gibt es bei der Sicherung zu beachten:

  • Sicherung der Datenbank
  • Sicherung der Konfiguration (troi/config)
  • Sicherung der Dateianhänge (troi/storage)
© 2024 Troi GmbH

Informationspflichten • Datenschutz • Impressum