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

Установка Taiga.io на CentOS 7 с Nginx — пошаговое руководство

• 8 min read • DevOps • Обновлено 19 Nov 2025
Taiga на CentOS 7 с Nginx
Taiga на CentOS 7 с Nginx

Введение

Taiga.io — это open source система управления проектами для гибкой разработки (agile). Платформа состоит из трёх компонентов:

  1. taiga-back — бэкенд (Python, Django), предоставляет API.
  2. taiga-front-dist — фронтенд (AngularJS/CoffeeScript), пользовательский интерфейс.
  3. taiga-events — WebSocket-сервер для realtime-обновлений, использует RabbitMQ.

В этом руководстве шаг за шагом показана установка на CentOS 7, подготовка системы и настройка каждого компонента.

Что понадобится

  • Сервер с CentOS 7
  • root или sudo-привилегии
  • Доменное имя (рекомендуется) или IP для теста

Краткие определения терминов:

  • WebSocket — двусторонний протокол для realtime-обменов между клиентом и сервером.
  • Gunicorn — Python WSGI HTTP-сервер для запуска Django-приложений.
  • Circus — менеджер процессов и монитор для UNIX-процессов.

Что мы сделаем

  1. Установим системные пакеты и репозитории
  2. Установим и настроим PostgreSQL 9.5
  3. Создадим системного пользователя taiga
  4. Настроим taiga-back
  5. Настроим taiga-front-dist
  6. Настроим taiga-events
  7. Установим и настроим Circus как менеджер процессов
  8. Настроим виртуальный хост Nginx для Taiga
  9. Настроим права доступа для Nginx к фронтенду
  10. Протестируем установку

Важно: конфигурационные значения (пароли, домены, секретные ключи) замените на собственные.


Шаг 1 — Подготовка и базовые пакеты

Мы установим набор инструментов, репозитории EPEL и IUS, Python 3.5, Nginx, Redis, RabbitMQ и Node.js.

  • Установка инструментов разработки и зависимостей (команда из источника).
sudo yum -y install gcc gcc-c++ make openssl-devel binutils autoconf flex bison libjpeg-devel freetype-devel zlib-devel perl-ZMQ-LibZMQ3 gdbm-devel ncurses-devel automake libtool libffi-devel curl git tmux gettext
  • Установка репозитория EPEL (нужен для nginx, rabbitmq, redis):
sudo yum -y install epel-release
  • Добавление репозитория IUS и установка Python 3.5 и сопутствующих пакетов:
sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm
sudo yum -y install python35u python35u-pip python35u-devel python-devel python-pip python-virtualenvwrapper libxml2-devel libxslt-devel
  • Установка Nginx:
sudo yum -y install nginx
systemctl start nginx
systemctl enable nginx

Проверка открытых портов (пример):

netstat -plntu

Проверка, что nginx слушает порт 80

  • Redis и RabbitMQ (используются taiga-events; опционально, но рекомендовано для realtime):
yum -y install rabbitmq-server redis
systemctl start rabbitmq-server
systemctl enable rabbitmq-server
systemctl start redis
systemctl enable redis

Создание пользователя и vhost в RabbitMQ (пример команды; замените пароль):

sudo rabbitmqctl add_user taiga aqwe123
sudo rabbitmqctl add_vhost taiga
sudo rabbitmqctl set_permissions -p taiga taiga ".*" ".*" ".*"

Интерфейс RabbitMQ

  • Node.js (нужен для taiga-events):
curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash -
sudo yum -y install nodejs

Совет: можно использовать более свежую ветку Node.js, если taiga-events поддерживает её, но в руководстве используется 6.x. При обновлении проверяйте совместимость.


Шаг 2 — Установка и настройка PostgreSQL 9.5

Taiga использует PostgreSQL. В примере нужен PostgreSQL 9.5.

  • Добавляем репозиторий PostgreSQL 9.5 и устанавливаем:
