Taiga: Instalação em ambiente de produção Debian 8.3

Publicado: 12/04/2016 em Software livre, Tecnologia

logo-color

1.    INTRODUCÃO

Este documento explica como fazer a instalação do serviço Taiga (este modulo é parte da plataforma Taiga).

A plataforma Taiga consiste em três componentes:

taiga-back (backend/api)
taiga-font-dist(fontend)
taiga-events(websockets gateway) (opcional)

Cada parte tem suas próprias dependências. Estes componentes também podem ser instalados em uma único equipamento ou em equipamentos diferentes. Neste tutorial serão instalados todos em um único equipamento.

2.    REQUISITOS PARA INSTALAÇÃO

Este tutorial é para instalação do Taiga em um debian 8.3 (jessie) com o seguintes repositórios e com a lista de pacote atualizada.

Segue sequência para atualizar repositórios e atualizar lista:

# nano /etc/apt/sources.list

Repositórios:

deb http://security.debian.org/ jessie/updates main contrib
deb-src http://security.debian.org/ jessie/updates main contrib

#Official repos
deb http://ftp.us.debian.org/debian jessie main contrib non-free
deb-src http://ftp.us.debian.org/debian jessie main contrib non-free

apt-get update

Se preferir instale o sudo no Debian:

apt-get install sudo

sudo usermod -a -G sudo $USER

A instalação deve ser realizada com um usuário padrão e não como root.

Ip: 127.0.0.1 (ip da sua máquina)
Nome da máquina: localhost (nome da máquina que responde pelo ip informado).
Usuário: taiga

3.    INSTALAÇÃO DO BACKEND

Esta seção é um guia para instalação do backend(api) serviço Taiga

3.1.    Instalar Dependências

O backend é desenvolvido em python (3.4) porém devido a necessidades de algumas bibliotecas é necessário instalar um compilador C.

Execute os comando abaixo como super usuário:
apt-get install -y build-essential binutils-doc autoconf flex bison libjpeg-dev

apt-get install -y libfreetype6-dev zlib1g-dev libzmq3-dev libgdbm-dev libncurses5-dev

apt-get install -y automake libtool libffi-dev curl git tmux gettext

3.2.    Instalar o banco de dados local

3.2.1.    Banco de dados local (na mesma máquina)

O taiga-back usa como banco o postgresql versão 9.3 ou superior.

Instale o portgresql como super usuário:
apt-get install -y postgresql-9.4 postgresql-contrib-9.4

apt-get install -y postgresql-doc-9.4 postgresql-server-dev-9.4

Configure o usuário inicial do banco de dados:

Crie usando o usuário postgres, Caso tenha o sudo use:

sudo -u postgres createuser taiga
sudo -u postgres createdb taiga -O taiga

Caso não tenha o sudo, como usuário root execute:

#su postgres
$createuser taiga
$createdb taiga -O taiga
$exit

3.3.    Instalar o python

Para instalar o taiga-back é necessário ter o python (3.4) instalado com algumas bibliotecas de terceiros. Para iniciar instale o puthon e o virtualenvwrapper:

apt-get install -y python3 python3-pip python-dev python3-dev python-pip virtualenvwrapper

apt-get install libxml2-dev libxslt-dev

Nota: O virtualenvwrapper ajuda a manter o Sistema limpo em relação a bibliotecas de terceiros instaladas com o gerenciador de pacotes da linguagem, instalando estas em uma área virtual isolada.

Reinicie o shell ou rode o bash novamente, para recarregar o bash com as variáveis e funções do virtualenvwrapper.

O próximo passo é baixar o código do github e instalar as dependências:

Baixando o código:

Use para tal o usuário taiga se tiver como root use #exit:

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

Ainda como usuário taiga crie a virtualenv com o nome taiga:

mkvirtualenv –p /usr/bin/python3.4 taiga

Nota: caso o comando mkvirtualenv não funcione executar os seguintes passos:

No terminal execute:

export WORKON_HOME=”/opt/virtual_env/”
source “/usr/bin/virtualenvwrapper.sh”

Caso necessário acrescentes as linhas acima no ~/.bashrc

Instale as dependencies:

pip install –r requirements.txt (em caso de erro remova as bibliotecas com pip uninstall –r requirements.txt e reinstale).

Nota: Caso algo der errado reexecute os dois últimos comandos.

Popule o banco de dados com os dados inicias:

python manage.py migrate –noinput
python manage.py loaddata initial_user
python manage.py loaddata initial_project_templates
python manage.py loaddata initial_role
python manage.py compilemessages
python manage.py collectstatic –noinput

