Deploying a Taiga App
Introduction
Taiga is an open-source agile project management platform with a Django backend and Angular frontend. Deploying Taiga with Dockerfiles on Klutch.sh provides reproducible builds, managed secrets, and persistent storage—all configured from klutch.sh/app. Because Klutch.sh routes one port per app, this guide uses two apps: one for the backend API and another for the frontend UI.
Prerequisites
- Klutch.sh account (sign up)
- GitHub repositories (or branches) for Taiga backend and frontend Dockerfiles (GitHub is the only supported git source)
- External PostgreSQL and Redis
- Domain and TLS for the frontend/UI
Architecture and ports
- Backend API: HTTP on internal port
8000; choose HTTP traffic and set internal port to8000. - Frontend (taiga-front): HTTP on internal port
80(Nginx); choose HTTP traffic and set internal port to80. - External Postgres/Redis are required; media uploads should persist across deployments.
Repository layouts
Backend:
taiga-back/├── Dockerfile└── README.mdFrontend:
taiga-front/├── Dockerfile└── README.mdKeep secrets out of Git; store them in Klutch.sh environment variables.
Dockerfile for Taiga backend (production-ready)
Place in taiga-back/Dockerfile:
FROM taigaio/taiga-back:latest
ENV LISTEN_PORT=8000
EXPOSE 8000CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8000", "taiga.wsgi"]Pin to a specific tag (e.g., taigaio/taiga-back:6.7.0) for stability.
Dockerfile for Taiga frontend (production-ready)
Place in taiga-front/Dockerfile:
FROM taigaio/taiga-front:latest
ENV NGINX_LISTEN=80
EXPOSE 80CMD ["nginx", "-g", "daemon off;"]Pin to a specific tag (e.g., taigaio/taiga-front:6.7.0) for stability.
Environment variables (Klutch.sh)
Backend app:
PORT=8000TAIGA_SECRET_KEY=<secure-random-hex>DATABASE_URL=postgres://<user>:<password>@<host>:5432/<db>TAIGA_REDIS_URL=redis://<host>:6379/0MEDIA_URL=https://example-front.klutch.sh/mediaSTATIC_URL=https://example-front.klutch.sh/static- Optional: email SMTP settings (
EMAIL_HOST,EMAIL_PORT,EMAIL_HOST_USER,EMAIL_HOST_PASSWORD,EMAIL_USE_TLS)
Frontend app:
PORT=80API_URL=https://example-back.klutch.sh/api/v1FRONT_DOMAIN=https://example-front.klutch.shMEDIA_URL=https://example-front.klutch.sh/mediaSTATIC_URL=https://example-front.klutch.sh/staticWEBSOCKET_URL=wss://example-back.klutch.sh
If deploying without Dockerfiles and relying on Nixpacks:
- Backend:
NIXPACKS_PYTHON_VERSION=3.10,NIXPACKS_START_CMD=gunicorn -w 4 -b 0.0.0.0:8000 taiga.wsgi - Frontend:
NIXPACKS_START_CMD=nginx -g 'daemon off;'
Attach persistent volumes
Backend:
/taiga/media— uploaded files./taiga/static— static assets if collected locally.
Frontend:
- Typically stateless; no volume required unless customizing assets at runtime.
Ensure paths are writable inside the container.
Deploy Taiga on Klutch.sh (Dockerfile workflow)
- Push the backend repo (Dockerfile at root) to GitHub. Create a Klutch.sh app, select HTTP, set internal port
8000, add backend env vars, and attach volumes for media/static. - Deploy the backend and note its URL (e.g.,
https://example-back.klutch.sh). - Push the frontend repo (Dockerfile at root) to GitHub. Create a Klutch.sh app, select HTTP, set internal port
80, and add frontend env vars pointing to the backend URLs. - Deploy the frontend. Access Taiga at
https://example-front.klutch.shand finish any setup.
Sample checks
Backend health:
curl -I https://example-back.klutch.sh/api/v1/healthFrontend reachability:
curl -I https://example-front.klutch.shHealth checks and production tips
- Add HTTP readiness probes to
/api/v1/health(backend) and/(frontend). - Keep DB/Redis credentials and
TAIGA_SECRET_KEYin Klutch.sh secrets; rotate regularly. - Prefer external object storage for media at scale; if using local storage, monitor
/taiga/mediaand resize volumes proactively. - Pin image versions and test upgrades in staging before production rollout.
Taiga on Klutch.sh runs as two apps to align with single-port routing: backend on 8000 and frontend on 80. Configure ports, env vars, and storage, then ship your agile project management platform.