sudo rpm -Uvh http://yum.postgresql.org/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-2.noarch.rpm
sudo yum -y install postgresql95 postgresql95-devel postgresql95-contrib postgresql95-docs postgresql95-server
  • Инициализация БД и запуск сервиса:
sudo /usr/pgsql-9.5/bin/postgresql95-setup initdb
systemctl start postgresql-9.5
systemctl enable postgresql-9.5
  • Создание роли и базы данных для Taiga:
su - postgres
createuser taiga
createdb taiga -O taiga

Создание БД и пользователя PostgreSQL

Совет по безопасности: позже настройте pg_hba.conf, ограничьте подключение по IP и используйте сильные пароли.


Шаг 3 — Создание системного пользователя taiga

Создадим системного пользователя и добавим в группу wheel для sudo-доступа.

useradd -U -m -s /bin/bash taiga
passwd taiga
usermod -a -G wheel taiga

Проверим sudo-доступ:

su - taiga
sudo su

Пользователь taiga создан

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


Шаг 4 — Установка и настройка taiga-back

Taiga-back — Django-приложение с REST API. Выполняем от имени пользователя taiga.

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

Обновляем virtualenv и создаём виртуальное окружение на Python 3.5:

sudo pip install --upgrade virtualenv
mkvirtualenv -p /usr/bin/python3.5 taiga

Создаём ссылку для pg_config, чтобы сборка зависимых пакетов прошла корректно:

sudo ln -s /usr/pgsql-9.5/bin/pg_config /usr/bin/pg_config

Установка зависимостей Python:

workon taiga
pip install -r requirements.txt

Инициализация базы и загрузка базовых данных и переводов:

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

После выполнения создаётся администратор admin с паролем 123123 (по умолчанию) — обязательно смените его.

Создаём локальный файл конфигурации:

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

Вставляем (обновите параметры под ваш домен и пароли):

from .common import *

MEDIA_URL = "http://taiga.hakase-labs.co/media/"
STATIC_URL = "http://taiga.hakase-labs.co/static/"
SITES["front"]["scheme"] = "http"
SITES["front"]["domain"] = "taiga.hakase-labs.co"

SECRET_KEY = "theveryultratopsecretkey"

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:PASSWORD_FOR_EVENTS@localhost:5672/taiga"}

# Uncomment and populate with proper connection parameters
# for enable email sending. EMAIL_HOST_USER should end by @domain.tld
#EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
#EMAIL_USE_TLS = False
#EMAIL_HOST = "localhost"
#EMAIL_HOST_USER = ""
#EMAIL_HOST_PASSWORD = ""
#EMAIL_PORT = 25

# Uncomment and populate with proper connection parameters
# for enable github login/singin.
#GITHUB_API_CLIENT_ID = "yourgithubclientid"
#GITHUB_API_CLIENT_SECRET = "yourgithubclientsecret"

Примечания:

  • Замените MEDIA_URL и STATIC_URL на ваш домен или корректные пути.
  • SECRET_KEY должен быть уникальным и секретным.
  • В EVENTS_PUSH_BACKEND_OPTIONS укажите правильный пароль RabbitMQ.

Запуск taiga-back вручную для теста:

workon taiga
python manage.py runserver 0.0.0.0:8000

Откройте http://:8000/api/v1/ для проверки API.

Запуск taiga-back локально

Taiga API ответ

Советы по отладке:

  • Просмотрите логи Django при ошибках.
  • Проверьте соединение с PostgreSQL и права пользователя taiga.
  • Если миграции падают — проверьте зависимости в requirements.txt и версии библиотек.

Шаг 5 — Настройка taiga-front-dist

Фронтенд обслуживает статические файлы и конфигурируется JSON-файлом конфигурации.

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

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

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

Пример содержимого (обновите домен):

