Installation via Docker
Beschreibung
Kimai via Docker mit https via Letsencrypt.
Installation
Vorbereitung
Sollte Apparmor enabled sein, wie das bei hetzner der Fall ist dann noch eben die Apparmor Pakete installieren
apt-get install apparmor apparmor-utils curl docker.io docker-compose
Als erstes erstellen wir unsere Verzeichnisse
mkdir -p /root/kimai/mariadb
mkdir -p /root/kimai/data
mkdir -p /root/kimai/plugins
Nun erstellen wir im Verzeichnis /root/kimai eine neue Datei namens .env
nano /root/kimai/.env
Inhalt:
# MySQL Credentials
MYSQL_ROOT_PASSWORD=12345678
MYSQL_USER=kimai
MYSQL_PASSWORD=1234567890
MYSQL_DATABASE=kimai
# Volume directories
MARIADB_VOLUME_DIR=/root/kimai/mariadb
DATA_VOLUME_DIR=/root/kimai/data
Docker-compose Datei erstellen
nano /root/kimai/docker-compose.yml
Inhalt
ersion: '3.3'
services:
mariadb:
image: mariadb:latest
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
volumes:
- ${MARIADB_VOLUME_DIR}:/var/lib/mysql
kimai:
image: kimai/kimai2:apache
restart: unless-stopped
environment:
- DATABASE_URL=mysql://${MYSQL_USER}:${MYSQL_PASSWORD}@mariadb/${MYSQL_DATABASE}
volumes:
- ${DATA_VOLUME_DIR}:/opt/kimai/var
- ./plugins:/opt/kimai/var/plugins
caddy:
image: caddy:latest
container_name: caddy-reverse-proxy
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy_data:/data
- ./caddy_config:/config
restart: unless-stopped
Nun Caddyfile erstellen
nano /root/kimai/Caddyfile
Inhalt
zeit.example.tld {
reverse_proxy http://kimai:8001
tls info@example.tld {
#ca https://acme-staging-v02.api.letsencrypt.org/directory
}
}
Nun sicher stellen das die ports 80 und 443 auch über die Domain auf den Server erreichbar sind.
hier ein kleines Script das auf den port 80 lauscht um dies zu testen
nano /root/kimai/testeweb.sh
Inhalt
#!/bin/bash
# Funktion, die aufgerufen wird, wenn das Skript ein SIGINT-Signal (Ctrl+C) empfängt
cleanup() {
echo "Server wird beendet..."
exit 0
}
# Trap für das SIGINT-Signal einrichten
trap cleanup SIGINT
# Endlosschleife für den Server
while true; do
# Listen on port 80
{ echo -ne "HTTP/1.1 200 OK\r\nContent-Length: $(echo -n "Hello, World!" | wc -c)\r\n\r\nHello, World!"; } | nc -l -p 80 -q 1
done
Danach ausführbar machen
chmod +x /root/kimai/testeweb.sh
nun das Script starten, kann mit strg+c wieder abgebrochen werden.
Nun kann getestet werden ob Firewall/Portforwarding richtig funktioniert, idem in einem Webbrowser die public ip aufegrufen wird.
Es muss eine hello World Seite zurück gegben werden.
Container Starten
Ins kimai Verzeichnis gehen
cd /root/kimai
Nun den Conatiner starten
docker-compose up -d
Benutzer anlegen
Die Rollen
| Role name | Description |
|---|---|
| User | Normal user can track their working times, see basic reports and change their own preferences. Technical name: ROLE_USER |
| Teamlead | Manages teams with permissions for invoices and access to all team timesheets. Technical name: ROLE_TEAMLEAD |
| Administrator | Can manage all content and timesheet related data, but lack user administration and system privileges. Technical name: ROLE_ADMIN |
| System-Admin | Has permissions to manage everything in Kimai, from content to timesheets to users, plugins and system configurations. Technical name: ROLE_SUPER_ADMIN |
die container id mit docker ps herausfinden
docker exec -ti <containerid> \
/opt/kimai/bin/console kimai:user:create <username> <emailadresse> ROLE_SUPER_ADMIN
Beispiel:
docker exec -ti 32da986c57c2 \
/opt/kimai/bin/console kimai:user:create admin admin@example.com ROLE_SUPER_ADMIN
Dann kann ein Kennwort vergeben werden. Muss mindestens 8 Zeichen haben
Benutzer Passwort ändern
die container id mit docker ps herausfinden
docker exec -ti <containerid> \
/opt/kimai/bin/console kimai:user:password <username>
Beispiel:
docker exec -ti 32da986c57c2 \
/opt/kimai/bin/console kimai:user:password admin
Dann kann ein neues Kennwort vergeben werden. Muss mindestens 8 Zeichen haben