Гид по технологиям

Установка Taiga на Ubuntu 20.04

• 7 min read • DevOps • Обновлено 22 Nov 2025
Установка Taiga на Ubuntu 20.04
Установка Taiga на Ubuntu 20.04

Главная иллюстрация Taiga — логотип и интерфейс

Taiga — свободный инструмент управления проектами для стартапов и Agile‑команд. В этой инструкции показана пошаговая установка Taiga (backend на Django/Python, frontend на Node.js) на сервер с Ubuntu 20.04: подготовка пакетов, установка Node.js, PostgreSQL, RabbitMQ, Redis, настройка backend/front, systemd‑сервисы и Nginx как обратный прокси. Важные шаги: создать отдельного пользователя taiga, задать надежные пароли и SECRET_KEY, настроить HTTPS и права доступа.

Основная идея и область применения

Taiga — система для управления задачами и проектами, подходящая для Scrum и Kanban. Эта инструкция рассчитана на системного администратора или девопса, у которого есть доступ к серверу с Ubuntu 20.04 и привилегии root.

В статье сохраняются все оригинальные команды и конфигурационные файлы — переведено и дополнено объяснениями, рекомендациями по безопасности и списками проверки.

Коротко о поддерживаемых версий и примерах

Фактическая тестовая конфигурация в исходной инструкции использует: Ubuntu 20.04, Node.js 12.x (в примере v12.19.0), PostgreSQL 13, Django 2.2.x, Gunicorn. При обновлении компонентов проверяйте совместимость версий с официальным репозиторием Taiga.

Important

  • Всегда заменяйте секретные ключи и пароли на уникальные значения.
  • В продакшне отключайте DEBUG и обязательно используйте HTTPS.

Содержание

  • Предварительные требования
  • Подготовка системы
  • Установка Node.js
  • Установка и настройка PostgreSQL
  • Установка RabbitMQ и Redis
  • Установка и настройка backend Taiga
  • Установка и настройка frontend Taiga
  • Установка и настройка Taiga Events
  • Создание systemd‑сервисов
  • Конфигурация Nginx
  • Доступ к веб‑интерфейсу
  • Рекомендации по безопасности
  • Тесты и критерии приёмки
  • Контрольный список ролей
  • Техническое устранение неполадок
  • Однострочный глоссарий

Предварительные требования

  • Сервер с Ubuntu 20.04.
  • Действующее доменное имя, настроенное на IP сервера (например, taiga.example.com).
  • Пароль root или доступ через sudo.

Подготовка системы

Обновите пакеты:

apt-get update -y

Установите зависимости (команда большая — сохранена как в исходнике):

apt-get install git gnupg2 pwgen automake wget curl gettext python3 virtualenvwrapper python3-dev python3-pip python3-dev libssl-dev tmux build-essential libgdbm-dev binutils-doc autoconf flex gunicorn bison libjpeg-dev libzmq3-dev libfreetype6-dev zlib1g-dev libncurses5-dev libtool libxslt-dev libxml2-dev libffi-dev

Задайте FQDN (полное доменное имя) для сервера:

hostnamectl set-hostname taiga.example.com

Пропишите хост в /etc/hosts (отредактируйте файл):

nano /etc/hosts

Добавьте строку с IP и доменом:

your-server-ip taiga.example.com

Сохраните и закройте файл.

Установка Node.js

Taiga frontend и события используют Node.js. В примере используется Node.js 12.x — добавим источник NodeSource и установим nodejs:

curl -sL https://deb.nodesource.com/setup_12.x | bash -
apt-get install nodejs -y

Проверка версии:

node -v

Ожидаемый пример вывода:

v12.19.0

Если вы планируете использовать более новую версию Taiga или npm‑пакеты, проверьте совместимость с Node 14/16.

Установка и настройка PostgreSQL

Taiga хранит данные в PostgreSQL.

Добавьте ключ и репозиторий PostgreSQL:

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
echo "deb http://apt.postgresql.org/pub/repos/apt/ focal-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list
apt-get update -y
apt-get install postgresql -y

Поменяйте пароль для системного пользователя postgres (это системный пароль, используемый при входе под пользователем postgres):

passwd postgres

Создайте роль и базу для Taiga:

su - postgres
createuser taiga
psql

В интерактивной оболочке psql выполните:

ALTER USER taiga WITH ENCRYPTED password 'yourpassword';
CREATE DATABASE taiga OWNER taiga;

Затем выйдите:

\q
exit

Important

  • Используйте сложный пароль для роли taiga и для системного пользователя postgres.
  • Права доступа к базе данных можно дополнительно ограничить через pg_hba.conf при необходимости.

Установка RabbitMQ и Redis

Taiga использует RabbitMQ как брокер сообщений и Redis для кэширования и очередей.

apt-get install rabbitmq-server redis-server -y

Создайте пользователя и виртуальный хост в RabbitMQ:

rabbitmqctl add_user taiga yourpassword
rabbitmqctl add_vhost taiga
rabbitmqctl set_permissions -p taiga taiga ".*" ".*" ".*"

Установка и настройка backend Taiga

Создайте отдельного системного пользователя taiga и домашнюю директорию:

adduser taiga
adduser taiga sudo
su - taiga
mkdir -p ~/logs

Клонируйте репозиторий backend и переключитесь на ветку stable:

git clone https://github.com/taigaio/taiga-back.git
cd taiga-back
git checkout stable

Активируйте virtualenvwrapper: откройте ~/.bashrc и добавьте:

source '/usr/share/virtualenvwrapper/virtualenvwrapper.sh'

Примените профиль:

source ~/.bashrc

Создайте виртуальное окружение для Taiga и установите зависимости:

mkvirtualenv -p /usr/bin/python3 taiga_venv
pip3 install -r requirements.txt

Выполните миграции и загрузку начальных данных:

python3 manage.py migrate --noinput
python3 manage.py loaddata initial_user
python3 manage.py loaddata initial_project_templates
python3 manage.py compilemessages
python3 manage.py collectstatic --noinput

Отредактируйте файл настроек local.py:

nano ~/taiga-back/settings/local.py

Добавьте/проверьте строки (сохранено содержимое из исходной инструкции — замените значения под вашу установку):

from .common import *

MEDIA_URL = "http://taiga.example.com/media/"
STATIC_URL = "http://taiga.example.com/static/"
SITES["front"]["scheme"] = "http"
SITES["front"]["domain"] = "taiga.example.com"

SECRET_KEY = "OQOEJNSJIQHDBQNSUQEJSNNANsqQPAASQLSMSOQND"

DEBUG = False
PUBLIC_REGISTER_ENABLED = True

DEFAULT_FROM_EMAIL = "[email protected]"
SERVER_EMAIL = DEFAULT_FROM_EMAIL

#CELERY_ENABLED = True

EVENTS_PUSH_BACKEND = "taiga.events.backends.rabbitmq.EventsPushBackend"
EVENTS_PUSH_BACKEND_OPTIONS = {"url": "amqp://taiga:yourpassword@localhost:5672/taiga"}

Important

  • Не храните SECRET_KEY в общедоступных репозиториях. Сгенерируйте уникальный ключ для продакшена.
  • DEBUG = False в продакшене.

Запустите сервер разработки для проверки:

workon taiga_venv
python manage.py runserver

Пример ожидаемого вывода:

System check identified no issues (0 silenced).
November 02, 2020 - 09:24:41
Django version 2.2.16, using settings 'settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Нажмите CTRL+C, чтобы остановить сервер, затем выполните:

deactivate

Установка и настройка frontend Taiga

Переключитесь на пользователя taiga и скачайте фронтенд:

su - taiga
git clone https://github.com/taigaio/taiga-front-dist.git
cd taiga-front-dist
git checkout stable

Скопируйте пример конфигурации и отредактируйте:

cp ~/taiga-front-dist/dist/conf.example.json ~/taiga-front-dist/dist/conf.json
nano ~/taiga-front-dist/dist/conf.json

В конфиге измените параметры API и eventsUrl на ваш домен (пример из исходника):

{
    "api": "http://taiga.example.com/api/v1/",
    "eventsUrl": "ws://taiga.example.com/events",
    "eventsMaxMissedHeartbeats": 5,
    "eventsHeartbeatIntervalTime": 60000,
    "eventsReconnectTryInterval": 10000,
    "debug": true,
    "debugInfo": false,
    "defaultLanguage": "en",
    "themes": ["taiga"],
    "defaultTheme": "taiga",
    "publicRegisterEnabled": true,
    "feedbackEnabled": true,
    "supportUrl": "https://tree.taiga.io/support",
    "privacyPolicyUrl": null,
    "termsOfServiceUrl": null,
    "GDPRUrl": null,
    "maxUploadFileSize": null,
    "contribPlugins": [],
    "tribeHost": null,
    "importers": [],
    "gravatar": true,
    "rtlLanguages": ["fa"]
}

