Установка Taiga.io на CentOS 7 с Nginx — пошаговое руководство
Введение
Taiga.io — это open source система управления проектами для гибкой разработки (agile). Платформа состоит из трёх компонентов:
- taiga-back — бэкенд (Python, Django), предоставляет API.
- taiga-front-dist — фронтенд (AngularJS/CoffeeScript), пользовательский интерфейс.
- taiga-events — WebSocket-сервер для realtime-обновлений, использует RabbitMQ.
В этом руководстве шаг за шагом показана установка на CentOS 7, подготовка системы и настройка каждого компонента.
Что понадобится
- Сервер с CentOS 7
- root или sudo-привилегии
- Доменное имя (рекомендуется) или IP для теста
Краткие определения терминов:
- WebSocket — двусторонний протокол для realtime-обменов между клиентом и сервером.
- Gunicorn — Python WSGI HTTP-сервер для запуска Django-приложений.
- Circus — менеджер процессов и монитор для UNIX-процессов.
Что мы сделаем
- Установим системные пакеты и репозитории
- Установим и настроим PostgreSQL 9.5
- Создадим системного пользователя taiga
- Настроим taiga-back
- Настроим taiga-front-dist
- Настроим taiga-events
- Установим и настроим Circus как менеджер процессов
- Настроим виртуальный хост Nginx для Taiga
- Настроим права доступа для Nginx к фронтенду
- Протестируем установку
Важно: конфигурационные значения (пароли, домены, секретные ключи) замените на собственные.
Шаг 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
- 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 ".*" ".*" ".*"
- 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
Совет по безопасности: позже настройте 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
Совет: используйте отдельного пользователя для сервиса и следите за правами доступа на домашней директории.
Шаг 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://


Советы по отладке:
- Просмотрите логи 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
Советы:
- Убедитесь, что пути в 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 и смените пароль.



Проверки после установки:
- Откройте /api/v1/ и проверьте JSON-ответ.
- Проверьте веб-сокеты: подключение к /events должно проксироваться к taiga-events.
- Проверьте, что статика /static и /media отдаются nginx напрямую.
Частые проблемы и их решения
Проблема: 502 Bad Gateway при обращении к /api
- Проверьте, запущен ли gunicorn (через circusctl status или systemctl).
- Посмотрите логи gunicorn (/home/taiga/logs/gunicorn.stderr.log).
- Убедитесь, что в taiga.ini указана правильная точка прослушивания (127.0.0.1:8001) и gunicorn действительно слушает этот адрес.
Проблема: Nginx не видит файлы фронтенда
- Проверьте права на директории и добавление nginx в группу taiga.
- Если включён SELinux, настройте контексты файлов.
Проблема: taiga-events не стартует
- Проверьте, установлены ли npm-зависимости и coffee-script.
- Запустите кофескрипт вручную для отладки: /usr/bin/coffee index.coffee
- Проверьте соединение с RabbitMQ.
Проблема: миграции 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.
Критерии приёмки
- Сайт доступен по HTTP(S) и фронтенд отрисовывается.
- API доступно по /api/v1/ и возвращает корректный JSON.
- Авторизация работает (войдите под admin и смените пароль).
- WebSocket-обновления работают (например, открыв два клиента и совершив изменение).
- Логи запускающихся сервисов не содержат критических ошибок.
Тестовые сценарии
Тест 1: Вход в систему под admin/123123 и смена пароля. Критерий приёмки: пользователь успешно входит и пароль изменён.
Тест 2: Создание проекта и задача, проверка видимости у другого пользователя. Критерий приёмки: данные сохраняются в базе и отображаются на фронтенде.
Тест 3: Перезапуск circusd и проверка автозапуска сервисов. Критерий приёмки: после перезапуска процессы taiga и taiga-events работают.
Резервное копирование и восстановление (рекомендации)
- Регулярно делайте дамп PostgreSQL (pg_dump) и копируйте медиа-файлы (директория media).
- Пример простой ежедневной cron-задачи: pg_dump + tar медиа — храните архивы вне сервера.
Короткая памятка по миграции/обновлению версии Taiga
- Сделайте резервную копию базы и медиа.
- В рабочей директории выполните git pull и переключитесь на релизную ветку (stable).
- Обновите виртуenv зависимости: pip install -r requirements.txt.
- Выполните python manage.py migrate и collectstatic.
- Перезапустите circusd или перезапустите соответствующие процессы.
Глоссарий (одна строка)
- taiga-back — серверная часть (Django API); taiga-front-dist — готовая сборка фронтенда; taiga-events — WebSocket-сервер; Circus — менеджер процессов.
Заключение
Установка Taiga на CentOS 7 включает подготовку пакетов, настройку БД и очередей сообщений, настройку процессов и веб-сервера. Важно уделить внимание безопасности, правам доступа и мониторингу. После завершения всех шагов система должна быть работоспособной и доступной по вашему домену.
Краткие действия для проверки (SOP):
- Проверить status: systemctl status nginx, systemctl status circusd, systemctl status postgresql-9.5, systemctl status rabbitmq-server
- Проверить логи: /home/taiga/logs/ и /var/log/nginx/
- Открыть веб: http://ваш-домен
Источники и ссылки
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента