Kimai Zeiterfassung

Installtion

Installtion

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

















Installtion

Mobile App

Beschreibung:

Für Kimai gibt es auch eine Mobile App.

Aus dem AppStore die Mobile App installieren:

Benutzer freischalten im Kimai Backend.

Damit sich der Benutzer anmelden kann, muss in den Benutzereinstellungen ein APi Passwort (Nicht Token) hinterlegt werden.
Beim Passwort kommt der Hinweis das diese methode veraltet ist, aber die Mobil App nutzt zur zeit nur Passwort.

Dazu gehen wir Auf System -> Benutzer

Auswahl_1229.png

Dann den benutzer anklicken, für den wir das API Passwort erstellen wollen

Auswahl_1230.pngDort dann oben auf bearbeiten klicken und API Zugang auswählen

Menü_014.png

Nun das neue Kennwort setzten und speichern.


Auswahl_1231.png
Einloggen auf der Mobile App

Create Workspace anklicken.

Daten ausfüllen.

Workspace Name, zum Beispiel Firmenname.
Server URL : die Kimai Seite https://vorweg schreiben
Die APP Funktioniert nur über https

Email / Username : den Benutzernamen eintragen
Password: Das API Kennwort

Nun auf Create a new Workspace klicken.

Screenshot_2024-07-08-13-00-22-26_f1c6ba619212653817d1dec5c2916048.jpg

Und eingeloggt:

Screenshot_2024-07-08-13-02-40-71_f1c6ba619212653817d1dec5c2916048.jpg

Kimai Terminal

Kimai Terminal

Einleitung und Teile Liste

Beschreibung:

Ein KIMAi terminal Kostengüntig mit nem SONOFF Switch.
Günstiger bekommt man es nicht zusammen.


Teile Liste:

SONOFF Switch (SONOFFT4EU1C, t4eu1c ) SonOff Tooch Store Link

Wenn man kein SONOFF kaufen möchte kann man auch einfach den Microcontroller nutzen der WLAN schon drauf hat:
AZDelivery-NodeMCU-ESP8266-ESP-12E-Development
ich find den SONOFF aber Praktisch, alles schon drin in einem Gehäuse

RFID Plate mit 5 Dongle : 5er Pack Rabatt (Sonst kostent einer schon 7 EURO ohne Dongle) RFID-Kit-Arduino-Raspberry-SPI-Schnittstelle

OLDED Display
(APKLVSR 3PCS 0,96 Zoll OLED Display I2C 128 x 64 Pixel I2C Display Modul, (Gelb und Blau)) :
Link : APKLVSR-Display-kompatibel-Arduino-Raspberry

UART Interface (Wird nur für SONOFF gebraucht, das NodeMCU hat einen USB Anschluss : UART-Wandler-Adapter-serielle-Schnittstelle-Converter-Anschlussleitung

100 Dongle zum Nachbestellen extrem Klasse Preis : Chips-125KHz-Transponder 100 Stück 

Plugin Invoice Bundle

Plugin Invoice Bundle

Installation invoiceBundle

Beschreibung:

Ein Plugin mit dem Gleichzeitig Stundenzettel generiert und Rechnungen erstellt werden können.
Mich Persönlich interessieren nur die Stundenzettel

Da ich Kimai im Docker betreibe ist die Installation an dem Docker setup Angelehnt

Vorrausetzungen:

apt install unzip

Installation bei Kimai Docker:

In Das Verzeichnis Plugins die Zip Datei exhtrahieren. InvoiceBundle-2.2.0.zip
Dazu per scp die Datei auf den Server kopieren, versionsnummer kann natürlich varieren

scp InvoiceBundle-2.2.0.zip root@zeit.example.tld:/root/kimai

Nun entpacken

cd root/kimai
unzip InvoiceBundle-2.2.0.zip

ls Ausgabe:

Nun haben Wir ein verzeichnis InvoiceBundle-2.2.0

ls
caddy_config  caddy_data  Caddyfile  certbot-etc  certbot-log  certbot-www  data  docker-compose.yml  InvoiceBundle-2.2.0  InvoiceBundle-2.2.0.zip  mariadb  plugins

Dieses umbenennen und verschieben

mv InvoiceBundle-2.2.0 plugins/InvoiceBundle

Nun muss im InvoiceBundle Verzeichnis der inhsalt so aussehen

ls Ausgabe:

ls
CHANGELOG.md  composer.json  Controller  DependencyInjection  EventSubscriber  Form  Invoice  InvoiceBundle.php  LICENSE  phpstan.neon	README.md  Resources  Tests

Nun nur noch den Cache leeren, dazu im kima Container einloggen

docker-compose exec kimai /opt/kimai/bin/console kimai:reload --env=prod

Ausgabe bei mir mit Fehler zu alt. :

root@debian-kimai-4gb-nbg1-2:~/kimai# docker-compose exec kimai /opt/kimai/bin/console kimai:reload --env=prod

In Kernel.php line 115:
                                                                                                                                                       
  Bundle "InvoiceBundle" requires minimum Kimai version 22700, but yours is lower: 2.18.0 (21800). Please update Kimai or use a lower Plugin version.
Also kimai aktualiseren
docker pull kimai/kimai2:apache
docker-compose up -d
docker-compose exec kimai /opt/kimai/bin/console kimai:reload --env=prod
docker-compose down
docker-compose up -d
docker-compose exec kimai /opt/kimai/bin/console assets:install
docker-compose exec kimai /opt/kimai/bin/console kimai:reload --env=prod

Nun Verzeichnis Berechtigungen setzten, Dazu in den Container einloggen

docker-compose exec kimai /bin/bash

Nun ausführen

cd /opt/kimai/var
chown -R :www-data .
chmod -R g+r .
chmod -R g+rw /opt/kimai/var/

Nun Einstellungen in Kimai:

Unter System -> Einstellungen

grafik.png

Nun runter scrollen bis Invoice
Dort Rechungsnummerformat Sprache und template für den Stundenzettel Rechung einstellen

grafik.png

Plugin Invoice Bundle

Einrichtung Invoice Bundle

Beschreibung:

nach dem das Plugin installiert.
Das format eingerichtet ist.

geht nun weiter

Eigene Firmenvorlage einrichten:

Unter Rechnungen -> Rechungsvorlagen -> Auf erstellen klicken

grafik.png

Rechnung / Stundenzettel erstellen:

Nun Auf Rechnungen -> Rechnung erstellen klicken und Zeitraum Kunde Projekt auswählen. Will man alle projekte, das Projekt wieder entfernen.
Exportier nein und auf suchen klicken

grafik.png

Nun erscheint eine Liste mit den gefunden Einträgen.
Durch klick auf Speichern werden alle Eintrage auf eien Rechung / Leistungsnachweis gepackt.
Möchte man das getrennt haben. Einfach nach mehren Datumsbereichen suchen und mehrere Rechungen abspeichern.
Über die Buttons Vorschau kann man sich die Rechnung anschauen und speichern dann absenden.

grafik.png
Nun kann Unter Rechnungen -> rechnungshistorie dier Stundenzettel downgeloaded werden

grafik.png

Fertig