In the world of software development, project management requires tools that support flexibility, transparency, and scalability. Taiga is an open-source platform for Agile and Scrum methodologies, helping teams organize tasks, track progress, and analyze results. However, traditional Taiga deployment on servers faces challenges: complex setup, limited scalability, and instability as teams grow. Kubernetes addresses these issues by providing automation, fault tolerance, and consistent environments. This guide will help you deploy Taiga in Kubernetes, ensuring a reliable platform for your team.
Creating or Downloading Containers
Official Images (Recommended):
Official images simplify setup by including all dependencies.
taigaio/taiga-front: Frontend (Angular).
taigaio/taiga-back: Backend (Django).
Note: Also requires `postgres` and `redis`.
docker pull taigaio/taiga-front:latest
docker pull taigaio/taiga-back:latest
Custom Build (Optional):
Customization is useful for specific requirements.
Fork Taiga repositories (frontend/backend) on GitHub.
Make changes (e.g., patches).
Create a `Dockerfile` for the backend:
FROM taigaio/taiga-back:latestCOPY custom_settings.py /taiga/settings/custom_settings.py
Build and push the image:
docker build -t mycompany/taiga-back:1.0 .
docker push mycompany/taiga-back:1.0
Deployment in Kubernetes
Namespace
Namespace isolates Taiga resources in the cluster.
apiVersion: v1
kind: Namespace
metadata:
name: taiga
Configuration
Secrets
Stores sensitive data in encrypted form:
apiVersion: v1
kind: Secret
metadata:
name: taiga-secrets
namespace: taiga
type: Opaque
data:
POSTGRES_PASSWORD: cGFzc3dvcmQ= # base64: "password"
TAIGA_SECRET_KEY: c2VjcmV0a2V5 # base64: "secretkey"
TAIGA_DB_PASSWORD: ZGJwYXNz # base64: "dbpass"
TAIGA_ADMIN_PASSWORD: YWRtaW4= # base64: "admin"
ConfigMap
Contains non-sensitive settings:
apiVersion: v1
kind: ConfigMap
metadata:
name: taiga-config
namespace: taiga
data:
TAIGA_SITES_DOMAIN: "taiga.example.com" # Taiga domain
TAIGA_SITES_SCHEME: "https" # Protocol
TAIGA_DB_HOST: "taiga-postgres" # Database host
TAIGA_DB_NAME: "taiga" # Database name
TAIGA_DB_USER: "taiga" # Database user
TAIGA_REDIS_HOST: "taiga-redis" # Redis host
Persistent Storage
PVC ensures PostgreSQL data persistence:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: taiga-postgres-pvc
namespace: taiga
spec:
accessModes:
- ReadWriteOnce
storageClassName: standard
resources:
requests:
storage: 10Gi
Component Deployment
PostgreSQL
Stores Taiga data:
apiVersion: apps/v1
kind: Deployment
metadata:
name: taiga-postgres
namespace: taiga
spec:
replicas: 1
selector:
matchLabels:
app: taiga-postgres
template:
metadata:
labels:
app: taiga-postgres
spec:
containers:
- name: postgres
image: postgres:latest
envFrom:
- secretRef:
name: taiga-secrets
volumeMounts:
- name: postgres-data
mountPath: /var/lib/postgresql/data
volumes:
- name: postgres-data
persistentVolumeClaim:
claimName: taiga-postgres-pvc
Redis
Used for asynchronous tasks and caching:
helm install taiga-redis bitnami/redis \
--namespace taiga \
--set auth.password=REDIS_PASSWORD
Taiga Backend
Performs migrations and runs the server:
apiVersion: apps/v1
kind: Deployment
metadata:
name: taiga-back
namespace: taiga
spec:
replicas: 1
selector:
matchLabels:
app: taiga-back
template:
metadata:
labels:
app: taiga-back
spec:
containers:
- name: taiga-back
image: taigaio/taiga-back:latest
envFrom:
- configMapRef:
name: taiga-config
- secretRef:
name: taiga-secrets
command: ["/bin/sh", "-c"]
args:
- python manage.py migrate && gunicorn -w 3 -t 60 taiga.wsgi
Taiga Frontend
Serves the web interface:
apiVersion: apps/v1
kind: Deployment
metadata:
name: taiga-front
namespace: taiga
spec:
replicas: 1
selector:
matchLabels:
app: taiga-front
template:
metadata:
labels:
app: taiga-front
spec:
containers:
- name: taiga-front
image: taigaio/taiga-front:latest
envFrom:
- configMapRef:
name: taiga-config
Services
Enable access between components:
apiVersion: v1
kind: Service
metadata:
name: taiga-postgres
namespace: taiga
spec:
selector:
app: taiga-postgres
ports:
- port: 5432
apiVersion: v1
kind: Service
metadata:
name: taiga-redis
namespace: taiga
spec:
selector:
app: redis
ports:
- port: 6379
apiVersion: v1
kind: Service
metadata:
name: taiga-back
namespace: taiga
spec:
selector:
app: taiga-back
ports:
- port: 8000
apiVersion: v1
kind: Service
metadata:
name: taiga-front
namespace: taiga
spec:
selector:
app: taiga-front
ports:
- port: 80
Final Setup
Ingress
Routes external traffic to the frontend:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: taiga-ingress
namespace: taiga
spec:
rules:
- host: taiga.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: taiga-front
port:
number: 80
First Login
- Open `https://taiga.example.com/admin`.
- Log in as `admin` with the password from `TAIGA_ADMIN_PASSWORD`.
- Configure SMTP in the admin panel for email notifications.
Deploying Taiga in Kubernetes ensures scalability, fault tolerance, and ease of management. This guide enables you to quickly set up a platform for efficient team collaboration.