MAATRIX / Блог / Taiga на Ubuntu 24.04: пошаговая установка

Taiga на Ubuntu 24.04: пошаговая установка

MAATRIX

Команда переросла Trello-доску на бесплатном тарифе или устала от Jira с её лицензиями за каждого пользователя, а переезд в закрытый SaaS настораживает — данные о спринтах и клиентских задачах лежат непонятно у кого. Taiga закрывает этот запрос: открытый трекер для Agile-команд с бэклогом, спринтами, скрам- и канбан-досками, эпиками и вики, который разворачивается на своём сервере за один вечер. Ниже — рабочая установка Taiga на Ubuntu 24.04 через официальный Docker-стек: от подготовки сервера до рабочего инстанса с HTTPS и почтовыми уведомлениями.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Taiga и что понадобится на сервере

Taiga — не один процесс, а связка сервисов: Django-бэкенд (taiga-back), React-фронтенд, обработчик фоновых задач taiga-async со своим RabbitMQ, сервис вебсокет-событий taiga-events тоже со своим RabbitMQ, сервис отдачи защищённых файлов taiga-protected, PostgreSQL под данные и nginx-шлюз taiga-gateway, который склеивает всё это в один HTTP-эндпоинт. Официально проект поддерживает установку только через Docker Compose — так его разворачивают и сами разработчики Kaleidos, и это избавляет от ручной сборки девяти сервисов руками.

Из-за количества контейнеров Taiga ощутимо прожорливее простого канбана вроде Wekan или Focalboard:

ПараметрМинимум (команда 5-10 человек)Рекомендуется (команда 20+, продакшен)
RAM4 ГБ6-8 ГБ
CPU2 vCPU4 vCPU
Диск20 ГБ SSD40+ ГБ SSD
ОСUbuntu 24.04 LTSUbuntu 24.04 LTS

На 2 ГБ RAM стек стартует нестабильно — Postgres и два RabbitMQ вместе с Django-воркерами легко упираются в память уже на этапе первого запуска миграций. Если апгрейд сервера пока не вариант, хотя бы добавьте своп: как это сделать — в статье про настройку swap на Ubuntu 24.04.

Дополнительно понадобятся:

  • Домен (или поддомен) с A-записью на IP сервера — без него не выпустить нормальный SSL-сертификат;
  • SMTP-доступ — Taiga шлёт письма с приглашениями в проект и уведомлениями по задачам, без почты часть функциональности просто не работает;
  • root-доступ по SSH к чистому серверу.

Если с доменом и DNS раньше дела не имели — есть разбор настройки домена и DNS с нуля.

Устанавливаем Docker и Docker Compose

Ставим Docker Engine из официального репозитория Docker, а не из apt Ubuntu — там версия старее и плагин docker compose может отсутствовать:

apt update && apt upgrade -y
apt install -y ca-certificates curl gnupg

install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
  https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
  > /etc/apt/sources.list.d/docker.list

apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

Проверяем, что демон поднялся и команда docker compose доступна:

systemctl status docker
docker compose version

Подробный разбор каждого шага, включая типичные грабли с правами и правами на сокет, — в статье про установку Docker на Ubuntu 24.04.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Клонируем taiga-docker и настраиваем .env

Официальный репозиторий с готовым docker-compose.ymltaiga-docker от Kaleidos Ventures, разработчиков Taiga:

git clone https://github.com/kaleidos-ventures/taiga-docker.git /opt/taiga
cd /opt/taiga
cp .env.example .env

Открываем .env и правим ключевые переменные:

# Домен и протокол
TAIGA_SCHEME=https
TAIGA_DOMAIN=taiga.example.com
SUBPATH=

# Секретный ключ Django — сгенерируйте свой, не оставляйте значение по умолчанию
SECRET_KEY=замените-на-случайную-строку-40+-символов

# PostgreSQL
POSTGRES_USER=taiga
POSTGRES_PASSWORD=надёжный-пароль-бд
POSTGRES_DB=taiga

# RabbitMQ (async-очередь и events-очередь используют разные креды)
RABBITMQ_USER=taiga
RABBITMQ_PASS=надёжный-пароль-rabbit
RABBITMQ_ERLANG_COOKIE=случайная-строка

# Телеметрия — по умолчанию включена, для приватного инстанса лучше выключить
ENABLE_TELEMETRY=False

Случайный SECRET_KEY удобно сгенерировать прямо в шелле:

openssl rand -base64 48

Отдельно проверьте блок EMAIL_* — без него письма-приглашения не уйдут (разберём в отдельной секции ниже). По умолчанию docker-compose.yml маппит шлюз taiga-gateway на 80-й порт хоста — если на сервере уже занят этот порт другим веб-сервером, освободите его или поменяйте маппинг порта в docker-compose.yml перед запуском.

Настройка почты для уведомлений

Без рабочего SMTP в Taiga не отправляются приглашения в проект, сброс пароля и уведомления по задачам — участники команды просто не получат ссылку на регистрацию. В .env добавьте:

EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend
EMAIL_USE_TLS=True
EMAIL_USE_SSL=False
EMAIL_HOST=smtp.example.com
EMAIL_PORT=587
EMAIL_HOST_USER=taiga@example.com
EMAIL_HOST_PASSWORD=пароль_приложения
DEFAULT_FROM_EMAIL=taiga@example.com

Свой почтовый сервер на том же сервере, где крутится Taiga, для этого обычно не годится — у свежего IP без репутации письма чаще падают в спам, чем доходят. Практичнее взять внешний SMTP-провайдер или отдельно поднятый почтовый сервер на прогретом домене. Если решите разворачивать почту сами — пошаговая инструкция по установке Postfix на Ubuntu 24.04 под рукой, а сравнение с готовыми решениями — в статье Postfix и mailcow: что выбрать для сервера.

Запускаем стек и создаём администратора

Когда .env заполнен, поднимаем весь стек:

cd /opt/taiga
docker compose up -d

Первый запуск подтягивает образы всех девяти сервисов и накатывает миграции PostgreSQL — на слабом канале и HDD-диске это может занять 5-10 минут. Следите за логом бэкенда, пока не убедитесь, что миграции прошли без ошибок:

docker compose logs -f taiga-back

Дождитесь строки вида Migrations applied или просто спокойного состояния без рестартов контейнера (docker compose ps должен показывать все сервисы в статусе running/healthy, без постоянных restarting).

Создаём первого администратора — суперпользователя Taiga:

docker compose exec taiga-back python manage.py createsuperuser

Мастер спросит логин, email и пароль. После этого откройте http://<домен-или-IP> (пока без HTTPS, если ещё не настроили сертификат) — должна открыться страница входа Taiga. Залогиньтесь под созданным суперпользователем и создайте первый проект.

Домен и HTTPS

Встроенный taiga-gateway слушает 80-й порт хоста и сам не умеет TLS, поэтому HTTPS выносится на внешний реверс-прокси. Самый простой путь — Caddy с автоматическим Let's Encrypt перед контейнером:

Сначала перемапьте порт шлюза на локальный интерфейс, чтобы не конфликтовать с внешним прокси. В docker-compose.yml у сервиса taiga-gateway замените:

ports:
  - "127.0.0.1:8000:80"

Перезапустите стек:

docker compose up -d

Установите Caddy и опишите проксирование:

apt install -y caddy
# /etc/caddy/Caddyfile
taiga.example.com {
    reverse_proxy 127.0.0.1:8000
}
systemctl reload caddy

Caddy сам выпустит и продлит сертификат Let's Encrypt по указанному домену — никаких отдельных вызовов certbot не нужно. Если предпочитаете классику с nginx и certbot, логика та же (проксирование на 127.0.0.1:8000), а разбор двух подходов к получению сертификата — в статье certbot или acme.sh: что выбрать для сервера. После настройки HTTPS не забудьте вернуть в .env TAIGA_SCHEME=https и пересоздать контейнеры (docker compose up -d --force-recreate taiga-back taiga-front), иначе ссылки в письмах и API будут указывать на http://.

После установки: бэкапы, обновление и безопасность

Данные Taiga живут в двух местах: PostgreSQL (проекты, задачи, пользователи) и volume с загруженными файлами (taiga-protected, вложения к задачам). Бэкапить нужно оба:

# Дамп базы
docker compose exec taiga-db pg_dump -U taiga taiga > taiga_$(date +%F).sql

# Архив загруженных файлов (путь volume уточните через docker compose config)
docker run --rm -v taiga_taiga-media-data:/data -v $(pwd):/backup alpine \
  tar czf /backup/taiga-media_$(date +%F).tar.gz -C /data .

Регулярный бэкап удобнее автоматизировать через cron и восстанавливать по требованию — общий подход разобран в статье про автоматические бэкапы на Ubuntu 24.04, а если нужен инструмент с версионированием и дедупликацией — присмотритесь к BorgBackup на Ubuntu 24.04.

Обновление стека делает тот же git pull и пересборка:

cd /opt/taiga
git pull
docker compose pull
docker compose up -d

Перед мажорным обновлением всё равно снимите дамп базы вручную — миграции в Taiga необратимы без бэкапа.

По безопасности — базовый набор тот же, что для любого сервера с открытым наружу сервисом: закройте файрволом всё, кроме 22/80/443 (разбор — настройка UFW на Ubuntu 24.04), заведите вход по SSH-ключу вместо пароля (инструкция здесь) и не открывайте порты RabbitMQ и PostgreSQL наружу — по умолчанию docker-compose.yml их и не публикует, оставляя только во внутренней docker-сети, менять это без необходимости не стоит.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Можно ли поставить Taiga без Docker, установкой пакетов вручную?

Технически да — есть инструкции по ручной сборке taiga-back на Python/Django и taiga-front на Angular/React, но это долгий путь с ручной настройкой RabbitMQ, Postgres и nginx и риском разъехаться с апстримом при апдейтах. Официально и практически проще — только Docker Compose.

Хватит ли 4 ГБ RAM для команды из 5-10 человек?

Да, для старта хватает, но при первом запуске (сборка образов, миграции) память используется по пику — если сервер совсем впритык, временно добавьте своп. Для команды от 20 человек и активной работы с вложениями закладывайте 6-8 ГБ.

Как перенести Taiga на другой сервер?

Разверните чистый стек по этой же инструкции на новом сервере, остановите оба, перенесите дамп PostgreSQL и архив volume с медиафайлами, восстановите базу (psql -U taiga taiga < дамп.sql) и распакуйте архив в новый volume перед первым запуском бэкенда.

Taiga поддерживает интеграцию с GitHub/GitLab?

Да, в настройках проекта можно подключить импорт issues из GitHub, GitLab или Bitbucket, а также настроить вебхуки для двусторонней синхронизации статусов задач.

Почему после смены домена в .env ссылки в письмах остаются старыми?

Django-бэкенд кеширует часть конфигурации при старте — после изменения TAIGA_DOMAIN или TAIGA_SCHEME нужно пересоздать (не просто перезапустить) контейнеры taiga-back и taiga-front: docker compose up -d --force-recreate taiga-back taiga-front.

Нужен ли отдельный сервер под PostgreSQL?

Для большинства команд — нет, база спокойно живёт в том же docker-compose стеке. Вынос на отдельный сервер имеет смысл только при по-настоящему высокой нагрузке или требованиях к отказоустойчивости, которые редко актуальны для внутреннего трекера задач.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →