How to Install Kimai with Docker Compose
Create a new folder:
mkdir kimai
cd kimai
Environment Variables
Create .env file:
nano .env
Add the following environment variables:
MYSQL_DATABASE=kimai
MYSQL_USER=kimaiuser
MYSQL_PASSWORD=****
MYSQL_ROOT_PASSWORD=****
ADMINMAIL=admin@kimai.local
ADMINPASS=****
MYSQL_PASSWORD, MYSQL_ROOT_PASSWORD, and ADMINPASS should be no longer than 64 characters and use only alphanuermic characters, with no special character.
ADMINMAIL and ADMINPASS are your admin username and password.
Docker Compose
Create docker-compose.yml:
nano docker-compose.yml
Add the following content:
services:
sqldb:
image: mysql:8.3
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
restart: unless-stopped
kimai:
image: kimai/kimai2:apache
ports:
- "9093:8001"
environment:
ADMINMAIL: ${ADMINMAIL}
ADMINPASS: ${ADMINPASS}
DATABASE_URL: mysql://${MYSQL_USER}:${MYSQL_PASSWORD}@sqldb:3306/${MYSQL_DATABASE}?charset=utf8mb4
TRUSTED_HOSTS: '^clock\.example\.com$|^localhost$|^127\.0\.0\.1$'
restart: unless-stopped
Update TRUSTED_HOSTS with your domain and leave the other settings unchanged.
Start Kimai:
docker compose up -d
Caddy
Open Caddyfile:
sudo nano /etc/caddy/Caddyfile
Add the following content:
clock.example.com {
reverse_proxy localhost:9093
}
Restart caddy:
sudo systemctl restart caddy
Usage
Go to https://clock.example.com and login using the ADMINMAIL and ADMINPASS values from your .env flie.
NOTEKimai may take around 1 minute to start up the first time, while initializing the database.
TIPTo check if Kimai and its database are running correctly, run:
docker compose logs -f kimaiin the same folder where your docker-compose.yml file is located.
