\@writefile{toc}{\contentsline{subsection}{\numberline{15.1}Despliegue del servicio}{34}{subsection.15.1}}
\@writefile{toc}{\contentsline{subsection}{\numberline{15.2}Otras fuentes de documentaci\IeC{\'o}n}{35}{subsection.15.2}}
\@writefile{toc}{\contentsline{subsubsection}{\numberline{15.1.1}Creando una nueva instancia en el CloudStack del CiTIUS}{34}{subsubsection.15.1.1}}
\@writefile{toc}{\contentsline{subsubsection}{\numberline{15.1.2}Configurando la red de la instancia}{35}{subsubsection.15.1.2}}
\@writefile{lof}{\contentsline{figure}{\numberline{22}{\ignorespaces Secci\IeC{\'o}n Network de CloudStack\relax}}{35}{figure.caption.23}}
\newlabel{fig:network}{{22}{35}{Sección Network de CloudStack\relax}{figure.caption.23}{}}
\@writefile{lof}{\contentsline{figure}{\numberline{23}{\ignorespaces Configurar el tr\IeC{\'a}fico hacia el exterior\relax}}{35}{figure.caption.24}}
\newlabel{fig:networkout}{{23}{35}{Configurar el tráfico hacia el exterior\relax}{figure.caption.24}{}}
\@writefile{lof}{\contentsline{figure}{\numberline{24}{\ignorespaces IP's de la red\relax}}{36}{figure.caption.25}}
\newlabel{fig:networkip}{{24}{36}{IP's de la red\relax}{figure.caption.25}{}}
\@writefile{lof}{\contentsline{figure}{\numberline{25}{\ignorespaces Configuraci\IeC{\'o}n de firewall y redirecci\IeC{\'o}n de puertos\relax}}{36}{figure.caption.26}}
\newlabel{fig:networknat}{{25}{36}{Configuración de firewall y redirección de puertos\relax}{figure.caption.26}{}}
\@writefile{lof}{\contentsline{figure}{\numberline{26}{\ignorespaces Configuraci\IeC{\'o}n de firewall\relax}}{37}{figure.caption.27}}
\newlabel{fig:networkfirewall}{{26}{37}{Configuración de firewall\relax}{figure.caption.27}{}}
\@writefile{lof}{\contentsline{figure}{\numberline{27}{\ignorespaces Configuraci\IeC{\'o}n de redirecci\IeC{\'o}n de puertos\relax}}{37}{figure.caption.28}}
\newlabel{fig:networkports}{{27}{37}{Configuración de redirección de puertos\relax}{figure.caption.28}{}}
\@writefile{toc}{\contentsline{subsubsection}{\numberline{15.1.3}Instalando y configurando Tomcat}{37}{subsubsection.15.1.3}}
\@writefile{toc}{\contentsline{subsubsection}{\numberline{15.1.4}Instalando los paquetes necesarios para constru\IeC{\'\i}r y desplegar el demostrador}{38}{subsubsection.15.1.4}}
\@writefile{toc}{\contentsline{subsubsection}{\numberline{15.1.5}Configurando serve como un servicio que arranca al inicio}{38}{subsubsection.15.1.5}}
\@writefile{toc}{\contentsline{subsubsection}{\numberline{15.1.6}Construyendo y desplegando la API REST}{38}{subsubsection.15.1.6}}
\@writefile{lof}{\contentsline{figure}{\numberline{28}{\ignorespaces Secci\IeC{\'o}n de despliegue de Tomcat\relax}}{39}{figure.caption.29}}
\newlabel{fig:desplegar}{{28}{39}{Sección de despliegue de Tomcat\relax}{figure.caption.29}{}}
\@writefile{toc}{\contentsline{subsubsection}{\numberline{15.1.7}Construyendo y desplegando el demostrador}{39}{subsubsection.15.1.7}}
\@writefile{toc}{\contentsline{subsubsection}{\numberline{15.1.8}Evitar problemas de rendimiento}{39}{subsubsection.15.1.8}}
\@writefile{toc}{\contentsline{subsection}{\numberline{15.2}Otras fuentes de documentaci\IeC{\'o}n}{39}{subsection.15.2}}
@@ -1457,7 +1457,172 @@ Se han detectado algunos bugs en el servicio que están identificados en el prop
\subsection{Despliegue del servicio}
El despliegue del servicio está perfectamente documentado en el GitLab del proyecto, en la rama \texttt{ExpliClas-v2}. Sin embargo, debe tenerse en cuenta a la hora de realizar el despliegue real del servicio una cuestión de rendimiento. El servicio está configurado, como ya se ha mencionado, para que carga con la primera petición los léxicos de las librerías de SimpleNLG en los 3 idiomas (inglés, gallego y español). Al realizar esta carga al mismo tiempo, la primera petición se ve claramente perjudicada llegando aproximadamente a los 8 segundos de retardo. Para evitar que los usuarios del sistema experimenten esta carga se recomienda al responsable del despliegue que sea el primero en acceder al servicio solicitando una explicación cualquiera.
La construcción y despliegue del servicio en una máquina local está perfectamente documentado en el GitLab del proyecto, en la rama \texttt{ExpliClas-v2}. Sin embargo, debe tenerse en cuenta a la hora de realizar el despliegue real del servicio los aspectos que se marcan en los siguientes apartados.
\subsubsection{Creando una nueva instancia en el CloudStack del CiTIUS}
Aunque no sería estrictamente necesario, puesto que existe una instancia totalmente configurada y preparada para realizar los nuevos despliegues del servicio, es posible que por algún motivo se necesite crear una nueva instancia.
La creación de la instancia es muy sencilla, de hecho basta con seguir la wiki del CiTIUS \cite{cloudstack} donde se trata dicho aspecto.
\subsubsection{Configurando la red de la instancia}
La configuración de la red es un aspecto un poco más complejo, se puede leer en la wiki del CiTIUS \cite{cloudstackred} los aspectos generales de configuración de la red. Sin embargo, se detallan a continuación los pasos concretos para configurar nuestra instancia.
\begin{enumerate}
\item Seleccionamos \texttt{Network} y seleccionamos la red que queremos configurar, en nuestro caso \texttt{net1}, figura \ref{fig:network}.
\item Vamos a la pestaña \texttt{Egress rules}, donde estableceremos la regla con \texttt{CIDR} igual a \texttt{0.0.0.0/0} y, en \texttt{protocol}, seleccionamos la opción \texttt{All}. Con esta nueva regla permitimos el tráfico de red desde la instancia hacia el exterior, figura \ref{fig:networkout}.
\item Vamos a la pestaña \texttt{Details} y pulsamos en \texttt{View IP Addresses}. A continuación seleccionamos la IP de la red, en nuestro casos \texttt{172.16.244.175}, figura \ref{fig:networkip}.
\item A continuación vamos a la pestaña \texttt{Configuration}, donde podremos configurar el cortafuegos y la redirección de puertos, figura \ref{fig:networknat}
\caption{Configuración de firewall y redirección de puertos}
\label{fig:networknat}
\end{figure}
\item En el cortafuegos, añadimos la regla con \texttt{CIDR} igual a \texttt{0.0.0.0/0} y, en \texttt{protocol}, seleccionamos la opción \texttt{TCP}. De esta forma admitimos el tráfico desde el exterior a la instancia, desde cualquier origen y usando el protocolo TCP, figura \ref{fig:networkfirewall}.
\item En la redirección de puertos, configurar las siguientes reglas, figura \ref{fig:networkports}:
\begin{itemize}
\item\textbf{\texttt{Private Port}}: \texttt{3000}-\texttt{3000}; \textbf{\texttt{Public Port}}: \texttt{3000}-\texttt{3000}; \textbf{\texttt{Protocol}}: \texttt{TCP}. Hace accesible el puerto del demostrador.
\item\textbf{\texttt{Private Port}}: \texttt{8080}-\texttt{8080}; \textbf{\texttt{Public Port}}: \texttt{8080}-\texttt{8080}; \textbf{\texttt{Protocol}}: \texttt{TCP}. Hace accesible el puerto del tomcat.
\item\textbf{\texttt{Private Port}}: \texttt{22}-\texttt{22}; \textbf{\texttt{Public Port}}: \texttt{22}-\texttt{22}; \textbf{\texttt{Protocol}}: \texttt{TCP}. Hace accesible el puerto 22 para la conexión ssh.
Para desplegar la API REST del servicio es necesario instalar un Tomcat, al menos en la versión 9. El proceso de instalación puede seguirse tal y como se indica en el siguiente enlace: \\\texttt{https://www.digitalocean.com/community/tutorials/install-tomcat-9-ubuntu-1804}.
Si se han seguido los pasos correctamente y la configuración de la red es correcta, podríamos acceder al panel de administración de tomcat en: \texttt{\{IP\}:8080}, donde \texttt{IP} se debe sustituir por la IP de la instancia.
\subsubsection{Instalando los paquetes necesarios para construír y desplegar el demostrador}
Tal y como se indica en la documentación del GitLab, se necesita instalar \texttt{NodeJS}(versión 10.13 o superior), \texttt{npm}(versión 6.4.1 o superior) y \texttt{server} para desplegar el demostrador.
La instalación de \texttt{NodeJS} puede realizarse siguiedo el siguiente tutorial: \\\texttt{https://joshtronic.com/2018/05/08/how-to-install-nodejs-10-on-ubuntu-1804-lts/}. Además, junto a \texttt{NodeJS} se instalará la versión \texttt{npm} que necesitamos.
Finalmente, con el comando \texttt{npm install -g serve} se instalará el servidor \texttt{serve} para realizar el despliegue.
\subsubsection{Configurando serve como un servicio que arranca al inicio}
El servidor Tomcat que hemos instalado debería estar configurado como un servicio que arranca automáticamente si hemos seguido los pasos del tutorial. Sin embargo, para que \texttt{serve} actúe de forma análoga a Tomcat debemos realizar algunas modificaciones.
En primer lugar, en la carpeta \texttt{HOME} de nuestro usuario, crearemos un script, \texttt{expliclas.sh} con el contenido:
\begin{lstlisting}[language=bash]
#!/bin/bash
serve -s /home/usuario/expliclas/build
\end{lstlisting}
Ahora crearemos el archivo \texttt{expliclas.service} en el directorio \texttt{/etc/systemd/system/} con el contenido:
\begin{lstlisting}[language=bash]
[Unit]
[Service]
ExecStart=/home/usuario/expliclas.sh
[Install]
WantedBy=default.target
\end{lstlisting}
Por último configuramos el servicio para que arranque al inicio con:
\begin{itemize}
\item\texttt{systemctl daemon-reload}
\item\texttt{systemctl enable expliclas.service}
\end{itemize}
Reiniciamos la instancia y comprobamos con, \texttt{systemctl status expliclas.service}, que el servicio está ejecutándose.
\subsubsection{Construyendo y desplegando la API REST}
A partir de este paso, podríamos utilizar la instancia ya existente en el CloudStack e ignorar todos los pasos anteriores. Se debe tener en cuenta que las credenciales de acceso para esta instancia son: \texttt{usuario}:\texttt{expliclas} para acceder a la instancia y \texttt{expliclas}:\texttt{expliclas} para acceder al panel de administración de Tomcat.
Antes de desplegar la API debemos construirla correctamente, lo que implica realizar pequeños cambios en el código. En el archivo \texttt{index.html}, debemos cambiar la url de la documentación de Swagger por:
En el paquete \texttt{brunolopez.expliclas.services}, en la clase \texttt{SessionService.java} se debe cambiar la url por:
\begin{lstlisting}
@Server(url = "https://demos.citius.usc.es/ExpliClasAPI/api" // CHANGE API BASE URL)
\end{lstlisting}
Una vez realizados los cambios, debemos generar el \texttt{war} del proyecto. Para ello, podemos ejecutar \texttt{mvn compile war:war} en la raíz del proyecto. O bien, compilar el proyecto con ayuda de algún IDE como \textit{Eclipse} o \textit{NetBeans}.
El \texttt{war} del proyecto será creado en el directorio \texttt{target}. Antes de desplegar en el Tomcat, debemos renombrar dicho archivo a \texttt{expliclas.war} para que las rutas sean las adecuadas. Para desplegar la API accedemos a la dirección \texttt{\{IP\}:8080} indicando la \texttt{IP} correspondiente a la instancia. Luego pulsamos en \texttt{Manager App} y accedemos con las credenciales de Tomcat. Finalmente, subimos el \texttt{war} y pulsamos en \texttt{Desplegar}, en la sección que se aprecia en la figura \ref{fig:desplegar}.
Podemos comprobar que se ha desplegado adecuadamente la API si al acceder a la URL \\\texttt{https://demos.citius.usc.es/ExpliClasAPI} podemos ver la documentación de Swagger.
\subsubsection{Construyendo y desplegando el demostrador}
Para desplegar el demostrador seguimos los siguientes pasos:
\begin{enumerate}
\item Accedemos a la instancia vía ssh usando las credenciales de acceso.
\item Clonamos el proyecto en la instancia mediante: \texttt{git clone -b ExpliClas-v2\\ https://gitlab.citius.usc.es/bruno.lopez.trigo/ExpliClas-TFG.git}
\item Accedemos al proyecto del demostrador \texttt{ExpliClas-TFG/codigo/expliclas}.
\item Borramos, para evitar posibles problemas, las carpetas \texttt{build} y \texttt{node\_modules}.
\item Modificamos en el archivo \texttt{package.json} el \texttt{homepage} de la siguiente forma.
\item Instalamos las dependencias del proyecto \texttt{npm install}.
\item Compilamos el proyecto para producción con \texttt{npm run build}.
\item Copiamos el directorio base del proyecto \texttt{ExpliClas-TFG/codigo/expliclas} al directorio \texttt{HOME} del usuario.
\end{enumerate}
Si todos los pasos se han seguido correctamente, el servicio debería estar accesible en: \\\texttt{https://demos.citius.usc.es/ExpliClas/}.
\subsubsection{Evitar problemas de rendimiento}
El servicio está configurado, como ya se ha mencionado, para que cargue con la primera petición los léxicos de las librerías de SimpleNLG
en los 3 idiomas (inglés, gallego y español). Al realizar esta carga al mismo tiempo, la primera petición se ve claramente
perjudicada llegando aproximadamente a los 8 segundos de retardo. Para evitar que los usuarios del sistema experimenten
esta carga se recomienda al responsable del despliegue que sea el primero en acceder al servicio solicitando una explicación, es decir, iniciando sesión en el demostrador y seleccionando alguno de los \textit{datasets} de ejemplo.
\contentsline{subsubsection}{\numberline{15.1.1}Creando una nueva instancia en el CloudStack del CiTIUS}{34}{subsubsection.15.1.1}
\contentsline{subsubsection}{\numberline{15.1.2}Configurando la red de la instancia}{35}{subsubsection.15.1.2}
\contentsline{subsubsection}{\numberline{15.1.3}Instalando y configurando Tomcat}{37}{subsubsection.15.1.3}
\contentsline{subsubsection}{\numberline{15.1.4}Instalando los paquetes necesarios para constru\IeC{\'\i}r y desplegar el demostrador}{38}{subsubsection.15.1.4}
\contentsline{subsubsection}{\numberline{15.1.5}Configurando serve como un servicio que arranca al inicio}{38}{subsubsection.15.1.5}
\contentsline{subsubsection}{\numberline{15.1.6}Construyendo y desplegando la API REST}{38}{subsubsection.15.1.6}
\contentsline{subsubsection}{\numberline{15.1.7}Construyendo y desplegando el demostrador}{39}{subsubsection.15.1.7}
\contentsline{subsubsection}{\numberline{15.1.8}Evitar problemas de rendimiento}{39}{subsubsection.15.1.8}
\contentsline{subsection}{\numberline{15.2}Otras fuentes de documentaci\IeC{\'o}n}{39}{subsection.15.2}