{
    "api": "http://taiga.hakase-labs.co/api/v1/",
    "eventsUrl": "ws://taiga.hakase-labs.co/events",
    "debug": "true",
    "publicRegisterEnabled": true,
    "feedbackEnabled": true,
    "privacyPolicyUrl": null,
    "termsOfServiceUrl": null,
    "maxUploadFileSize": null,
    "contribPlugins": []
}

После этого фронтенд готов к обслуживанию Nginx (или другого веб-сервера).


Шаг 6 — Настройка taiga-events

Taiga-events — WebSocket-сервер, взаимодействует с RabbitMQ. Выполняем установку зависимостей Node.js и CoffeeScript.

su - taiga
cd ~
git clone https://github.com/taigaio/taiga-events.git taiga-events
cd taiga-events
npm install
sudo npm install -g coffee-script

Важно: глобальная установка coffee-script выполняется от root.

Копируем пример конфига и правим:

cp config.example.json config.json
vim config.json

Пример содержимого (обновите параметры):

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

Примечания:

  • url — строка подключения к RabbitMQ (логин/пароль и vhost).
  • secret должен совпадать с SECRET_KEY taiga-back.

Шаг 7 — Установка и настройка Circus

Circus применяется как менеджер процессов для taiga-back (gunicorn) и taiga-events (coffee).

su - taiga
cd ~
git clone https://github.com/circus-tent/circus.git circus
mkdir -p ~/conf
vim ~/conf/taiga.ini

Вставляем конфигурацию процесса (обновите пути и параметры окружения при необходимости):

[circus]
 check_delay = 5
 endpoint = tcp://127.0.0.1:5555
 pubsub_endpoint = tcp://127.0.0.1:5556
 statsd = true

 [watcher:taiga-events]
 working_dir = /home/taiga/taiga-events
 cmd = /usr/bin/coffee
 args = index.coffee
 uid = taiga
 numprocesses = 1
 autostart = true
 send_hup = true
 stdout_stream.class = FileStream
 stdout_stream.filename = /home/taiga/logs/taigaevents.stdout.log
 stdout_stream.max_bytes = 10485760
 stdout_stream.backup_count = 12
 stderr_stream.class = FileStream
 stderr_stream.filename = /home/taiga/logs/taigaevents.stderr.log
 stderr_stream.max_bytes = 10485760
 stderr_stream.backup_count = 12

 [watcher:taiga]
 working_dir = /home/taiga/taiga-back
 cmd = gunicorn
 args = -w 3 -t 60 --pythonpath=. -b 127.0.0.1:8001 taiga.wsgi
 uid = taiga
 numprocesses = 1
 autostart = true
 send_hup = true
 stdout_stream.class = FileStream
 stdout_stream.filename = /home/taiga/logs/gunicorn.stdout.log
 stdout_stream.max_bytes = 10485760
 stdout_stream.backup_count = 4
 stderr_stream.class = FileStream
 stderr_stream.filename = /home/taiga/logs/gunicorn.stderr.log
 stderr_stream.max_bytes = 10485760
 stderr_stream.backup_count = 4

 [env:taiga]
 PATH = /home/taiga/.virtualenvs/taiga/bin:$PATH
 TERM=rxvt-256color
 SHELL=/bin/bash
 USER=taiga
 LANG=en_US.UTF-8
 HOME=/home/taiga
 PYTHONPATH=/home/taiga/.virtualenvs/taiga/lib/python3.5/site-packages

Создаём директорию логов и устанавливаем circus:

mkdir -p ~/logs
cd ~/circus
sudo python3.5 setup.py install

Создаём systemd-сервис для circus:

sudo su
vim /usr/lib/systemd/system/circusd.service

Вставляем простую единицу systemd:

[Unit]
 Description=circus

[Service]
 ExecStart=/usr/bin/circusd /home/taiga/conf/taiga.ini

Перезагружаем демона systemd и запускаем circus:

systemctl daemon-reload
systemctl start circusd
systemctl enable circusd

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

