docker.recipes

Taiga Project Management

advanced

Agile project management platform for startups and teams.

Overview

Taiga is an open-source agile project management platform built specifically for multidisciplinary teams who want powerful project tracking without enterprise complexity. Born from the need for a modern alternative to heavyweight tools like Jira, Taiga combines intuitive design with robust functionality, supporting both Scrum and Kanban methodologies while maintaining the flexibility that startups and growing teams require. This comprehensive stack orchestrates seven specialized components: taiga-gateway handles HTTP routing and static file delivery, taiga-front provides the responsive Vue.js interface, while taiga-back serves the Django REST API that powers all project data operations. The architecture leverages PostgreSQL for reliable project data storage, RabbitMQ for asynchronous task processing, and taiga-events for real-time WebSocket communication that keeps team members instantly synchronized. The taiga-async worker processes background tasks like email notifications and file processing, while Redis could be added for session caching and performance optimization. This stack delivers enterprise-grade project management capabilities with the simplicity that agile teams demand, offering features like customizable workflows, time tracking, and comprehensive reporting without the overhead of traditional project management suites.

Key Features

  • Dual methodology support with native Scrum sprint planning and Kanban board visualization
  • Real-time collaboration through WebSocket-powered live updates via taiga-events and RabbitMQ messaging
  • Comprehensive issue tracking with user stories, tasks, bugs, and custom issue types with full lifecycle management
  • Advanced project analytics including burndown charts, velocity tracking, and team performance metrics
  • Flexible user role management with granular permissions for project owners, developers, and stakeholders
  • Rich media support with file attachments, image previews, and document management through persistent volume storage
  • RESTful API architecture enabling custom integrations and third-party tool connections
  • Asynchronous task processing for email notifications, bulk operations, and background data processing

Common Use Cases

  • 1Software development teams transitioning from Jira who need agile project management without licensing costs
  • 2Startup engineering teams requiring integrated sprint planning, backlog management, and team velocity tracking
  • 3Remote development teams needing real-time collaboration with live issue updates and team communication
  • 4Consulting firms managing multiple client projects with separate workspaces and customized workflows
  • 5Open source projects requiring public issue tracking with contributor management and community engagement features
  • 6Educational institutions teaching agile methodologies with hands-on project management experience
  • 7Small to medium agencies coordinating design and development workflows with client visibility and reporting

