docker.recipes

Leantime Project Management

beginner

Open-source project management system for non-project managers.

Overview

Leantime is an open-source project management system specifically designed for non-project managers and creative teams. Unlike traditional project management tools that can be overwhelming with complex features, Leantime focuses on simplicity and visual project organization through kanban boards, milestone tracking, and built-in time management features. It bridges the gap between basic task tracking and enterprise-level project management by providing intuitive interfaces for retrospectives, timesheets, and team collaboration. This deployment consists of two containers: the main Leantime application server and a dedicated MySQL 8.0 database. The Leantime container runs the PHP-based web application on port 8080, while the MySQL database container handles all project data, user information, and task storage. The setup uses environment variables for database connectivity and includes persistent volumes for both user-uploaded files and database storage. This stack is ideal for small to medium teams, creative agencies, and organizations that need project management without the complexity of enterprise tools like Jira or Monday.com. The combination provides a complete project management solution with the reliability of MySQL's proven database engine supporting Leantime's user-friendly interface for task management, milestone tracking, and team collaboration.

Key Features

  • Visual kanban boards with drag-and-drop task management and customizable workflow columns
  • Built-in timesheet functionality with project time tracking and reporting capabilities
  • Milestone-based project planning with Gantt chart visualization and deadline management
  • Integrated retrospective tools for agile teams with customizable retrospective templates
  • Multi-language support with timezone configuration for distributed teams
  • File upload and attachment management with persistent storage for project documents
  • Native Slack and Discord integrations for real-time team notifications and updates
  • MySQL 8.0 backend with JSON data type support and full-text search for project content

Common Use Cases

  • 1Creative agencies managing client projects with visual workflows and time tracking
  • 2Software development teams running agile sprints with retrospectives and milestone tracking
  • 3Marketing teams coordinating campaigns across multiple channels and stakeholders
  • 4Small business project coordination without the overhead of enterprise solutions
  • 5Remote teams needing centralized task management with Slack/Discord integration
  • 6Freelancers and consultants tracking billable hours across multiple client projects
  • 7Non-profit organizations managing volunteer-driven projects and initiatives

Prerequisites

  • Docker and Docker Compose installed with at least 1GB available RAM for MySQL
  • Port 8080 available on the host system for web interface access
  • Environment variables configured: DB_PASSWORD, DB_ROOT_PASSWORD, SITE_NAME, TZ, SESSION_PASSWORD
  • Basic understanding of project management concepts like milestones and kanban workflows
  • Web browser with JavaScript enabled for the responsive Leantime interface
  • Sufficient disk space for MySQL data and user file uploads (recommend 5GB minimum)

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 leantime:
3 image: leantime/leantime:latest
4 container_name: leantime
5 environment:
6 - LEAN_DB_HOST=db
7 - LEAN_DB_USER=leantime
8 - LEAN_DB_PASSWORD=${DB_PASSWORD}
9 - LEAN_DB_DATABASE=leantime
10 - LEAN_SITENAME=${SITE_NAME}
11 - LEAN_LANGUAGE=en-US
12 - LEAN_DEFAULT_TIMEZONE=${TZ}
13 - LEAN_SESSION_PASSWORD=${SESSION_PASSWORD}
14 - LEAN_SESSION_EXPIRATION=28800
15 volumes:
16 - leantime-files:/var/www/html/userfiles
17 - leantime-public:/var/www/html/public/userfiles
18 ports:
19 - "8080:80"
20 depends_on:
21 - db
22 networks:
23 - leantime-network
24 restart: unless-stopped
25
26 db:
27 image: mysql:8.0
28 container_name: leantime-db
29 environment:
30 - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
31 - MYSQL_DATABASE=leantime
32 - MYSQL_USER=leantime
33 - MYSQL_PASSWORD=${DB_PASSWORD}
34 volumes:
35 - mysql-data:/var/lib/mysql
36 networks:
37 - leantime-network
38 restart: unless-stopped
39
40volumes:
41 leantime-files:
42 leantime-public:
43 mysql-data:
44
45networks:
46 leantime-network:
47 driver: bridge

.env Template

.env
1# Leantime
2SITE_NAME=My Projects
3TZ=UTC
4
5# Database
6DB_PASSWORD=secure_leantime_password
7DB_ROOT_PASSWORD=secure_root_password
8
9# Generate with: openssl rand -base64 32
10SESSION_PASSWORD=your_session_password

