Instalación y configuración de Teambox en openSUSE

En mi búsqueda de una herramienta web que permitiese gestionar nuestros objetivos, actividades, inversiones de horas de trabajo, etc. he encontrado y probado Teambox.

Con la particularidad de contar con una interfaz muy simple y sencilla orientado a redes sociales, Teambox es una excelente herramienta para la gestión de proyectos colaborativos de desarrollo.

La funcionalidad que ofrece Teambox se centra en la administración de tareas entre los miembros de un equipo de trabajo, mantener registro de la duración de tiempo de las actividades, crear wiki's, compartir archivos, realizar comentarios, entre otros.


Requisitos de instalación

  1. Debemos instalar una serie de paquetes que son fundamentales para poder ejecutar la aplicación web, entre ellos se destacan los paquetes relacionados con el lenguaje de programación Ruby, su sistema de gestión de dependencias y el módulo para Apache. El comando de instalación es el siguiente:
    testsrv:~ # zypper install libxml2 libxml2-devel libxslt1 libxslt-devel mysql-community-server libmysqld-devel sqlite3 sqlite3-devel postgresql-devel apache2 apache2-devel apache2-prefork libcurl-devel ImageMagick ImageMagick-devel git gcc gcc-c++ ruby rubygems rubygem-passenger rubygem-passenger-apache2 rubygem-passenger-nginx
  2. Teambox soporta múltiples bases de datos, sin embargo, para este ejemplo he utilizado MySQL instalado en el mismo servidor. La guía de pasos de instalación y configuración de MySQL para openSUSE la pueden encontrar en el resumen de guías de este blog.


