Kimai is a slick, open-source time tracking tool — great for freelancers, teams, and agencies who want full control and privacy.
In this guide, I’ll show you how to self-host Kimai using Docker on any Linux server (Ubuntu, Debian…), get it up and running in minutes, and make sure it stays online 24/7 with monitoring from Garmingo.
Let’s go 👇
A Linux server with Docker + Docker Compose
Basic terminal access (SSH)
Optional: domain + HTTPS
10 minutes
mkdir kimai && cd kimai
docker-compose.yml
Paste this into docker-compose.yml
:
version: '3.7'
services:
kimai:
image: kimai/kimai2:apache
restart: unless-stopped
ports:
- "8001:8001"
environment:
- ADMINMAIL=admin@yourdomain.com
- DATABASE_URL=mysql://kimai:kimai@db/kimai
depends_on:
- db
db:
image: mysql:5.7
restart: unless-stopped
environment:
- MYSQL_DATABASE=kimai
- MYSQL_USER=kimai
- MYSQL_PASSWORD=kimai
- MYSQL_ROOT_PASSWORD=rootpass
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
Run the stack:
docker compose up -d
Wait a minute, then open:http://your-server-ip:8001
Login with:
Username: admin
Password: changeme
Change your password immediately.
Point time.yourdomain.com
to your server.
Use a reverse proxy like Caddy, Nginx Proxy Manager, or Traefik to:
Forward HTTPS requests to port 8001
Secure the connection with Let’s Encrypt
Log in → create customers, projects, and time entries.
You can also invite your team and enable timesheets, exports, and invoice generation.
Kimai handles critical workflows — especially for clients, timesheets, and billing.
If it goes offline and you don’t know… you’ve got problems.
Set up Garmingo Status to:
Monitor https://time.yourdomain.com
or your IP
Alert you via Slack, Email, Telegram, Discord, or Webhook
Show uptime history & log incidents
Share a public or private status page
Get monthly uptime reports
🆓 All available on the forever free plan — no credit card needed.
✅ Deploy Kimai with Docker
🔐 Secure with domain + HTTPS
🕵️ Track your time
📈 Monitor with Garmingo Status
Time tracking shouldn’t stop when your server crashes.
Got an idea? Let us know