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.
- Lege folgende Ordner an:
/srv/projectfacts/srv/projectfacts/logs/srv/projectfacts/logs/tomcat/srv/projectfacts/webapp/mnt/userfiles/<Kundenname>
- Kopiere die
deploy-war-docker.shund dieprojectfacts-20XX.X.XX.warnach/srv/projectfactsund entpacke:
Prüfe vorher die Pfade in derchmod +x deploy-war-docker.sh ./deploy-war-docker.shdeploy-war-docker.sh. - Kopiere die
userfiles.tar.gz2nach/mnt/userfiles/<Kundenname>und entpacke sie mittar -xf userfiles.tar.gz2. - 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
volumesden Pfad/mnt/userfiles/<Kundenname>an. - Passe ggf.
TZ: "Europe/Berlin"an deine Zeitzone an. - Den Arbeitsspeicher steuerst du über
-XmxinCATALINA_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/projectfactsausgefü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 nicht | In 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 abschotten | Die 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 aus | tmpfs und innodb_tmpdir einrichten (siehe Update auf 2024.1). |
| Den Container neu aufbauen | docker-compose up --no-start und anschließend docker-compose start. |
Verwandte Themen
- So ist teamspace technisch aufgebaut Installation Konzept
- Apache als Reverse Proxy einrichten Installation Konfiguration
- Versionsspezifische Update-Hinweise Installation Referenz