circusctl status
systemctl status circusd

Статус circusd

Советы:

  • Убедитесь, что пути в taiga.ini соответствуют реальной структуре.
  • Логи могут расти — настройте logrotate или предусмотрите ротацию в circus конфиге.

Шаг 8 — Настройка виртуального хоста Nginx для Taiga

Создаём файл конфигурации nginx:

cd /etc/nginx/
vim conf.d/taiga.conf

Пример конфигурации (обновите server_name):

server {
    listen 80;
    server_name taiga.hakase-labs.co;

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

    access_log /var/log/nginx/taiga.access.log;
    error_log /var/log/nginx/taiga.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;
    }

    # Django 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;
    }

    # Taiga-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;
    }
}

Проверяем конфигурацию и перезапускаем nginx:

nginx -t
systemctl restart nginx

Совет: при использовании HTTPS добавьте блок server для 443 и настройте SSL (Let’s Encrypt или коммерческий сертификат).


Шаг 9 — Доступ Nginx к файлам фронтенда

На CentOS 7 Nginx по умолчанию работает от пользователя nginx. Если фронтенд находится в /home/taiga, nginx может не иметь доступа.

Проверка прав:

sudo -u nginx stat /home/taiga/taiga-front-dist/dist

Если получаете permission denied, выполните:

sudo gpasswd -a nginx taiga
sudo chmod g+x /home/taiga
sudo chmod g+x /home/taiga/taiga-front-dist
sudo chmod g+x /home/taiga/taiga-front-dist/dist
systemctl restart nginx

Дополнительно (SELinux): если SELinux включён, нужно установить соответствующие контексты или временно снять ограничение для теста. Пример (временно):

sudo setenforce 0

Для постоянного исправления используйте chcon/restorecon и соответствующие boolean-параметры или настройте SELinux правильно, не отключая его в продакшне.


Шаг 10 — Тестирование

Откройте в браузере домен или IP, например http://taiga.hakase-labs.co. Должна появиться страница Taiga. Войдите под admin / 123123 и смените пароль.

Страница проектов Taiga

Авторизация в Taiga

Панель Taiga

Проверки после установки:

  • Откройте /api/v1/ и проверьте JSON-ответ.
  • Проверьте веб-сокеты: подключение к /events должно проксироваться к taiga-events.
  • Проверьте, что статика /static и /media отдаются nginx напрямую.

Частые проблемы и их решения

  1. Проблема: 502 Bad Gateway при обращении к /api

    • Проверьте, запущен ли gunicorn (через circusctl status или systemctl).
    • Посмотрите логи gunicorn (/home/taiga/logs/gunicorn.stderr.log).
    • Убедитесь, что в taiga.ini указана правильная точка прослушивания (127.0.0.1:8001) и gunicorn действительно слушает этот адрес.
  2. Проблема: Nginx не видит файлы фронтенда

    • Проверьте права на директории и добавление nginx в группу taiga.
    • Если включён SELinux, настройте контексты файлов.
  3. Проблема: taiga-events не стартует

    • Проверьте, установлены ли npm-зависимости и coffee-script.
    • Запустите кофескрипт вручную для отладки: /usr/bin/coffee index.coffee
    • Проверьте соединение с RabbitMQ.
  4. Проблема: миграции Django не проходят

    • Проверьте требования Python-пакетов, наличие pg_config и доступа к PostgreSQL.

Безопасность и эксплуатация

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

  • Смените пароли администратора и RabbitMQ на сильные значения.
  • Настройте брандмауэр (firewalld) для открытия только необходимых портов (80/443, 22 по SSH). Пример:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
  • Используйте HTTPS и HSTS для веб-сайта.
  • Ограничьте доступ к PostgreSQL из внешней сети; разрешайте только локальные подключения или через VPN.
  • Настройте регулярные резервные копии базы данных и медиа-файлов.
  • Настройте систему логирования и ротации логов.