Сохраните файл.

Установка и настройка Taiga Events

Taiga Events отвечает за WebSocket‑сообщения и пуши.

cd ~
git clone https://github.com/taigaio/taiga-events.git taiga-events
cd taiga-events
npm install
cp config.example.json config.json
nano config.json

Отредактируйте config.json, укажите URL RabbitMQ и секрет:

{
    "url": "amqp://taiga:yourpassword@localhost:5672/taiga",
    "secret": "OQOEJNSJIQHDBQNSUQEJSNNANsqQPAASQLSMSOQND",
    "webSocketServer": {
        "port": 8888
    }
}

Сохраните и выйдите из пользователя taiga:

exit

Создание systemd сервисов

Создайте сервис для taiga_events:

nano /etc/systemd/system/taiga_events.service

Добавьте:

[Unit]
Description=taiga_events
After=network.target

[Service]
User=taiga
WorkingDirectory=/home/taiga/taiga-events
ExecStart=/bin/bash -c "node_modules/coffeescript/bin/coffee index.coffee"
Restart=always
RestartSec=3

[Install]
WantedBy=default.target

Перезагрузите systemd и запустите сервис:

systemctl daemon-reload
systemctl start taiga_events
systemctl enable taiga_events

Создайте сервис для backend Taiga:

nano /etc/systemd/system/taiga.service

Добавьте:

[Unit]
Description=taiga_back
After=network.target

[Service]
User=taiga
Environment=PYTHONUNBUFFERED=true
WorkingDirectory=/home/taiga/taiga-back
ExecStart=/home/taiga/.virtualenvs/taiga_venv/bin/gunicorn --workers 4 --timeout 60 -b 127.0.0.1:8001 taiga.wsgi
Restart=always
RestartSec=3

[Install]
WantedBy=default.target

Перезагрузите systemd и запустите сервис:

systemctl daemon-reload
systemctl start taiga
systemctl enable taiga

Проверьте статус сервисов:

systemctl status taiga_events taiga

Пример вывода (сохранён из исходника):

? taiga_events.service - taiga_events
     Loaded: loaded (/etc/systemd/system/taiga_events.service; disabled; vendor preset: enabled)
     Active: active (running) since Mon 2020-11-02 09:30:21 UTC; 46s ago
   Main PID: 26383 (node)
      Tasks: 7 (limit: 2353)
     Memory: 15.2M
     CGroup: /system.slice/taiga_events.service
             ??26383 node node_modules/coffeescript/bin/coffee index.coffee

Nov 02 09:30:21 taiga.example.com systemd[1]: Started taiga_events.

? taiga.service - taiga_back
     Loaded: loaded (/etc/systemd/system/taiga.service; disabled; vendor preset: enabled)
     Active: active (running) since Mon 2020-11-02 09:30:55 UTC; 13s ago
   Main PID: 26478 (gunicorn)
      Tasks: 5 (limit: 2353)
     Memory: 266.4M
     CGroup: /system.slice/taiga.service
             ??26478 /home/taiga/.virtualenvs/taiga_venv/bin/python /home/taiga/.virtualenvs/taiga_venv/bin/gunicorn --workers 4 --timeout 60 >
             ??26494 /home/taiga/.virtualenvs/taiga_venv/bin/python /home/taiga/.virtualenvs/taiga_venv/bin/gunicorn --workers 4 --timeout 60 >
             ??26495 /home/taiga/.virtualenvs/taiga_venv/bin/python /home/taiga/.virtualenvs/taiga_venv/bin/gunicorn --workers 4 --timeout 60 >
             ??26496 /home/taiga/.virtualenvs/taiga_venv/bin/python /home/taiga/.virtualenvs/taiga_venv/bin/gunicorn --workers 4 --timeout 60 >
             ??26497 /home/taiga/.virtualenvs/taiga_venv/bin/python /home/taiga/.virtualenvs/taiga_venv/bin/gunicorn --workers 4 --timeout 60 >

