Blog de Contraslash (Legacy)

Configurando Taiga

August 19, 2016

Configurando Taiga

Taiga es un Software de Manejo de Proyectos desarrollado en Python y Django, de código abierto. La instalación oficial puede encontrarse aquí

Requerimientos de Sistema Operativo

Requerimientos en el servidor web

sudo apt-get install -y build-essential binutils-doc autoconf flex bison libjpeg-dev
sudo apt-get install -y libfreetype6-dev zlib1g-dev libzmq3-dev libgdbm-dev libncurses5-dev
sudo apt-get install -y automake libtool libffi-dev curl git tmux gettext
sudo apt-get install libpq-dev

Requerimientos en el servidor de base de datos

sudo apt-get install -y postgresql-9.3 postgresql-contrib-9.3
sudo apt-get install -y postgresql-doc-9.3 postgresql-server-dev-9.3

Configuración de usuarios en la base de datos

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

Requerimientos de Python

sudo apt-get install -y python3 python3-pip python-dev python3-dev python-pip virtualenvwrapper
sudo apt-get install libxml2-dev libxslt-dev

Crear el ambiente virtual con Python 3.4

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

Descargue el proyecto taiga-back

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

Instalar las dependencias con pip

pip install -r requirements.txt

Copiar el archivo de configuracion local

cp settings/local.py.example settings/local.py

Configurar la base de datos en settings/local.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'taiga',
        'USER': 'taiga',
        'PASSWORD': 'Secret',
        'HOST': 'IP.DEL.SERVER.BD',
        'PORT': '5432',
    }
}

Si se tienenen problemas con la conexión, se puede revisar este enlace

Llenar la base de datos con la información inicial requerida

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

Terminar la configuración del archivo local.py

from .common import *

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

SECRET_KEY = "theveryultratopsecretkey"

DEBUG = False
TEMPLATE_DEBUG = False
PUBLIC_REGISTER_ENABLED = True

DEFAULT_FROM_EMAIL = "no-reply@example.com"
SERVER_EMAIL = DEFAULT_FROM_EMAIL

Configuración de Apache

Creamos un nuevo ambiente virtual en /etc/apache2/sites-aviable/api.example.com Con el siguiente contenido

<VirtualHost *:80>
    ServerName api.example.com
    ServerAdmin ma0@contraslash.com

    WSGIDaemonProcess apiprojects.contraslash.com processes=2 threads=15 display-name=%{GROUP} python-path=/ruta/a/taiga-back:/ruta/a/virtualenv/taiga/lib/python3.4/site-packages
    WSGIProcessGroup example.com

    WSGIScriptAlias / /ruta/a/taiga-back/taiga/wsgi.py

    <Directory /ruta/a/taiga-back>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    Alias /media/   /var/www/html/api.example.com/media/
    Alias /static/  /var/www/html/api.example.com/static/

    <Directory /var/www/html/api.example.com/media>
        Options -Indexes
        Require all granted
    </Directory>

    <Directory /var/www/html/api.example.com>
                Options -Indexes
                Require all granted
        </Directory>
    <Location "/media/">
        Options -Indexes
    </Location>


    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

active el sitio con y recargue apache

sudo a2ensite example.com
sudo apache2 reload

Pruebe el sitio en example.com/api/v1/

Exponga el Front end

Descargue el sitio taiga-front

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

Copiar el archivo de configuración

cp dist/conf.example.json dist/conf.json

Modificar el archivo de configuración dist/conf.json

{
    "api": "http://api.example.com/api/v1/",
    "eventsUrl": "ws://example.com/events",
    "debug": "true",
    "publicRegisterEnabled": true,
    "feedbackEnabled": true,
    "privacyPolicyUrl": null,
    "termsOfServiceUrl": null,
    "maxUploadFileSize": null,
    "contribPlugins": []
}

Exponga la carpeta dist para que sea alcanzable por su navegador web

Cree el archivo /etc/apache2/sites-aviable/example.com con el siguiente contenido

<VirtualHost *:80>

    ServerName example.com
    ServerAdmin webmaster@example.com
    DocumentRoot /var/www/html/example.com/

    <Directory /var/www/html/example.com/>
        Options -Indexes +FollowSymLinks
            AllowOverride All
        Require all granted
        </Directory>



    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Asegúrese de tener el modulo rewrite activado

sudo a2enmod rewrite
sudo apache2 restart

Recargue la configuración de apache

service apache2 reload

Por último añada el archivo .htacces en su document_root

<IfModule mod_rewrite.c>    
    RewriteEngine on
    RewriteBase /
        RewriteCond %{REQUEST_URI} !^/static(.*)
        RewriteCond %{REQUEST_URI} !^/media(.*)
        RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ /index.html [L]
</IfModule>

TrubleShooting

Para que Apache2 pueda ejecutar una aplicación de python3 debe tener instalado el siguiente paquete

sudo apt-get install libapache2-mod-wsgi-py3

Tenga en cuenta que este paquete sobre escribe el móduglo mod_wsgi así que si tiene algunos otros sitios con python2 no es recomendable desplegar con este método