Isto irá criar um novo usuário com o nome admin e senha 123123.

Caso necessário instale os módulos solicitados exemplo:

pip install cssselect e pip install html5lib

Para dados de exemplo, execute o seguinte comando. Este comando irá popular o banco de dados com projetos e dados de exemplo como demonstração:

python manage.py sample_data

Para finalizar a Configuração do taiga-back, devemos criar a configuração inicial para os repositórios de arquivos static/media e para envio de email:

Crie o arquivo e deixe com os dados a seguir:

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

Banco de dados na Máquina:

from .common import *

MEDIA_URL = “http://localhost/media/”
STATIC_URL = “http://localhost/static/”
ADMIN_MEDIA_PREFIX = “http://localhost/static/admin/”
SITES[“front”][“scheme”] = “http”
SITES[“front”][“domain”] = “localhost”

SECRET_KEY = “suaSenhaAqui”
DEBUG = False
TEMPLATE_DEBUG = False
PUBLIC_REGISTER_ENABLED = True

DEFAULT_FROM_EMAIL = “no-reply@example.com”
SERVER_EMAIL = DEFAULT_FROM_EMAIL

# 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”

Banco de dados Remoto:

from .common import *

MEDIA_URL = “http://localhost/media/”
STATIC_URL = “http://localhost/static/”
ADMIN_MEDIA_PREFIX = “http://localhost/static/admin/”
SITES[“front”][“scheme”] = “http”
SITES[“front”][“domain”] = “localhost”

SECRET_KEY = “suaSenhaAqui”
DEBUG = False
TEMPLATE_DEBUG = False
PUBLIC_REGISTER_ENABLED = True

DATABASES = {
“default”: {
“ENGINE”: “transaction_hooks.backends.postgresql_psycopg2”,
“NAME”: “taiga”,
‘USER’: ‘taiga’,
‘PASSWORD’: ‘SuaSenha’,
‘HOST’: ‘localhost’,
‘PORT’: ‘5432’,
}
}

DEFAULT_FROM_EMAIL = “no-reply@example.com”
SERVER_EMAIL = DEFAULT_FROM_EMAIL

# 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”

3.4.    VERIFICAR INSTALAÇÃO

Para verificar se a instalação do backend ocorreu com sucesso inicie em modo de desenvolvimento:

workon taiga
python manage.py runserver

Faça o testes acessando o endereço http://localhost:8000/api/v1/ deverá retornar um json representando com a lista de endpoints.

Nota: Este estágio do backend já foi instalado com sucesso. Porém, a instalação ainda não está completa. Aplicações em produção com o python precisam roda em um servidor de aplicação. Os detalhes serão explicados no final deste documento.

4.    INSTALAÇÃO DO FRONTEND

Baixaremos o código do github:
cd ~
git clone https://github.com/taigaio/taiga-front-dist.git taiga-front-dist
cd taiga-front-dist
git checkout stable

Agora podemos configurar copiando ~/taiga-front-dist/dist/conf.example.json para  ~/taiga-front-dist/dist/conf.json

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

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

Copie e edite as configurações iniciais:

{
“api”: “http://localhost:8000/api/v1/”,
“eventsUrl”: null,
“eventsMaxMissedHeartbeats”: 5,
“eventsHeartbeatIntervalTime”: 60000,
“debug”: true,
“debugInfo”: false,
“defaultLanguage”: “pt-br”,
“themes”: [“taiga”],
“defaultTheme”: “taiga”,
“publicRegisterEnabled”: true,
“feedbackEnabled”: true,
“privacyPolicyUrl”: null,
“termsOfServiceUrl”: null,
“maxUploadFileSize”: null,
“contribPlugins”: []
}

Agora temos o taiga-front-dist baixado e configurado. O próximo passo é expor o código (do diretório dist) em um servidor web. Usaremos o nginx.

5.    EXPONDO SUA APLICAÇÃO EM UM SERVIDOR WEB

Após a instalação e configuração do taiga-back e do taiga-front-dist devemos configurar o servidor para expor nossas aplicações.

O taiga-back deve roda e ser monitorado por um gerenciador de processos. Para isso usaremos o gunicorn e o circus. respectivamente.

5.1.    Circus e Gunicorn

O Circus é um gerenciador de processos desenvolvido pela Mozilla que usaremos para executar o gunicorn. Circus não apenas executa processo, também é útil para monitora-los, coletar logs, reiniciar processos se algo der errado e iniciar processo com o sistema operacional.

Instalar circus

#pip2 install circus