Nov 02 09:30:55 taiga.example.com gunicorn[26495]: [2020-11-02 09:30:55 +0000] [26495] [INFO] Booting worker with pid: 26495
Nov 02 09:30:55 taiga.example.com gunicorn[26496]: [2020-11-02 09:30:55 +0000] [26496] [INFO] Booting worker with pid: 26496
Nov 02 09:30:55 taiga.example.com gunicorn[26494]: Trying import local.py settings...
Nov 02 09:30:55 taiga.example.com gunicorn[26495]: Trying import local.py settings...
Nov 02 09:30:55 taiga.example.com gunicorn[26497]: Trying import local.py settings...
Nov 02 09:30:55 taiga.example.com gunicorn[26497]: 2020-11-02 09:30:55 +0000] [26497] [INF
Nov 02 09:30:55 taiga.example.com gunicorn[26495]: 2
Nov 02 09:30:55 taiga.example.com gunicorn[26496]: 2
Nov 02 09:30:55 taiga.example.com gunicorn[26496]: rying import local.py settings...
Nov 02 09:30:55 taiga.example.com gunicorn[26497]: rying import local.py settings...

Конфигурация Nginx как обратного прокси

Установите Nginx:

apt-get install nginx -y

Создайте vhost:

nano /etc/nginx/conf.d/taiga.conf

Добавьте конфигурацию (сохранена из исходника):

server {
    listen 80;
    server_name taiga.example.com;

    large_client_header_buffers 4 32k;
    client_max_body_size 50M;
    charset utf-8;

    access_log /home/taiga/logs/nginx.access.log;
    error_log /home/taiga/logs/nginx.error.log;

    # Frontend
    location / {
        root /home/taiga/taiga-front-dist/dist/;
        try_files $uri $uri/ /index.html;
    }

    # Backend
    location /api {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8001/api;
        proxy_redirect off;
    }

    # Admin access (/admin/)
    location /admin {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8001$request_uri;
        proxy_redirect off;
    }

    # Static files
    location /static {
        alias /home/taiga/taiga-back/static;
    }

    # Media files
    location /media {
        alias /home/taiga/taiga-back/media;
    }

    # Events
    location /events {
        proxy_pass http://127.0.0.1:8888/events;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_connect_timeout 7d;
        proxy_send_timeout 7d;
        proxy_read_timeout 7d;
    }
}

Примените настройки:

systemctl restart nginx

Рекомендация

  • В продакшне настроить HTTPS (см. раздел по безопасности ниже).

Доступ к веб‑интерфейсу

Откройте браузер и перейдите по адресу:

http://taiga.example.com

Интерфейс Taiga — экран входа и навигация

Нажмите Login, затем используйте тестовые учётные данные (из исходного примера):

Форма входа Taiga

Логин: admin Пароль: 123123

После входа вы увидите дашборд:

Дашборд Taiga — проекты и задачи

Important

  • Сразу после установки смените пароль администратора и отключите публичную регистрацию, если не требуется.

Рекомендации по безопасности

  1. Включите HTTPS через Let’s Encrypt или корпоративный сертификат. Пример с Certbot:
apt-get install certbot python3-certbot-nginx -y
certbot --nginx -d taiga.example.com
  1. Смените SECRET_KEY и все пароли (RabbitMQ, PostgreSQL, системные): используйте генератор (pwgen, openssl).
  2. Отключите DEBUG в local.py.
  3. Ограничьте доступ к PostgreSQL через pg_hba.conf и firewall (ufw):
ufw allow 'Nginx Full'
ufw allow OpenSSH
ufw enable
  1. Настройте SELinux/AppArmor по потребностям хоста.
  2. Используйте отдельные сервисные учётные записи и минимальные привилегии для файлов и каталогов.
  3. Установите логирование и мониторинг (fail2ban, Prometheus/Grafana, серверные бэкапы).

Тесты и критерии приёмки

Критерии приёмки:

  • Сервисы taiga и taiga_events активны и работают (systemctl status «active (running)»).
  • Веб‑интерфейс доступен по HTTPS на 443, главная страница загружается без ошибок.
  • Авторизация администратора работает, можно создать проект и задачу.
  • Очереди событий работают: обновления задач видны в браузере без перезагрузки.
  • Логи не содержат критических ошибок при старте (проверить /home/taiga/logs и systemd journal).

Тестовые сценарии:

  • Создать проект Scrum и создать user story — проверить, что она появляется на доске.
  • Редактировать описание задачи и убедиться, что другие пользователи видят изменения (проверка WebSocket).
  • Перезапустить taiga_events и taiga — убедиться, что сервисы корректно стартуют и возвращают состояние.

Контрольный список ролей

Администратор:

  • Проверить DNS и SSL.
  • Обновить пароли и SECRET_KEY.
  • Настроить бэкапы базы и файлов медиа.

Операции (Ops):

  • Настроить systemd, логирование и мониторинг.
  • Контроль использования ресурсов Gunicorn (число воркеров = CPU cores * 2 + 1 или подбирать по нагрузке).

Разработчик/интегратор:

  • Проверить API /api/v1/.
  • Настроить интеграции и импортеры.

Плейбук развертывания (микро‑SOP)

  1. Подготовка сервера: обновление пакетов, создание пользователя taiga.
  2. Установка PostgreSQL, RabbitMQ, Redis, Node.js.
  3. Клонирование taiga-back и taiga-front-dist, установка зависимостей.
  4. Конфигурация local.py и conf.json (frontend).
  5. Запуск миграций и начальная загрузка данных.
  6. Создание systemd сервисов, запуск и включение автозапуска.
  7. Настройка Nginx и HTTPS.
  8. Проверка функциональности и создание бэкапа рабочей конфигурации.

Rollback (быстрый):

  • Если после обновления фронтенда/бэкенда возникли ошибки, откатиться на предыдущую git‑ревизию:
git checkout 
systemctl restart taiga taiga_events nginx

Распространённые ошибки и устранение неполадок

Ошибка: Gunicorn не стартует

  • Проверить логи systemd: journalctl -u taiga -b
  • Убедиться, что virtualenv путь корректен в ExecStart
  • Проверить права пользователя taiga к директории /home/taiga/taiga-back

Ошибка: Events не подключаются (WebSocket)

  • Проверить taiga_events сервис и порт 8888
  • Убедиться, что Nginx правильно проксирует /events и что proxy_set_header Upgrade и Connection установлены
  • Проверить RabbitMQ доступность и правильность URL в config.json

Ошибка: Миграции падают на requirements

  • Убедиться, что активировано виртуальное окружение и все зависимости установлены (pip3 install -r requirements.txt)
  • Проверить версии Python и совместимость пакетов

Когда этот подход не подходит

  • Для очень крупной нагрузки и многокластерных развёртываний целесообразно рассмотреть контейнеризацию (Docker, Kubernetes) и распределённые очереди/кластеры баз данных.
  • Если нужна высокая доступность базы данных и отказоустойчивость, настройте репликацию PostgreSQL и кластер RabbitMQ.

Миграция и обновление

  • При обновлении Taiga: сначала делайте бэкап базы и медиафайлов.
  • Используйте git pull на ветке stable, тестируйте локально или на staging, затем выполняйте миграции:
git pull origin stable
workon taiga_venv
pip3 install -r requirements.txt
python3 manage.py migrate --noinput
python3 manage.py collectstatic --noinput
systemctl restart taiga taiga_events nginx

1‑строчный глоссарий

  • Backend: серверная часть на Django/Python.
  • Frontend: клиентская часть на Node.js и статических файлах.
  • Taiga Events: служба для WebSocket и real‑time событий.
  • RabbitMQ: брокер сообщений.
  • Redis: кэш и брокер для некоторых механизмов.

Заключение

Вы настроили Taiga на Ubuntu 20.04: установили зависимости, PostgreSQL, RabbitMQ, Redis, запустили backend, frontend и events, создали systemd‑юниты и настроили Nginx. В продакшн‑режиме обязательно включите HTTPS, смените секреты и реализуйте бэкапы.

Summary

  • Установите и проверьте все сервисы по очереди; не переходите к следующему шагу, пока предыдущий не работает.
  • Защитите секреты и включите HTTPS.
  • Тестируйте обновления на staging перед релизом в продакшн.

Дополнительные ресурсы

  • Официальный репозиторий Taiga: https://github.com/taigaio
  • Документация по PostgreSQL, RabbitMQ, Nginx и Certbot.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро