- 0

Instalar YouTrack como un servicio en Linux

Instalar YouTrack como un servicio en Linux

Tags

Hola que tal!.

YouTrack (A.K.A YT) es un gestor de proyectos increíble. Hace ya como 6 años que lo uso y es indispensable para mi y mi grupo de trabajo a la hora de llevar un proyecto.

En esta ocasión les voy a mostrar los pasos para instalar la versión stand alone en tu propio servidor linux.

1. Creamos un usuario

Vamos a evitar ser unos bestias y vamos a usar un user de sistema creado específicamente para ejecutar el servicio de YT. Así nos evitamos que nos escalen privilegios por ese lado.

adduser youtrack --disabled-password

2. Creamos un directorio donde poner YouTrack

mkdir -p /usr/local/youtrack

/usr/local/ es un buen lugar para poner un servicio nuevo :)

Descarga y copia el jar de YT en este directorio y luego:

NOTA: el archivo se va a llamar algo así como youtrack-6.5.17031.jar pero no lo renombres. Déjalo como está que el script que va a referenciarlo va a ser lo suficientemente inteligente como para encontrarlo.

3. Creamos los script para convertirlo en un servicio

YouTrack es un jar, y se puede lanzar por consola haciendo algo como java -jar youtrack.jar pero apenas reinicies el servidor o se cuelgue YT va a dejar de correr y vas a tener que lanzarlo a mano... no es muy eficiente. Mejor si creamos un service en Linux que se encargue de cargarlo reiniciarlos y todo lo demás que suelen hacer los services.

Para lograr esto tenemos que crear dos archivitos y poco mas:

1:  El service wrapper

Este archivo es una tontería. Se encarga de pasar los comandos al segundo archivo que vamos a crear. Pero paso a paso. Crea /etc/init.d/youtrack y pega lo siguiente:

export HOME=/home/youtrack

set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=youtrack
SCRIPT=/usr/local/$NAME/$NAME.sh

d_start() {
    su youtrack -l -c "$SCRIPT start"
}

d_stop() {
    su youtrack -l -c "$SCRIPT stop"
}

case "$1" in
  start)
    echo "Starting $NAME..."
    d_start
    ;;
    stop)
    echo "Stopping $NAME..."
    d_stop
    ;;
  restart|force-reload)
    echo "Restarting $NAME..."
    d_stop
    d_start
    ;;
  *)
    echo "Usage: sudo /etc/init.d/youtrack {start|stop|restart}" >&2
    exit 1
    ;;
esac

exit 0

No te preocupes que no hay nada que tocar aquí. Guárdalo y pasemos al siguiente archivo:

2: El service en si mismo

Crea /usr/local/youtrack/youtrack.sh y pega lo siguiente:

#! /bin/sh

export HOME=/home/youtrack
export JAVA_HOME=/usr

NAME=youtrack
PORT=8112
USR=/usr/local/$NAME
JAR=$USR/`ls -Lt $USR/*.jar | grep -o "$NAME-[^/]*.jar" | head -1`
LOG=$USR/$NAME-$PORT.log
PID=$USR/$NAME-$PORT.pid

d_start() {
    if [ -f $PID ]; then
        PID_VALUE=`cat $PID`
        if [ ! -z "$PID_VALUE" ]; then
            PID_VALUE=`ps ax | grep $PID_VALUE | grep -v grep | awk '{print $1}'`
            if [ ! -z "$PID_VALUE" ]; then
                exit 1;
            fi
        fi
    fi

    PREV_DIR=`pwd`
    cd $USR
    exec $JAVA_HOME/bin/java -Xmx2g -Djava.security.egd=/dev/zrandom -jar $JAR $PORT >> $LOG 2>&1 &
    echo $! > $PID
    cd $PREV_DIR
}

d_stop() {
    if [ -f $PID ]; then
        PID_VALUE=`cat $PID`
        if [ ! -z "$PID_VALUE" ]; then
            PID_VALUE=`ps ax | grep $PID_VALUE | grep -v grep | awk '{print $1}'`
            if [ ! -z "$PID_VALUE" ]; then
                kill $PID_VALUE
                WAIT_TIME=0
                while [ `ps ax | grep $PID_VALUE | grep -v grep | wc -l` -ne 0 -a "$WAIT_TIME" -lt 2 ]
                do
                    sleep 1
                    WAIT_TIME=$(expr $WAIT_TIME + 1)
                done
                if [ `ps ax | grep $PID_VALUE | grep -v grep | wc -l` -ne 0 ]; then
                    WAIT_TIME=0
                    while [ `ps ax | grep $PID_VALUE | grep -v grep | wc -l` -ne 0 -a "$WAIT_TIME" -lt 15 ]
                    do
                        sleep 1
                        WAIT_TIME=$(expr $WAIT_TIME + 1)
                    done
                    echo
                fi
                if [ `ps ax | grep $PID_VALUE | grep -v grep | wc -l` -ne 0 ]; then
                    kill -9 $PID_VALUE
                fi
           fi
        fi
        rm -f $PID
    fi
}

case "$1" in
    start)
        d_start
    ;;
    stop)
        d_stop
    ;;
    *)
        echo "Usage: $0 {start|stop|restart}" >&2
        exit 1
    ;;
esac

exit 0

En este segundo script puedes modificar un par de cositas al principio del mismo. Lo mas habitual es cambiar el puerto (PORT=8112).

4. Activamos el servicio

chown youtrack.youtrack /usr/local/youtrack -R
chmod +x /etc/init.d/youtrack
chmod +x /usr/local/youtrack/youtrack.sh
/usr/sbin/update-rc.d youtrack defaults

Y listo. Ya tenemos a YT como un servicio. Puedes hacer lo típico como arrancarlo, pararlo y reiniciarlo.

sudo service youtrack start
sudo service youtrack restart
sudo service youtrack stop

Notas finales

Como cosa adicional, el servicio vuelca un log de la aplicación en /usr/local/youtrack/youtrack-8112.log, cosa que viene muy bien cuando quieres ver lo que está pasando internamente.

La primara vez que lo arrancas va a tardar como 3 minutos en entregar algo en el navegador. Es normal. Si te aburres mientras puedes hacer un tail para ver como evoluciona el primer deploy XD (tail -f /usr/local/youtrack/youtrack-8112.log)

En /home/youtrack/teamsysdata está la database con todos los issues y attachments que vayas creando.

Chau!