Prerequisites

  • Docker host with minimum 4GB RAM (PostgreSQL requires 1GB, RabbitMQ needs 1GB, remaining services need 2GB combined)
  • Available ports 9000 for web interface and 5672/15672 for RabbitMQ management if external access needed
  • Understanding of agile methodologies (Scrum/Kanban) and project management workflows for effective configuration
  • Basic knowledge of environment variable configuration for database passwords and domain settings
  • SSL certificate and reverse proxy setup if deploying for production use with HTTPS requirements
  • SMTP server configuration details for email notifications and user invitation functionality

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 taiga-gateway:
3 image: nginx:alpine
4 container_name: taiga-gateway
5 ports:
6 - "9000:80"
7 volumes:
8 - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
9 - taiga-static:/taiga/static:ro
10 - taiga-media:/taiga/media:ro
11 depends_on:
12 - taiga-front
13 - taiga-back
14 - taiga-events
15 networks:
16 - taiga-network
17 restart: unless-stopped
18
19 taiga-front:
20 image: taigaio/taiga-front:latest
21 container_name: taiga-front
22 environment:
23 - TAIGA_URL=${TAIGA_URL}
24 - TAIGA_WEBSOCKETS_URL=${TAIGA_WS_URL}
25 networks:
26 - taiga-network
27 restart: unless-stopped
28
29 taiga-back:
30 image: taigaio/taiga-back:latest
31 container_name: taiga-back
32 environment:
33 - POSTGRES_DB=taiga
34 - POSTGRES_USER=taiga
35 - POSTGRES_PASSWORD=${DB_PASSWORD}
36 - POSTGRES_HOST=db
37 - TAIGA_SECRET_KEY=${SECRET_KEY}
38 - TAIGA_SITES_DOMAIN=${TAIGA_DOMAIN}
39 - TAIGA_SITES_SCHEME=http
40 - EVENTS_PUSH_BACKEND_URL=amqp://taiga:${RABBITMQ_PASSWORD}@rabbitmq:5672/taiga
41 - CELERY_BROKER_URL=amqp://taiga:${RABBITMQ_PASSWORD}@rabbitmq:5672/taiga
42 - ENABLE_TELEMETRY=False
43 volumes:
44 - taiga-static:/taiga-back/static
45 - taiga-media:/taiga-back/media
46 depends_on:
47 - db
48 - rabbitmq
49 - taiga-async
50 - taiga-events
51 networks:
52 - taiga-network
53 restart: unless-stopped
54
55 taiga-async:
56 image: taigaio/taiga-back:latest
57 container_name: taiga-async
58 entrypoint: ["/taiga-back/docker/async_entrypoint.sh"]
59 environment:
60 - POSTGRES_DB=taiga
61 - POSTGRES_USER=taiga
62 - POSTGRES_PASSWORD=${DB_PASSWORD}
63 - POSTGRES_HOST=db
64 - TAIGA_SECRET_KEY=${SECRET_KEY}
65 - CELERY_BROKER_URL=amqp://taiga:${RABBITMQ_PASSWORD}@rabbitmq:5672/taiga
66 volumes:
67 - taiga-static:/taiga-back/static
68 - taiga-media:/taiga-back/media
69 depends_on:
70 - db
71 - rabbitmq
72 networks:
73 - taiga-network
74 restart: unless-stopped
75
76 taiga-events:
77 image: taigaio/taiga-events:latest
78 container_name: taiga-events
79 environment:
80 - RABBITMQ_URL=amqp://taiga:${RABBITMQ_PASSWORD}@rabbitmq:5672/taiga
81 - TAIGA_SECRET_KEY=${SECRET_KEY}
82 depends_on:
83 - rabbitmq
84 networks:
85 - taiga-network
86 restart: unless-stopped
87
88 db:
89 image: postgres:15-alpine
90 container_name: taiga-db
91 environment:
92 - POSTGRES_USER=taiga
93 - POSTGRES_PASSWORD=${DB_PASSWORD}
94 - POSTGRES_DB=taiga
95 volumes:
96 - postgres-data:/var/lib/postgresql/data
97 networks:
98 - taiga-network
99 restart: unless-stopped
100
101 rabbitmq:
102 image: rabbitmq:3-management-alpine
103 container_name: taiga-rabbitmq
104 environment:
105 - RABBITMQ_DEFAULT_USER=taiga
106 - RABBITMQ_DEFAULT_PASS=${RABBITMQ_PASSWORD}
107 - RABBITMQ_DEFAULT_VHOST=taiga
108 volumes:
109 - rabbitmq-data:/var/lib/rabbitmq
110 networks:
111 - taiga-network
112 restart: unless-stopped
113
114volumes:
115 taiga-static:
116 taiga-media:
117 postgres-data:
118 rabbitmq-data:
119
120networks:
121 taiga-network:
122 driver: bridge

.env Template

.env
1# Taiga Project Management
2TAIGA_URL=http://localhost:9000
3TAIGA_WS_URL=ws://localhost:9000
4TAIGA_DOMAIN=localhost:9000
5
6# Secrets
7SECRET_KEY=your_secret_key_here
8DB_PASSWORD=secure_taiga_password
9RABBITMQ_PASSWORD=secure_rabbitmq_password

Usage Notes

  1. 1Web UI at http://localhost:9000
  2. 2Default admin: admin / 123123
  3. 3Supports Scrum and Kanban
  4. 4Real-time updates via websockets
  5. 5Import from Jira, Trello, Asana

Individual Services(7 services)

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

taiga-gateway
taiga-gateway:
  image: nginx:alpine
  container_name: taiga-gateway
  ports:
    - "9000:80"
  volumes:
    - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    - taiga-static:/taiga/static:ro
    - taiga-media:/taiga/media:ro
  depends_on:
    - taiga-front
    - taiga-back
    - taiga-events
  networks:
    - taiga-network
  restart: unless-stopped
taiga-front
taiga-front:
  image: taigaio/taiga-front:latest
  container_name: taiga-front
  environment:
    - TAIGA_URL=${TAIGA_URL}
    - TAIGA_WEBSOCKETS_URL=${TAIGA_WS_URL}
  networks:
    - taiga-network
  restart: unless-stopped
taiga-back
taiga-back:
  image: taigaio/taiga-back:latest
  container_name: taiga-back
  environment:
    - POSTGRES_DB=taiga
    - POSTGRES_USER=taiga
    - POSTGRES_PASSWORD=${DB_PASSWORD}
    - POSTGRES_HOST=db
    - TAIGA_SECRET_KEY=${SECRET_KEY}
    - TAIGA_SITES_DOMAIN=${TAIGA_DOMAIN}
    - TAIGA_SITES_SCHEME=http
    - EVENTS_PUSH_BACKEND_URL=amqp://taiga:${RABBITMQ_PASSWORD}@rabbitmq:5672/taiga
    - CELERY_BROKER_URL=amqp://taiga:${RABBITMQ_PASSWORD}@rabbitmq:5672/taiga
    - ENABLE_TELEMETRY=False
  volumes:
    - taiga-static:/taiga-back/static
    - taiga-media:/taiga-back/media
  depends_on:
    - db
    - rabbitmq
    - taiga-async
    - taiga-events
  networks:
    - taiga-network
  restart: unless-stopped
taiga-async
taiga-async:
  image: taigaio/taiga-back:latest
  container_name: taiga-async
  entrypoint:
    - /taiga-back/docker/async_entrypoint.sh
  environment:
    - POSTGRES_DB=taiga
    - POSTGRES_USER=taiga
    - POSTGRES_PASSWORD=${DB_PASSWORD}
    - POSTGRES_HOST=db
    - TAIGA_SECRET_KEY=${SECRET_KEY}
    - CELERY_BROKER_URL=amqp://taiga:${RABBITMQ_PASSWORD}@rabbitmq:5672/taiga
  volumes:
    - taiga-static:/taiga-back/static
    - taiga-media:/taiga-back/media
  depends_on:
    - db
    - rabbitmq
  networks:
    - taiga-network
  restart: unless-stopped
taiga-events
taiga-events:
  image: taigaio/taiga-events:latest
  container_name: taiga-events
  environment:
    - RABBITMQ_URL=amqp://taiga:${RABBITMQ_PASSWORD}@rabbitmq:5672/taiga
    - TAIGA_SECRET_KEY=${SECRET_KEY}
  depends_on:
    - rabbitmq
  networks:
    - taiga-network
  restart: unless-stopped
db
db:
  image: postgres:15-alpine
  container_name: taiga-db
  environment:
    - POSTGRES_USER=taiga
    - POSTGRES_PASSWORD=${DB_PASSWORD}
    - POSTGRES_DB=taiga
  volumes:
    - postgres-data:/var/lib/postgresql/data
  networks:
    - taiga-network
  restart: unless-stopped
rabbitmq
rabbitmq:
  image: rabbitmq:3-management-alpine
  container_name: taiga-rabbitmq
  environment:
    - RABBITMQ_DEFAULT_USER=taiga
    - RABBITMQ_DEFAULT_PASS=${RABBITMQ_PASSWORD}
    - RABBITMQ_DEFAULT_VHOST=taiga
  volumes:
    - rabbitmq-data:/var/lib/rabbitmq
  networks:
    - taiga-network
  restart: unless-stopped

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 taiga-gateway:
5 image: nginx:alpine
6 container_name: taiga-gateway
7 ports:
8 - "9000:80"
9 volumes:
10 - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
11 - taiga-static:/taiga/static:ro
12 - taiga-media:/taiga/media:ro
13 depends_on:
14 - taiga-front
15 - taiga-back
16 - taiga-events
17 networks:
18 - taiga-network
19 restart: unless-stopped
20
21 taiga-front:
22 image: taigaio/taiga-front:latest
23 container_name: taiga-front
24 environment:
25 - TAIGA_URL=${TAIGA_URL}
26 - TAIGA_WEBSOCKETS_URL=${TAIGA_WS_URL}
27 networks:
28 - taiga-network
29 restart: unless-stopped
30
31 taiga-back:
32 image: taigaio/taiga-back:latest
33 container_name: taiga-back
34 environment:
35 - POSTGRES_DB=taiga
36 - POSTGRES_USER=taiga
37 - POSTGRES_PASSWORD=${DB_PASSWORD}
38 - POSTGRES_HOST=db
39 - TAIGA_SECRET_KEY=${SECRET_KEY}
40 - TAIGA_SITES_DOMAIN=${TAIGA_DOMAIN}
41 - TAIGA_SITES_SCHEME=http
42 - EVENTS_PUSH_BACKEND_URL=amqp://taiga:${RABBITMQ_PASSWORD}@rabbitmq:5672/taiga
43 - CELERY_BROKER_URL=amqp://taiga:${RABBITMQ_PASSWORD}@rabbitmq:5672/taiga
44 - ENABLE_TELEMETRY=False
45 volumes:
46 - taiga-static:/taiga-back/static
47 - taiga-media:/taiga-back/media
48 depends_on:
49 - db
50 - rabbitmq
51 - taiga-async
52 - taiga-events
53 networks:
54 - taiga-network
55 restart: unless-stopped
56
57 taiga-async:
58 image: taigaio/taiga-back:latest
59 container_name: taiga-async
60 entrypoint: ["/taiga-back/docker/async_entrypoint.sh"]
61 environment:
62 - POSTGRES_DB=taiga
63 - POSTGRES_USER=taiga
64 - POSTGRES_PASSWORD=${DB_PASSWORD}
65 - POSTGRES_HOST=db
66 - TAIGA_SECRET_KEY=${SECRET_KEY}
67 - CELERY_BROKER_URL=amqp://taiga:${RABBITMQ_PASSWORD}@rabbitmq:5672/taiga
68 volumes:
69 - taiga-static:/taiga-back/static
70 - taiga-media:/taiga-back/media
71 depends_on:
72 - db
73 - rabbitmq
74 networks:
75 - taiga-network
76 restart: unless-stopped
77
78 taiga-events:
79 image: taigaio/taiga-events:latest
80 container_name: taiga-events
81 environment:
82 - RABBITMQ_URL=amqp://taiga:${RABBITMQ_PASSWORD}@rabbitmq:5672/taiga
83 - TAIGA_SECRET_KEY=${SECRET_KEY}
84 depends_on:
85 - rabbitmq
86 networks:
87 - taiga-network
88 restart: unless-stopped
89
90 db:
91 image: postgres:15-alpine
92 container_name: taiga-db
93 environment:
94 - POSTGRES_USER=taiga
95 - POSTGRES_PASSWORD=${DB_PASSWORD}
96 - POSTGRES_DB=taiga
97 volumes:
98 - postgres-data:/var/lib/postgresql/data
99 networks:
100 - taiga-network
101 restart: unless-stopped
102
103 rabbitmq:
104 image: rabbitmq:3-management-alpine
105 container_name: taiga-rabbitmq
106 environment:
107 - RABBITMQ_DEFAULT_USER=taiga
108 - RABBITMQ_DEFAULT_PASS=${RABBITMQ_PASSWORD}
109 - RABBITMQ_DEFAULT_VHOST=taiga
110 volumes:
111 - rabbitmq-data:/var/lib/rabbitmq
112 networks:
113 - taiga-network
114 restart: unless-stopped
115
116volumes:
117 taiga-static:
118 taiga-media:
119 postgres-data:
120 rabbitmq-data:
121
122networks:
123 taiga-network:
124 driver: bridge
125EOF
126
127# 2. Create the .env file
128cat > .env << 'EOF'
129# Taiga Project Management
130TAIGA_URL=http://localhost:9000
131TAIGA_WS_URL=ws://localhost:9000
132TAIGA_DOMAIN=localhost:9000
133
134# Secrets
135SECRET_KEY=your_secret_key_here
136DB_PASSWORD=secure_taiga_password
137RABBITMQ_PASSWORD=secure_rabbitmq_password
138EOF
139
140# 3. Start the services
141docker compose up -d
142
143# 4. View logs
144docker 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/taiga-pm/run | bash

Troubleshooting

  • taiga-back failing with database connection errors: Verify DB_PASSWORD environment variable matches across taiga-back, taiga-async, and db services
  • Real-time updates not working in web interface: Check that TAIGA_WEBSOCKETS_URL points to correct taiga-events service and RabbitMQ credentials match
  • Static files (CSS/JS) not loading properly: Ensure taiga-static volume is properly mounted and nginx.conf routing is configured for /static/ paths
  • Email notifications not sending from Taiga: Configure SMTP settings in taiga-back environment and verify taiga-async worker is processing mail queue
  • RabbitMQ connection failures across services: Confirm RABBITMQ_PASSWORD is consistent and rabbitmq service is healthy before dependent services start
  • High memory usage from PostgreSQL: Tune PostgreSQL configuration for your dataset size or increase container memory limits above 1GB minimum

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