SELinux:

  • SELinux может блокировать доступ nginx к файлам в /home. Решение — либо переместить frontend в /var/www/…, либо установить правильный SELinux-контекст, например:
sudo semanage fcontext -a -t httpd_sys_content_t "/home/taiga/taiga-front-dist/dist(/.*)?"
sudo restorecon -Rv /home/taiga/taiga-front-dist/dist

(semange может потребоваться установить: yum install policycoreutils-python)


Мониторинг и обслуживание

  • Настройте мониторинг процессов (Circus уже управляет процессами), но добавьте мониторинг доступности (uptimechecks), метрики Gunicorn и RabbitMQ.
  • Регулярно применяйте обновления ОС и зависимостей, проверяйте совместимость Taiga с обновлёнными библиотеками.
  • Периодически проверяйте размер логов и настраивайте ротацию (logrotate) для /home/taiga/logs и /var/log/nginx.

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

DevOps / Системный администратор:

  • Установить и настроить OS, репозитории, пакеты.
  • Настроить PostgreSQL, RabbitMQ, Redis.
  • Настроить SELinux и firewall.
  • Настроить автоматический запуск Circus и nginx.

Разработчик / администратор Taiga:

  • Настроить taiga-back, выполнить миграции и загрузить начальные данные.
  • Настроить конфигурацию front и events.
  • Проверить работу API и WebSocket.

Технический директор / владелец проекта:

  • Подтвердить соответствие требованиям безопасности.
  • Утвердить политику резервного копирования и SLA.

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

  1. Сайт доступен по HTTP(S) и фронтенд отрисовывается.
  2. API доступно по /api/v1/ и возвращает корректный JSON.
  3. Авторизация работает (войдите под admin и смените пароль).
  4. WebSocket-обновления работают (например, открыв два клиента и совершив изменение).
  5. Логи запускающихся сервисов не содержат критических ошибок.

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

  • Тест 1: Вход в систему под admin/123123 и смена пароля. Критерий приёмки: пользователь успешно входит и пароль изменён.

  • Тест 2: Создание проекта и задача, проверка видимости у другого пользователя. Критерий приёмки: данные сохраняются в базе и отображаются на фронтенде.

  • Тест 3: Перезапуск circusd и проверка автозапуска сервисов. Критерий приёмки: после перезапуска процессы taiga и taiga-events работают.


Резервное копирование и восстановление (рекомендации)

  • Регулярно делайте дамп PostgreSQL (pg_dump) и копируйте медиа-файлы (директория media).
  • Пример простой ежедневной cron-задачи: pg_dump + tar медиа — храните архивы вне сервера.

Короткая памятка по миграции/обновлению версии Taiga

  1. Сделайте резервную копию базы и медиа.
  2. В рабочей директории выполните git pull и переключитесь на релизную ветку (stable).
  3. Обновите виртуenv зависимости: pip install -r requirements.txt.
  4. Выполните python manage.py migrate и collectstatic.
  5. Перезапустите circusd или перезапустите соответствующие процессы.

Глоссарий (одна строка)

  • taiga-back — серверная часть (Django API); taiga-front-dist — готовая сборка фронтенда; taiga-events — WebSocket-сервер; Circus — менеджер процессов.

Заключение

Установка Taiga на CentOS 7 включает подготовку пакетов, настройку БД и очередей сообщений, настройку процессов и веб-сервера. Важно уделить внимание безопасности, правам доступа и мониторингу. После завершения всех шагов система должна быть работоспособной и доступной по вашему домену.

Краткие действия для проверки (SOP):

  1. Проверить status: systemctl status nginx, systemctl status circusd, systemctl status postgresql-9.5, systemctl status rabbitmq-server
  2. Проверить логи: /home/taiga/logs/ и /var/log/nginx/
  3. Открыть веб: http://ваш-домен

Источники и ссылки

Поделиться: 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 быстро