Usage Notes

  1. 1Web UI at http://localhost:8080
  2. 2Complete installation wizard
  3. 3Supports timesheets, milestones, kanban
  4. 4Built-in retrospectives
  5. 5Integrates with Slack, Discord

Individual Services(2 services)

Copy individual services to mix and match with your existing compose files.

leantime
leantime:
  image: leantime/leantime:latest
  container_name: leantime
  environment:
    - LEAN_DB_HOST=db
    - LEAN_DB_USER=leantime
    - LEAN_DB_PASSWORD=${DB_PASSWORD}
    - LEAN_DB_DATABASE=leantime
    - LEAN_SITENAME=${SITE_NAME}
    - LEAN_LANGUAGE=en-US
    - LEAN_DEFAULT_TIMEZONE=${TZ}
    - LEAN_SESSION_PASSWORD=${SESSION_PASSWORD}
    - LEAN_SESSION_EXPIRATION=28800
  volumes:
    - leantime-files:/var/www/html/userfiles
    - leantime-public:/var/www/html/public/userfiles
  ports:
    - "8080:80"
  depends_on:
    - db
  networks:
    - leantime-network
  restart: unless-stopped
db
db:
  image: mysql:8.0
  container_name: leantime-db
  environment:
    - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
    - MYSQL_DATABASE=leantime
    - MYSQL_USER=leantime
    - MYSQL_PASSWORD=${DB_PASSWORD}
  volumes:
    - mysql-data:/var/lib/mysql
  networks:
    - leantime-network
  restart: unless-stopped

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 leantime:
5 image: leantime/leantime:latest
6 container_name: leantime
7 environment:
8 - LEAN_DB_HOST=db
9 - LEAN_DB_USER=leantime
10 - LEAN_DB_PASSWORD=${DB_PASSWORD}
11 - LEAN_DB_DATABASE=leantime
12 - LEAN_SITENAME=${SITE_NAME}
13 - LEAN_LANGUAGE=en-US
14 - LEAN_DEFAULT_TIMEZONE=${TZ}
15 - LEAN_SESSION_PASSWORD=${SESSION_PASSWORD}
16 - LEAN_SESSION_EXPIRATION=28800
17 volumes:
18 - leantime-files:/var/www/html/userfiles
19 - leantime-public:/var/www/html/public/userfiles
20 ports:
21 - "8080:80"
22 depends_on:
23 - db
24 networks:
25 - leantime-network
26 restart: unless-stopped
27
28 db:
29 image: mysql:8.0
30 container_name: leantime-db
31 environment:
32 - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
33 - MYSQL_DATABASE=leantime
34 - MYSQL_USER=leantime
35 - MYSQL_PASSWORD=${DB_PASSWORD}
36 volumes:
37 - mysql-data:/var/lib/mysql
38 networks:
39 - leantime-network
40 restart: unless-stopped
41
42volumes:
43 leantime-files:
44 leantime-public:
45 mysql-data:
46
47networks:
48 leantime-network:
49 driver: bridge
50EOF
51
52# 2. Create the .env file
53cat > .env << 'EOF'
54# Leantime
55SITE_NAME=My Projects
56TZ=UTC
57
58# Database
59DB_PASSWORD=secure_leantime_password
60DB_ROOT_PASSWORD=secure_root_password
61
62# Generate with: openssl rand -base64 32
63SESSION_PASSWORD=your_session_password
64EOF
65
66# 3. Start the services
67docker compose up -d
68
69# 4. View logs
70docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/leantime-pm/run | bash

Troubleshooting

  • Database connection failed error: Verify DB_PASSWORD matches between leantime and db containers in environment variables
  • Installation wizard not appearing: Clear browser cache and ensure port 8080 is accessible, check if leantime container started successfully
  • File uploads not persisting: Confirm leantime-files and leantime-public volumes are properly mounted and have write permissions
  • MySQL container fails to start: Check DB_ROOT_PASSWORD is set and no other MySQL instance is using port 3306 internally
  • Session timeouts too frequent: Adjust LEAN_SESSION_EXPIRATION value (default 28800 seconds) and verify SESSION_PASSWORD is configured
  • Timezone display issues: Set LEAN_DEFAULT_TIMEZONE environment variable to match your location (e.g., America/New_York)

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Ad Space