Direkt zum Hauptinhalt

Installation via Docker

Beschreibung

Kimai via Docker mit https via Letsencrypt.

 

Installation

Vorbereitung

Als erstes erstellen wir unsere Verzeichnisse

mkdir -p /root/kimai/mariadb
mkdir -p /root/kimai/data

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

# Domain and email for Let's Encrypt
DOMAIN_NAME=ihredomain.de
LETSENCRYPT_EMAIL=ihre-email@beispiel.de

 

Docker-compose Datei erstellen

nano /root/kimai/docker-compose.yml

Inhalt

version: '3.8'

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:fpm-alpine-1.14-prod
    restart: unless-stopped
    environment:
      - DATABASE_URL=mysql://${MYSQL_USER}:${MYSQL_PASSWORD}@mariadb/${MYSQL_DATABASE}
    volumes:
      - ${DATA_VOLUME_DIR}:/opt/kimai/var

  webserver:
    image: nginx:alpine
    restart: unless-stopped
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ${DATA_VOLUME_DIR}:/opt/kimai/var
      - ./certbot-www:/var/www/certbot
    ports:
      - "80:80"
      - "443:443"

  certbot:
    image: certbot/certbot
    restart: unless-stopped
    volumes:
      - ./certbot-etc:/etc/letsencrypt
      - ./certbot-www:/var/www/certbot
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew --webroot --webroot-path=/var/www/certbot --email ${LETSENCRYPT_EMAIL} --agree-tos --no-eff-email --domain ${DOMAIN_NAME}; sleep 12h & wait $${!}; done;'"

volumes:
  mariadb_data:
  kimai_data:
  certbot-etc:
  certbot-www:

Nun das Init shell script erstellen was die cert Verzeichnisse und die nginx.conf erstellt.

nano /root/kimai/setup.sh

Inhalt

#!/bin/bash

# Laden der Umgebungsvariablen aus der .env-Datei
if [ -f .env ]; then
    while IFS='=' read -r key value
    do
        if [[ ! $key =~ ^\# ]] && [[ -n $key ]]; then
            export $(catkey=$value
        fi
    done < .env | xargs)
else
    echo ".env-Datei nicht gefunden!"
    exit 1
fi

# Überprüfen, ob DOMAIN_NAME gesetzt ist
if [ -z "$DOMAIN_NAME" ]; then
    echo "DOMAIN_NAME ist in der .env-Datei nicht gesetzt!"
    exit 1
fi

# Erstellen der benötigten Verzeichnisse
mkdir -p ./certbot-etc
mkdir -p ./certbot-www

# Erstellen einer Grundkonfiguration für nginx
cat << EOF > ./nginx.conf
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '\$remote_addr - \$remote_user [\$time_local] "\$request" '
                      '\$status \$body_bytes_sent "\$http_referer" '
                      '"\$http_user_agent" "\$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    # SSL Einstellungen
    ssl_certificate /etc/letsencrypt/live/${DOMAIN_NAME}/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/${DOMAIN_NAME}/privkey.pem;

    # Weitere SSL-Konfigurationen hier hinzufügen

    include /etc/nginx/conf.d/*.conf;
}
EOF

echo "Setup abgeschlossen. Bitte überprüfen und anpassen Sie die nginx.conf entsprechend."

Das script ausführbar machen

chmod +x /root/kimai/setup.sh

Docker installieren, env anpassen Webcheck und Container starten

apt install docker-compose

Nun die .env Datei wenn nicht schon geschenen, an die eigenen Bedüfnisse anpassen.
Dann das setup.sh script ausführen.
bevor das script ausgeführt wird, sicher stellen das die ports 80 und 443 auch über die Domain auf den Server ereichbar sind.

hier ein kleines script das auf den port 80 lauscht um dies zu testen

nano /root/kimai/testeweb.sh

Inhalt

#!/bin/bash

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

Starten, kann mit strg+c wieder abgebrochen werden. Nun kann getestet werden ob Firewall/Portforwarding richtig funktionierne


Container Starten

Ins kimai Verzeichnis gehen

cd /root/kimai

Nun

docker-compose up 

ausführen, dort gibts dann die consolen ausgabe.

Wenn alles läuft und initialisiert ist den Container mit

 docker-compose down

wieder stoppen und dann als Daemon mit

 docker-compose up -d 


wieder starten