Instalación y configuración de la herramienta

  1. Para este ejemplo la instalación de la herramienta web Teambox se va a llevar a cabo en el directorio /opt, para ello nos debemos ubicar en dicho directorio.
    testsrv:~ # cd /opt/
    testsrv:/opt #

  2. Obtenemos el código fuente y las dependencias clonando el proyecto a partir de Github.
    testsrv:/opt # git clone http://github.com/teambox/teambox.git
  3. Una vez concluida la descarga accedemos al directorio teambox creado en el paso anterior.
    testsrv:/opt # cd teambox/
  4. Dentro del directorio teambox debemos elegir la rama de desarrollo que queremos instalar, ya que el código fuente dispone dos opciones, una rama estable llamada master ideal para entornos de producción y otra rama más inestable en estado de desarrollo pero con las últimas funcionalidades. Obviamente en esta guía vamos a utilizar la rama master que es la más adecuada para un entorno laboral, para nuestro entorno de producción:
    testsrv:/opt/teambox # git checkout master
  5. Necesitamos instalar la aplicación bundler mediante el gestor de paquetes de Ruby llamado gem:
    testsrv:/opt/teambox # gem install bundler
  6. Pasamos a instalar todas las gemas ruby que requiere la herramienta Teambox para su funcionamiento (dependiencias), esto lo realizamos ejecutando el siguiente comando:
    testsrv:/opt/teambox # bundle install --deployment
  7. ATENCIÓN: Si no ha tenido problemas en el paso anterior puede saltar directamente al siguiente paso, pero si ha utilizado la versión 12.1 de openSUSE es muy probable que tenga problemas con la instalación de la gema gherkin-2.3.3, que es un requisito de la herramienta.

    Para solucionar este problema vamos a instalar la gema manualmente, pero primero vamos a remover esa gema de la lista de dependencias para poder terminar de instalar las demás dependencias. Para ello primero editamos el Gemfile.lock,
    testsrv:/opt/teambox # vi +119 Gemfile.lock
    y comentamos la línea que hace referencia a la dependencia gherkin:
        #gherkin (2.3.3)
    Luego volvemos a ejecutar el comando del paso anterior para terminar de instalar las dependencias:
    testsrv:/opt/teambox # bundle install --deployment
    Necesitamos tener instalado el analizador léxico Ragel, para ello agregamos el repositorio Development Tools al gestor de paquetes y procedemos con su instalación.
    testsrv:/opt/teambox # zypper ar -c -n 'Devel Tools' http://download.opensuse.org/repositories/devel:/tools:/building/openSUSE_12.1/ DevelTools
    testsrv:/opt/teambox # zypper in ragel6

    Luego desinstalamos el paquete bundler para reinstalar la versión 1.0.7 del mismo. Posteriormente instalamos otras dependencias necesarias:
    testsrv:/opt/teambox # gem uninstall bundler -v 1.1.4
    testsrv:/opt/teambox # gem install bundler -v 1.0.7
    testsrv:/opt/teambox # gem install rspec -v 2.3.0
    testsrv:/opt/teambox # gem install json -v 1.4.6
    testsrv:/opt/teambox # gem install rake-compiler -v 0.7.5
    testsrv:/opt/teambox # gem install awesome_print -v 0.2.1
    testsrv:/opt/teambox # gem install term-ansicolor -v 1.0.5
    testsrv:/opt/teambox # gem install builder -v 3.0.0
    testsrv:/opt/teambox # gem install cucumber -v 0.10.0
    testsrv:/opt/teambox # gem install rake -v 0.8.7

    Ahora debemos dirigirnos al directorio /opt/teambox/vendor/bundle/ruby/1.8/gems de Teambox...
    testsrv:/opt/teambox # cd vendor/bundle/ruby/1.8/gems/
    Donde vamos a crear un enlace simbólico del paquete cucumber:
    testsrv:/opt/teambox/vendor/bundle/ruby/1.8/gems # ln -s cucumber-0.10.0/ cucumber
    Luego entramos en el directorio gherkin-2.3.3,
    testsrv:/opt/teambox/vendor/bundle/ruby/1.8/gems # cd gherkin-2.3.3/
    Vemos la versión de Ruby y editamos el archivo java_libs.rb:
    testsrv:/opt/teambox/vendor/bundle/ruby/1.8/gems/gherkin-2.3.3 # ruby -v
    ruby 1.8.7 (2011-12-28 patchlevel 357) [i586-linux]
    testsrv:/opt/teambox/vendor/bundle/ruby/1.8/gems/gherkin-2.3.3 # vi spec/gherkin/java_libs.rb
    En la validación unless RUBY_VERSION reemplazamos la versión original del archivo por nuestra versión de Ruby, debiendo quedar como sigue:
    unless RUBY_VERSION == '1.8.7'
    Ahora recién vamos a corregir el error de compilación del paquete gherkin-2.3.3 que nos apareció en un principio, que se debe a la versión del compilador GCC y al uso del argumento -Werror durante la compilación nativa del paquete. Para evitar que el problema se presente nuevamente tenemos que editar el archivo compile.rake dentro de la carpeta gherkin-2.3.3/tasks:
    testsrv:/opt/teambox/vendor/bundle/ruby/1.8/gems/gherkin-2.3.3 # vi +70 tasks/compile.rake
    Buscamos la directiva que tiene el argumento -Werror y lo eliminamos debiendo quedar la línea de la siguiente manera:
    $CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc/
    Luego ya podemos proceder con la instalación de la gema ejecutando los siguientes comandos en la secuencia correspondiente:
    testsrv:/opt/teambox/vendor/bundle/ruby/1.8/gems/gherkin-2.3.3 # rake clean
    testsrv:/opt/teambox/vendor/bundle/ruby/1.8/gems/gherkin-2.3.3 # rake install

    Con eso ya está, la gema gherkin-2.3.3 ya debería estar instalada. Podemos verificar su correcta instalación con el siguiente comando:
    testsrv:/opt/teambox/vendor/bundle/ruby/1.8/gems/gherkin-2.3.3 # cd
    testsrv:~ # gem search gherkin


    *** LOCAL GEMS ***

    gherkin (2.3.3)
    Finalmente volvemos a reinstalar la versión actual de la gema bundler de la siguiente forma:
    testsrv:~ # gem install bundler
  8. El siguiente paso es dirigirnos al directorio /opt/teambox/config y crear el archivo con las especificaciones necesarias para la configuración de la base de datos llamado database.yml a partir del archivo plantilla llamado database.example.yml.
    testsrv:~ # cd /opt/teambox/config/
    testsrv:/opt/teambox/config # cp database.example.yml database.yml

  9. Luego procedemos a editar el nuevo archivo database.yml:
    testsrv:/opt/teambox/config # vi database.yml
    y configuramos la directiva password para la sección production, debería quedar similar a lo que sigue:
    production:
    adapter: mysql
    host: localhost
    username: root
    password: contraseña_usuario_root
    database: teambox2_production
  10. Ahora procedemos a crear la base de datos y sus respectivas tablas para la herramienta Teambox en MySQL (que debe estar ejecutándose, lista para usarse), esto lo hacemos ejecutando el siguiente comando en el directorio /opt/teambox.
    testsrv:~ # cd /opt/teambox
    testsrv:/opt/teambox # bundle exec rake db:create db:schema:load RAILS_ENV=production

  11. Luego pasamos a configurar la propia herramienta Teambox mediante su archivo de configuración teambox.yml ubicado en el directorio /opt/teambox/config. Primero editamos el archivo de configuración:
    testsrv:~ # vi /opt/teambox/config/teambox.yml
    Una vez dentro del archivo configuramos las siguientes directivas:
    app_domain: teambox.mi_dominio.local
    time_zone: Georgetown
    default_locale: :es
    smtp_settings:
    :domain: gmail.com
    :address: smtp.gmail.com
    :port: 587
    :authentication: :plain
    :user_name: nombre_usuario@gmail.com
    :password: contraseña_usuario
    :enable_starttls_auto: true
    Entre las configuraciones más importantes se destacan la directiva app_domain y las configuraciones de las subdirectivas smtp_settings, estas últimas permiten definir el servidor smtp mediante el cual la herramienta enviará las notificaciones por correo electrónico. Finalmente guardamos los cambios y salimos del archivo de configuración con lo cual culminamos con la configuración de la herramienta Teambox.


Configuración de Apache

  1. Lo primero que debemos hacer es habilitar el módulo passenger de Ruby para que Apache pueda ejecutar la herramienta web Teambox, para ello editamos el archivo /etc/sysconfig/apache2:
    testsrv:~ # vi /etc/sysconfig/apache2
  2. Una vez en el archivo de configuración buscamos la directiva APACHE_MODULES y al final de la lista le agregamos el módulo passenger, debería quedar similar a lo que sigue:
    APACHE_MODULES="actions alias ... ssl userdir php5 passenger"

ACCESO MEDIANTE HOSTS VIRTUALES:

Si deseamos que Apache sirva el sitio web de Teambox a través de un nombre de dominio totalmente cualificado (FQDN: Fully Qualified Domain Name) resuelto a través de servidores de nombres (DNS) internos o externos podemos configurar un host virtual para dicho fin. Para ello podemos seguir los siguientes pasos:
  1. Nos dirigimos al directorio /etc/apache2/vhosts.d y creamos un nuevo archivo llamado vhost.conf:
    testsrv:~ # cd /etc/apache2/vhosts.d
    testsrv:/etc/apache2/vhosts.d # touch vhost.conf

  2. Editamos el archivo con nuestro editor de texto preferido..
    testsrv:/etc/apache2/vhosts.d # vi vhost.conf
    Y luego agregamos las siguientes directivas:
    # -- ES NECESARIO DEFINIR LA DIRECTIVA NameVirtualHost CUANDO
    # SE CONFIGURAN HOSTS VIRTUALES BASADOS EN NOMBRES.

    NameVirtualHost *:80

    # -- CONFIGURACION DEL HOST VIRTUAL POR DEFECTO, QUE APUNTA
    # A LA RUTA TRADICIONAL.

    <VirtualHost *:80>
    ServerName testsrv
    ServerAlias testsrv *.testsrv
    DocumentRoot /srv/www/htdocs
    </VirtualHost>

    # -- CONFIGURACION DEL VIRTUAL HOST PARA TEAMBOX
    <VirtualHost *:80>
    Options +Indexes
    ServerAdmin nombre_usuario@gmail.com
    ServerName teambox
    ServerAlias teambox.mi_dominio.local *.teambox.mi_dominio.local teambox *.teambox
    DocumentRoot /opt/teambox/public
    RailsEnv production

    <Directory "/opt/teambox/public">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    Options -MultiViews
    </Directory>
    </VirtualHost>
  3. Con esto ya tenemos el servidor web configurado con soporte virtual host.

ACCESO MEDIANTE SUBDIRECTORIO:

Una opción alternativa a la configuración de un host virtual de Apache para desplegar Teambox es utilizar una configuración más tradicional, definiendo el acceso a dicha herramienta a través de un subdirectorio posterior al dominio o dirección IP de nuestro servidor web.
  1. Como primer paso, nos dirigimos al directorio /etc/apache2/conf.d y creamos un nuevo archivo llamado teambox.conf:
    testsrv:~ # cd /etc/apache2/conf.d
    testsrv:/etc/apache2/conf.d # touch teambox.conf

  2. Editamos el archivo teambox.conf:
    testsrv:/etc/apache2/conf.d # vi teambox.conf
    Y le agregamos la siguiente configuración:
    # -- ALIAS DEL SUBDIRECTORIO APUNTANDO A LA RUTA REAL DE
    # LA HERRAMIENTA TEAMBOX.

    Alias /teambox /opt/teambox/public

    # -- DEFINICION DEL ENTORNO RAILS.
    RailsEnv production
    RailsBaseURI /teambox

    # -- CONFIGURACIONES DEL DIRECTORIO DE TRABAJO.
    <Directory "/opt/teambox/public">
    Options -MultiViews +FollowSymLinks +SymLinksIfOwnerMatch
    AllowOverride All
    Order allow,deny
    Allow from all
    </Directory>
  3. Creamos un enlace simbólico del directorio /opt/teambox/public al directorio /srv/www/htdocs:
    testsrv:/etc/apache2/conf.d # ln -s /opt/teambox/public /srv/www/htdocs/teambox
  4. Para utilizar este método debemos ajustar la configuración de la herramienta web Teambox, específicamente la directiva app_domain del archivo /opt/teambox/config/teambox.yml deberá ser configurada con el dominio basado en subdirectorios. Para ello editamos nuevamente el archivo /opt/teambox/config/teambox.yml:
    testsrv:/etc/apache2/conf.d # vi /opt/teambox/config/teambox.yml
    y configuramos la directiva app_domain de forma parecida a lo que se muestra a continuación:
    app_domain: ip_o_nombre_dominio_servidor/teambox/
    Guardamos los cambios y salimos del archivo para continuar con las demás configuraciones.

  5. Autorizamos al servicio Apache para que tenga permisos de edición sobre el directorio /opt/teambox/public:
    testsrv:~ # chown -Rf wwwrun:www /opt/teambox/public/
  6. Y finalmente procedemos a activar los niveles de ejecución e iniciar el servicio apache2 de la siguiente manera:
    testsrv:~ # chkconfig --add apache2
    testsrv:~ # service apache2 start



