By

EasyTrac, un despliegue automatizado de Trac

Como ya comenté en posts anteriores, en Yaco Sistemas trabajamos a diario con Trac, todas nuestras tareas están en Trac, incluyendo documentación de proyectos, etc; en Yaco Sistemas no eres nadie si no creas una wiki ;-)

Eso está muy bien, ¿pero qué es easyTrac?

EasyTrac es un instalador basado en zc.buildout que despliega un entorno de Trac de forma automatizada incluyendo dependencias necesarias. Este instalador no solo puede ser utilizado para desarrollo sino que también podría utilizarse en un sistema de producción ya que los proyectos de Trac se despliegan bajo Nginx y uWSGI, con lo que tendremos un sistema bastante rápido, estable y liviano en nuestro sistema. Si es cierto que para poder compilar Nginx y uWSGI, es necesario que se encuentren ciertas librerias de desarrollo en el sistema, por lo que deberemos tener instalados los siguientes paquetes en nuestro sistema:
  • libpcre3-dev
  • libssl-dev
  • libxml2-dev
  • libxslt-dev
  • libsqlite3-dev
  • libzzip-dev
  • libapr1-dev
  • libaprutil1-dev
  • python-dev

Me parece correcto... ¿pero de dónde me lo descargo?

Puedes descargarlo de forma comprimida tanto en formato zip como en formato tar.gz.

O si lo prefieres, puedes hacer un clone con Git de mi repositorio en Github ejecutando lo siguiente:

$ git clone git://github.com/mviera/easyTrac

Vale, ya lo tengo ¿y ahora cómo lo instalo?

EasyTrac se puede instalar tanto como root como con cualquier usuario sin privilegios, ya que la instalación no interferirá para nada en nuestro sistema. Personalmente, prefiero instalar con un usuario sin privilegios. El instalador de easyTrac funciona sin tener que hacer ninguna modificación en la configuración, pero si quieres personalizar la configuración, puedes editar el fichero buildout.cfg y modificar alguno de los siguientes parámetros:
  • nginx-http-port: puerto utilizado por Nginx para escuchar las peticiones vía http.
  • nginx-https-port: puerto a través del cual Nginx escuchará las peticiones vía https (en caso de que quieras usar https).
  • supervisor-http-port: puerto utilizado por Supervisor.
  • host: IP del host o FQDN (Fully Qualified Domain Name)
  • socket-directory: directorio donde se almacenarán los sockets.
  • pid-directory: directorio donde se alojarán los ficheros pid.
  • log-directory: directorio de logs.
  • trac-projects-directory: directorio donde se crearán los proyectos de Trac. Por defecto este directorio es <installdir>/opt/trac/.
  • svn-repository-directory: directorio donde se crearán los repositorios de código SVN. Por defecto, este directorio es <installdir>/opt/svn/.
Una vez instaladas las anteriores dependencias, y configurados los parámetros de configuración, en caso de que quisieras personalizarlos, podemos seguir con la instalación, así que ejecutaremos lo siguiente: $ python bootstrap.py Con esto prepararemos el entorno y una vez hecho, podremos lanzar la instalación ejecutando lo siguiente: $ ./bin/buildout Comenzará el proceso de compilado de Nginx y uWSGI; y la instalación de los módulos de Python necesarios. Además, easyTrac compila Subversion e instala los bindings necesarios para que Trac pueda enlazarse con repositorios de código SVN.

He ido a por un café y al volver ya estaba instalado ¿ahora qué hago?

EasyTrac incluye la instalación de Supervisor. Pero ¿qué es Supervisor? Es un sistema de control de procesos que nos va a permitir arrancar, parar y reiniciar cada uno de nuestros servicios. En easyTrac tendremos dos servicios: Nginx y uWSGI.

La sintaxis de uso de Supervisor es la siguiente:

$ ./bin/supervisorctl

Por lo tanto si quisiéramos iniciar el servicio Nginx, ejecutaríamos lo siguiente:

$ ./bin/supervisorctl start nginx

En caso de querer pararlo, ejecutaremos:

$ ./bin/supervisorctl stop nginx

Y si quisiéramos reiniciarlo:

$ ./bin/supervisorctl restart nginx

Supervisor incluye una palabra especial llamada all que hace referencia a todos los servicios configurados en supervisor. Con ella podremos controlar todos los servicios al mismo tiempo. Por ejemplo, si quisiéramos reiniciar todos los servicios, ejecutaríamos lo siguiente:

$ ./bin/supervisorct restart all

Pero esto no es todo, es que además Supervisor, por si fuera poco, incluye una interfaz web desde la que podemos controlar nuestros servicios. Podremos acceder a ella accediendo a http://localhost:9000

Por defecto, el usuario es admin y la contraseña es admin. (nótese el punto al final de admin). Es posible cambiar estos datos editando la parte [supervisor] en el fichero buildout.cfg y volveremos a ejecutar la instrucción ./bin/buildout

Ya tenemos nuestro entorno listo y accederemos a él a través de

http://localhost:8080

¡Qué bien! ¿y ahora cómo creo un Trac?

Tranquilos, la creación de un proyecto Trac es muy sencilla. Utilizaremos el binario trac-admin creado por el instalador, y que se encuentra en el directorio bin/.

Crearemos un proyecto llamado demo, por lo que ejecutaremos lo siguiente:

$ ./bin/trac-admin opt/trac/demo initenv demo sqlite:db/trac.db

Y ya que estamos, vamos a crear un repositorio SVN con el mismo nombre. Para ello utilizaremos el binario llamado svnadmin que podremos encontrar también en el directorio bin/.

$ ./bin/svnadmin create opt/svn/demo

Fiuf! ahora solo falta que pudiera hacer backups de mis Tracs

Aunque no es una solución feténica, easyTrac cuenta con un comando backup con el que podremos comprimir nuestros proyectos y guardarlos en otra localización. Para ello, simplemente ejecutaremos la siguiente instrucción:

$ ./bin/backup

y todos los proyectos Trac serán comprimidos y guardados en un directorio llamado backups/.

Vale, tengo backups, quiero restaurarlos ¿cómo lo hago?

Tan simple como ejecutar lo siguiente:

$ ./bin/restore backups/backup-file.tar.gz

y todos los tracs serán restaurados automáticamente en el directorio, por defecto, opt/trac/.

No me convence. Quiero desinstalarlo.

Solamente es necesario parar todos los servicios:

$ ./bin/supervisorctl shutdown

y borrar el directorio de instalación:

$ rm -rf easyTrac

And that’s all folks!!! ;-)

Un saludo!