Zum Hauptinhalt springen
Hilfecenter

teamspace mit Docker installieren

teamspace/projectfacts unter Linux mit Docker betreiben: System vorbereiten, MariaDB mit tmpfs einrichten, Dockerfile und docker-compose.yml, web.xml/context.xml, iptables absichern und den Container starten.

Voraussetzungen

  • Root-Rechte auf einem Linux-Server (die Anleitung wurde unter Debian erstellt)
  • Ein teamspace-classic-Account für die Installationsdateien
  • Eine Datenbankvorlage (Dump) – auf Anfrage über teamspace-classic

Bei der Docker-Installation laufen Tomcat und Java im Container, während MariaDB, die Anwendung und die Userfiles auf dem Host bleiben (siehe Systemarchitektur). Diese Anleitung wurde unter Debian erstellt; bei anderen Distributionen können einzelne Schritte abweichen.

In der Anleitung wird der Name projectfacts verwendet. Hast du teamspace, ersetze ihn.

1. System vorbereiten

Benutzer anlegen:

groupadd -g 161 projectfacts && useradd -r -u 161 -g projectfacts projectfacts

Benötigte Standardpakete:

apt update && apt upgrade -y && apt install vim unzip htop libtcnative-1 bash-completion net-tools iptables-persistent -y

2. Docker installieren

Abhängigkeiten installieren:

apt update && apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common libxml-xpath-perl zip mariadb-server apache2 certbot

Docker über das Repository installieren:

apt install docker.io docker-compose

Alternativ kannst du Docker manuell nach der offiziellen Docker-Anleitung und Docker Compose nach dieser Anleitung installieren.

3. MariaDB einrichten

Datenbankbenutzer: projectfacts oder teamspace · Datenbankname: entsprechend · Passwort: frei wählbar · Host-Adresse: 172.17.0.%

Docker legt ein 172.17.0.0/16-Netzwerk an. Die Datenbank ist für den Container unter 172.17.0.1 erreichbar. Für den Datenbankimport benötigst du eine Datenbankvorlage – melde dich dafür bei uns.

tmpfs anlegen

mkdir -p /var/log/mysql/tmp

Damit das tmpfs reboot-fest ist, ergänze /etc/fstab:

tmpfs   /var/log/mysql/tmp      tmpfs   defaults,size=3G        0       0

Mounten und prüfen:

mount -a

Prüfe anschließend mit df -h, ob das tmpfs-Verzeichnis gemountet ist.

innodb_tmpdir anlegen

mkdir -p /mnt/userfiles/tmp && chmod 1777 /mnt/userfiles/tmp

MariaDB anpassen

Importiere die Zeitzone:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql

Lege /etc/mysql/mariadb.conf.d/51-projectfacts.cnf an:

[mysqld]
bind-address = 0.0.0.0
skip-name-resolve

# projectfacts Optimierungen
default-time-zone       = Europe/Berlin
lower_case_table_names  = 1
innodb_buffer_pool_size = 1G
max_heap_table_size     = 512M
tmp_table_size          = 512M
innodb_log_file_size    = 256M
group_concat_max_len    = 4096
character-set-server    = utf8mb4
collation-server        = utf8mb4_unicode_ci
tmpdir                  = /var/log/mysql/tmp
innodb_tmpdir           = /mnt/userfiles/tmp

sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

# Optimierung für MariaDB 10.4+
#optimizer_switch        = 'rowid_filter=off'
#query_cache_size        = 0
#query_cache_type        = 0

Starte MariaDB neu:

systemctl restart mariadb

Die Zeitzone der Datenbank muss mit dem Betriebssystem übereinstimmen. Unter Linux prüfst du sie mit cat /etc/timezone.

4. projectfacts/teamspace einrichten

Ab Tomcat-Version 9.0.92 oder höher muss projectfacts/teamspace mindestens auf 2024.2.68 bzw. 2024.1.72 aktualisiert sein.

  1. Lege folgende Ordner an:
    • /srv/projectfacts
    • /srv/projectfacts/logs
    • /srv/projectfacts/logs/tomcat
    • /srv/projectfacts/webapp
    • /mnt/userfiles/<Kundenname>
  2. Kopiere die deploy-war-docker.sh und die projectfacts-20XX.X.XX.war nach /srv/projectfacts und entpacke:
    chmod +x deploy-war-docker.sh
    ./deploy-war-docker.sh
    Prüfe vorher die Pfade in der deploy-war-docker.sh.
  3. Kopiere die userfiles.tar.gz2 nach /mnt/userfiles/<Kundenname> und entpacke sie mit tar -xf userfiles.tar.gz2.
  4. Setze die Rechte für das Log-Verzeichnis:
    chown projectfacts:projectfacts /srv/projectfacts/logs/tomcat/

Dockerfile anlegen

Lege /srv/projectfacts/Dockerfile an – es wird zum Erstellen des Images benötigt:

FROM tomcat:9-jdk17-temurin-focal

RUN groupadd -g 161 projectfacts && \
    useradd -r -u 161 -g projectfacts projectfacts && \
    rm -r /usr/local/tomcat/webapps && mkdir /usr/local/tomcat/webapps && \
    chown -R projectfacts:projectfacts "/usr/local/tomcat"

USER projectfacts

Image erstellen:

docker build -t projectfacts:jdk17 .

web.xml anpassen

Passe in /srv/projectfacts/webapp/WEB-INF/web.xml folgende Werte an. Damit Mailversand und -empfang funktionieren, darf bei timer.mailfetcher keine 0 stehen (Wert in Sekunden; 0 deaktiviert den Mailverkehr):

