Install kimai (hour registration) on RPI running Arch linux

I always kept my work hour registration (how much time for what project) in my Android app (My work clock). After switching to IOS I have looked for a comparable app, but could not find a right one. So I installed the open source Kima hour registration on my Raspberry Pi3 running arch linux.

Install kimai

cd /srv/http/
git clone -b 1.16.9 --depth 1 https://github.com/kevinpapst/kimai2.git
cd kimai2/
composer install --no-dev --optimize-autoloader

When you are asked for a database name enter: kimaidb

Edit .env file: vim .env change DBURL to: DATABASE_URL=mysql://kimai:kimai@127.0.0.1:3306/kimaidb?charset=utf8&serverVersion=mariadb-10.5.8

Now execute follwoing commands:

bin/console kimai:install -n
sudo systemctl restart nginx
cd /etc/nginx/conf.d/
sudo vim kimai.conf
sudo systemctl restart nginx
cd /srv/http/
sudo chown -R http:http kimai2/
cd kimai2/
sudo bin/console kimai:user:password "$USER, $PASSW"
sudo bin/console kimai:user:create $USER $EMAIL ROLE_SUPER_ADMIN
cd var/log/
cd var
sudo chmod o+w sessions/

Backup your Kimai database

Of course you want to regulary backup your kimai database; you can do this as follows:

mysqldump --single-transaction -u kimai -p -h 127.0.0.1 kimaidb > ~/kimaidb-`date +%F_%H-%M`.sql

You must enter the corresponding password.

Of course you want the backups to be made via a script that is called by the cron. Create following script:

#!/bin/bash

export CONNECTION_CONFIG=/home/baswi/.kimai2.cnf
export KIMAI_DIR=/srv/http/kimai2
export BACKUP_DIR=/home/baswi/backups/kimai

export DATE=`date +%F_%H-%M`
export BACKUP_STORAGE_DIR=$BACKUP_DIR/storage
export BACKUP_TMP_DIR=$BACKUP_DIR/temp/$DATE

mkdir -p $BACKUP_STORAGE_DIR
mkdir -p $BACKUP_TMP_DIR
mkdir -p $BACKUP_TMP_DIR/var/data/
mkdir -p $BACKUP_TMP_DIR/var/plugins/

mysqldump --defaults-file=$CONNECTION_CONFIG --single-transaction --no-tablespaces -u kimai -h 127.0.0.1 kimaidb > $BACKUP_TMP_DIR/kimai2-$DATE.sql

cp $KIMAI_DIR/.env $BACKUP_TMP_DIR/
cp -R $KIMAI_DIR/var/data/* $BACKUP_TMP_DIR/var/data/
cp -R $KIMAI_DIR/var/plugins/* $BACKUP_TMP_DIR/var/plugins/

if [[ -d "$KIMAI_DIR/var/invoices/" ]];
then
          mkdir -p $BACKUP_TMP_DIR/var/invoices/
           cp -R $KIMAI_DIR/var/invoices/* $BACKUP_TMP_DIR/var/invoices/
fi

if [[ -d "$KIMAI_DIR/var/export/" ]];
then
          mkdir -p $BACKUP_TMP_DIR/var/export/
           cp -R $KIMAI_DIR/var/export/* $BACKUP_TMP_DIR/var/export/
fi

pushd $BACKUP_TMP_DIR
tar -czf $BACKUP_STORAGE_DIR/$DATE.tgz * .env
//clean up
cd ..
rm -rf $DATE //remove the temp subdir
//delete backups older than 60 days
find $BACKUP_STORAGE_DIR/* -atime +60 -type f -delete
popd

Add the script to the cron, for instance:

52 8,18 * * * /home/user/scripts/backup_kimai.bash To backup the Kima database and other important files, two times a day.

Written on January 1, 2022