Configuración del cortafuegos

  1. Para que podamos acceder a la herramienta remotamente necesitamos abrir los puertos HTTP (80) y HTTPS (443) en el firewall del servidor, para ello editamos el archivo SuSEfirewall2 del directorio /etc/sysconfig:
    testsrv:~ # vi /etc/sysconfig/SuSEfirewall2
    y le asignamos los servicios apache2 y apache2-ssl a la directiva FW_CONFIGURATIONS_EXT como se muestra a continuación:
    FW_CONFIGURATIONS_EXT="sshd apache2 apache2-ssl"
  2. Luego reiniciamos el cortafuegos para que la nueva configuración tome efecto, lo realizamos con el siguiente comando:
    testsrv:~ # rcSuSEfirewall2 restart


Acceso a Teambox

  1. Si para acceder a la herramienta Teambox hemos configurado el servicio Apache con virtual hosts, debemos utilizar el nombre de dominio totalmente cualificado que hemos definido y que debe ser correctamente resuelto por algún servidor DNS o mediante el contenido del archivo /etc/hosts en la máquina cliente que intentará conectarse a la herramienta. Como ejemplo podríamos tener la siguiente URL:
    http://teambox.mi_dominio.local
  2. Si en el caso contrario hemos configurado el acceso a la herramienta Teambox mediante un subdirectorio en Apache, la URL deberá ser similar a la siguiente:
    http://ip_o_nombre_dominio_servidor/teambox
  3. Al acceder a la URL nos estará avisando de algunos problemas de configuración (si es que los hay) y que tenemos que crear un usuario administrador. Para crear la cuenta nos solicitará varios datos, todo esto visible en las siguientes dos capturas:
  4. Si el sistema de notificaciones de la herramienta está bien configurado, la misma nos debería enviar un correo a la cuenta que especificamos en el paso anterior para confirmar la creación del usuario administrador. Una vez confirmado el correo podemos conectarnos a Teambox. Ambos casos se muestra en las siguientes capturas:
  5. Con esto la herramienta ya debería funcionar. A continuación les dejo con la captura de bienvenida y otra de la herramienta Teambox en pleno funcionamiento:




Fuentes



Enlaces externos

Comentarios

  1. sos un genio, te estoy leyendo desde esta mañana y me acabo de percatar de que sos un paisano, gracias a vos pude solucionar mi problema, saludos desde asunción

    ResponderEliminar
    Respuestas
    1. Hola Balem, que suerte que hayas podido solucionar tu problema, hace poco actualicé la guía de esta herramienta y me encontré con el problema del paquete gherkin-2.3.3, me llevó tiempo encontrarle la vuelta pero al menos aprendí un poco más sobre RoR xD.

      Saludos desde Itapúa...

      Eliminar
  2. PAra evitar el problema con gherkin2.3.3 hay otra opción, que es modificar el fichero Gemfile.lock. En vez de comentar la linea, reemplazar la version por la 2.3.6

    gherkin (2.3.6)

    guardar el fichero i ejecutar:

    bundle install --deployment


    De esta forma (almenos en mi caso) me ahorré el tedioso arreglillo que se comenta aquí :p

    Saludos! Y gracias por el Howto!

    ResponderEliminar
    Respuestas
    1. Gracias a ti German por comentar y aportar al artículo, sinceramente yo lo solucioné como podía y probablemente no de la forma más óptima, así que se agradece tu contribución.

      Saludos y éxitos!

      Eliminar

Publicar un comentario