<context-param>
   <param-name>timer.mailfetcher</param-name>
   <param-value>30</param-value>
</context-param>

mail.positive_mail_list auf .* setzen, damit der Mailversand nicht eingeschränkt wird:

<context-param>
   <param-name>mail.positive_mail_list</param-name>
   <param-value>.*</param-value>
</context-param>

server.url (und webdav.url) auf deine Domain setzen:

<context-param>
   <param-name>server.url</param-name>
   <param-value>https://projectfacts.mycompany.de</param-value>
</context-param>

<context-param>
   <param-name>webdav.url</param-name>
   <param-value>https://projectfacts.mycompany.de</param-value>
</context-param>

Unter oauth2Gateway.url die URL für die OAuth-2.0-Umleitung angeben (bei projectfacts https://www.projectfacts.de, bei teamspace https://www.teamspace.de):

<context-param>
    <param-name>oauth2Gateway.url</param-name>
    <param-value>https://www.projectfacts.de</param-value>
</context-param>

Den PDF-Verarbeitungsdienst trägst du nur ein, wenn du ihn nutzt (siehe PDF-Verarbeitungsdienst einrichten):

<context-param>
    <param-name>pdfConvertService.url</param-name>
    <param-value></param-value>
</context-param>

context.xml anpassen

Öffne /srv/projectfacts/META-INF/context.xml und trage Benutzer, Passwort und die Datenbank-URL ein. Da Docker verwendet wird, muss als Host 172.17.0.1 (das Docker-Netzwerk) eingetragen werden – der Tomcat erreicht die MariaDB darüber:

username="projectfacts"
password="projectfacts"
url="jdbc:mysql://172.17.0.1:3306/projectfacts?useUnicode=true&useSSL=false&serverTimezone=Europe/Berlin"

Schriftart hinzufügen (Jasper-Font)

Lege die jasper-font-default-1.2.0.jar in /srv/projectfacts/webapp/WEB-INF/lib/ ab.

5. iptables anpassen

Damit die MariaDB von außen geschützt ist, werden iptables-Regeln erstellt; der Tomcat-Port 8080 wird nur für localhost erlaubt. Erlaube zuerst SSH, sonst sperrst du dich vom Server aus:

iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 172.17.0.0/16 -p tcp -m tcp --dport 3306 -j ACCEPT
iptables -A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 3306 -j DROP
iptables-save > /etc/iptables/rules.v4

6. docker-compose.yml

Lege unter /srv/projectfacts eine docker-compose.yml an:

version: '2.3'

services:
        tomcat:
                container_name: "projectfacts"
                image: projectfacts:jdk17
                logging:
                    options:
                        max-file: "5"
                        max-size: "10m"
                volumes:
                        - "/srv/projectfacts/webapp:/usr/local/tomcat/webapps/ROOT"
                        - "/srv/projectfacts/logs/tomcat:/usr/local/tomcat/logs"
                        - "/mnt/userfiles/<Kundenname>:/srv/projectfacts/userfiles"
                ports:
                        - "127.0.0.1:8080:8080"
                restart: unless-stopped
                cpus: 4
                stop_grace_period: 30s
                network_mode: bridge
                environment:
                        TZ: "Europe/Berlin"
                        CATALINA_OPTS: "-Djava.awt.headless=true -Xmx1024m -XX:ParallelGCThreads=2 -XX:ConcGCThreads=2"
  • Passe unter volumes den Pfad /mnt/userfiles/<Kundenname> an.
  • Passe ggf. TZ: "Europe/Berlin" an deine Zeitzone an.
  • Den Arbeitsspeicher steuerst du über -Xmx in CATALINA_OPTS.

Setze die Rechte für das Log-Verzeichnis:

chown projectfacts:projectfacts /srv/projectfacts/logs/tomcat

Nützliche Docker-Befehle

docker exec -it <Containername> /bin/bash   # in den Container wechseln
docker logs <Containername>                 # Logs ausgeben
docker-compose up --no-start                # Container neu erstellen, ohne zu starten
docker-compose down                         # Container löschen
docker rm <Container>                        # alternativ: Container löschen
docker-compose start                        # starten
docker-compose stop                         # stoppen
docker-compose restart                      # neu starten
docker-compose stats                        # Statistik
docker ps                                   # laufende Container
docker ps -a                                # alle Container
docker images                               # Images anzeigen
docker rmi <Image>                          # Image löschen

Die docker-compose-Befehle müssen immer im Ordner /srv/projectfacts ausgeführt werden.

7. Container das erste Mal starten

Wechsle nach /srv/projectfacts und starte:

docker-compose up -d

8. Reverse Proxy einrichten

Richte abschließend den Webserver ein: Apache oder Nginx.

Typische Fragen & Anforderungen

Du möchtest …So geht’s
Der Container erreicht die Datenbank nichtIn der context.xml als Host 172.17.0.1 eintragen und bind-address = 0.0.0.0 in der 51-projectfacts.cnf prüfen.
Die MariaDB von außen abschottenDie iptables-Regeln setzen (3306 nur für 172.17.0.0/16 und localhost).
Dem Container mehr RAM geben-Xmx in CATALINA_OPTS der docker-compose.yml erhöhen.
Beim Volltext-Index gehen die temporären Daten austmpfs und innodb_tmpdir einrichten (siehe Update auf 2024.1).
Den Container neu aufbauendocker-compose up --no-start und anschließend docker-compose start.

Verwandte Themen