Ou sudo pip2 install circus

Criar a pasta para configuração

mkdir –p ~/conf/

Adicione as configurações iniciar no arquivo:

nano ~/conf/circus.ini

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

[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.4/site-packages

Crie a pasta para receber os logs do Taiga:

mkdir –p ~/logs

Configurar o Circus para iniciar com o sistema operacional em

nano /etc/init/circus.conf

start on filesystem and net-device-up IFACE=lo
stop on runlevel [016]

respawn
exec /usr/local/bin/circusd /home/taiga/conf/circus.ini

Crie o circus service:

nano /etc/systemd/system/circus.service

[Unit]
Description=Circus process manager
After=syslog.target network.target nss-lookup.target

[Service]
Type=simple
ExecReload=/usr/local/bin/circusctl reload
ExecStart=/usr/local/bin/circusd /home/taiga/conf/circus.ini
Restart=always
RestartSec=5

[Install]
WantedBy=default.target

Finalizando execute os comandos:

systemctl daemon-reload

systemctl enable circus

service circus start

5.2.    Nginx

Nginx é um servidor web para páginas estáticas que é utilizado para prover o taiga-front-dist e enviar proxy requests para o taiga-back.

Para instalar o nginx execute o comando:

apt-get install –y nginx

Configurando o nginx

Adicionando as configurações especificas para taiga-fron-dist e taiga-back:

server {
listen 80 default_server;
listen 8000
server_name _;

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

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

Desabilite o site padrão do nginx(virtualhost).

rm /etc/nginx/sites-enabled/default

Habilite a configuração do taiga.

ln -s /etc/nginx/sites-available/taiga /etc/nginx/sites-enabled/taiga

reinicie o servidor nginx

systemctl reload nginx

6.    OPCIONAIS

6.1.    Funcionalidades Assíncronas

O funcionamento padrão do Taiga é realizar todas as tarefas de maneira síncrona. Para conseguir tal comportamento e necessário instalar e configurar o as dependências do serviço celery.

Instale rabbitmq-server e redis-server:

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

Para rodar o celery com o taiga é necessário acrescentar as linhas abaixo no arquivo local.py:

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

from .celery import *

BROKER_URL = ‘amqp://guest:guest@localhost:5672//’
CELERY_RESULT_BACKEND = ‘redis://localhost:6379/0’
CELERY_ENABLED = True

E as seguintes linhas no arquivo ~/conf/circus.ini

nano ~/conf/circus.ini

[watcher:taiga-celery]
working_dir = /home/taiga/taiga-back
cmd = celery
args = -A taiga worker -c 4
uid = taiga
numprocesses = 1
autostart = true
send_hup = true
stdout_stream.class = FileStream
stdout_stream.filename = /home/taiga/logs/celery.stdout.log
stdout_stream.max_bytes = 10485760
stdout_stream.backup_count = 4
stderr_stream.class = FileStream
stderr_stream.filename = /home/taiga/logs/celery.stderr.log
stderr_stream.max_bytes = 10485760
stderr_stream.backup_count = 4

[env:taiga-celery]
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.4/site-packages

Como usuário root rode os comando abaixo para carregar as novas configurações e iniciar o taiga-celery:

circusctl reloadconfig
circusctl restart taiga
circusctl start taiga-celery

6.2.    EVENTOS

Taiga-events é o websocket server do taiga, ele permite que o taiga-font mostre alterações em tempo rela no backlog, quadro de tarefas, kanban e na lista de casos.

O taiga-events precisa do rabbitmq:

apt-get install rabbitmq-server

Com o root rode os comandos:

rabbitmqctl add_user taiga SenhaDoTaiga
rabbitmqctl add_vhost taiga
rabbitmqctl set_permissions -p taiga taiga “.*” “.*” “.*”

Acrescente as linhas abaixo no arquivo local.py:

nano ~/taiga-back/setting/loca.py

EVENTS_PUSH_BACKEND = “taiga.events.backends.rabbitmq.EventsPushBackend”
EVENTS_PUSH_BACKEND_OPTIONS = {“url”: “amqp://taiga:SuaSenha@localhost:5672/taiga”}

Baixe o código do taiga-events do github:

cd ~
git clone https://github.com/taigaio/taiga-events.git taiga-events
cd taiga-events

Instale as dependências necessárias para javascript:

apt-get install -y nodejs nodejs-legacy npm
npm install
npm install -g coffee-script

Edite o conf.json do taiga-events e acrescente as linhas abaixo:

cd ~/taiga-events
cp conf.exemplo.json conf.json
nano ~/taiga-events/conf.json

{
“url”: “amqp://taiga:SuaSenha@localhost:5672/taiga”,
“secret”: “SuaSenha”,
“webSocketServer”: {
“port”: 8888
}
}

Adicione o taiga-events nas configurações no circus:

nano ~/conf/circus.ini

[watcher:taiga-events]
working_dir = /home/taiga/taiga-events
cmd = /usr/local/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

Carregue as configurações do circus e inicie o serviço taiga-events:

Como usuário root;

circusctl reloadconfig
circusctl restart taiga
circusctl restart taiga-celery
circusctl start taiga-events

Adicione as configurações abaixo para o taiga-events no nginx:

nano /etc/nginx/sites-avaliable/taiga

server {

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

}

Reinicie o servidor nginx:

service nginx reload

6.3.    CONFIGURAR E-MAIL

A configuração do e-mail deve ser feita no arquivo local.py:

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

descomente ao acrescente as linhas abaixo:

EMAIL SETTINGS EXAMPLE#EMAIL_BACKEND = ‘django.core.mail.backends.smtp.EmailBackend’
EMAIL_USE_TLS = False
EMAIL_HOST = ‘localhost’
EMAIL_PORT = 25
EMAIL_HOST_USER = ‘seuUsuario’
EMAIL_HOST_PASSWORD = ‘suaSenha’
DEFAULT_FROM_EMAIL = john@doe.com

Reinicie o servidor nginx:

service nginx reload

6.4.    AUTENTICAÇÃO COM LDAP

Para realizar configuração do LDAP no taiga é utilizado o plugin ldap Auth.

Instalação:

No virtualenv do taiga-back instale o pacote com o pip:

pip install  taiga-contrib-ldap-auth

Configure o local.py:

INSTALLED_APPS += [“taiga_contrib_ldap_auth”]

LDAP_SERVER = ‘ldap://ldap.example.com’
LDAP_PORT = 389

# Full DN of the service account use to connect to LDAP server and search for login user’s account entry
# If LDAP_BIND_DN is not specified, or is blank, then an anonymous bind is       attempated
LDAP_BIND_DN = ‘CN=SVC Account,OU=Service Accounts,OU=Servers,DC=example,DC=com’
LDAP_BIND_PASSWORD = ‘replace_me’   # eg.
# Starting point within LDAP structure to search for login user
LDAP_SEARCH_BASE = ‘OU=DevTeam,DC=example,DC=net’
# LDAP property used for searching, ie. login username needs to match value in sAMAccountName property in LDAP
LDAP_SEARCH_PROPERTY = ‘sAMAccountName’
LDAP_SEARCH_SUFFIX = None # ‘@example.com’

# Names of LDAP properties on user account to get email and full name
LDAP_EMAIL_PROPERTY = ‘mail’
LDAP_FULL_NAME_PROPERTY = ‘name’

No taiga-front altere dist/js/conf.json acrescente a linha:


“loginFormType”: “ldap”,

Reinicie o servidor nginx:

service nginx reload

Realizada configuração do seu ambiente Taiga.

7.    ATUALIZAR TAIGA PARA ÚLTIMA VERSÃO ESTÁVEL

Frontend
cd ~/taiga-front-dist
git checkout stable
git pull

Backend

Como usuário “taiga” ou outro usado na instalação, não execute como root.

cd ~/taiga-back
git checkout stable
workon taiga
git pull
pip install –upgrade -r requirements.txt
python manage.py migrate –noinput
python manage.py compilemessages
python manage.py collectstatic –noinput

circusctl reload taiga

Caso use o celery:

circusctl reload taiga

Segui tutorial disponível em:

https://taigaio.github.io/taiga-doc/dist/upgrades.html

8.    PERGUNTAS E RESPOSTAS (FAQS)

Perguntas frequentes disponível em:

https://taigaio.github.io/taiga-doc/dist/setup-faqs.html#faq-maintain-update

Este tutorial é baseado no disponível em:

https://taigaio.github.io/taiga-doc/dist/setup-production.html

Criado e Testado por Thiago Santos de Amorim

comentários
  1. Álvaro disse:

    Qual o usuário e senha padrão do Taiga?

  2. Oi Álvaro, o usuário padrão do taiga: admin
    Senha: 123123

  3. Alex Espitia disse:

    buenos dias, realice todos los pasos de la instalación y no logro que se visualice o abrir taiga por el navegador lo realice o lo instale en una maquina en debian 9 no he tenido suerte, por favor si me puede orientar, gracias.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s