Despliegue CMS en Java
Warning: This information may be outdated. Please note the date of the post.
En esta entrada vamos a tratar de desplegar una aplicación CMS escrito en Java. Para ello usaremos ‘Guacamole’.
Entorno de trabajo. Escenario.
- Vamos a usar una máquina virtual con Vagrant y Virtualbox.
- Sistema operativo: Debian Buster.
- Necesitaremos usuario con privilegios root y la paquetería actualizada.
Una vez tengamos el entorno de trabajo nos aseguraremos que tenemos el sistema actualizado.
Guacamole como concepto. Tomcat.
Apache Guacamole es una herramienta libre y Open-Source que nos permite conectarnos remotamente a un servidor mediante el navegador web sin necesidad de usar un cliente.
No es una aplicación web autónoma ya que precisa de más componentes y elementos. Se trata de una aplicación web simple y mínima. Un componente esencial que vamos a usar con ella es Tomcat.
Tomcat es una especie de contenedor de ServLets que nos permite ejecutar herramientas desarrolladas con Java Server Page (JSP).
Descargar el paquete de Guacamole desde las fuentes
- Instalamos las dependencias
sudo apt install build-essential libcairo2-dev libjpeg62-turbo-dev libpng-dev libtool-bin libossp-uuid-dev libvncserver-dev freerdp2-dev libssh2-1-dev libtelnet-dev libwebsockets-dev libpulse-dev libvorbis-dev libwebp-dev libssl-dev libpango1.0-dev libswscale-dev libavcodec-dev libavutil-dev libavformat-dev
- Descargamos la version estable de guacamole
wget http://mirror.cc.columbia.edu/pub/software/apache/guacamole/1.2.0/source/guacamole-server-1.2.0.tar.gz
- Extraemos el archivo, lo compilamos e instalamos
tar -xvf guacamole-server-1.2.0.tar.gz
cd guacamole-server-1.2.0
./configure --with-init-dir=/etc/init.d
make
make install
- Actualizamos la memoria caché
sudo ldconfig
- Ahora vamos a cargar systemd para que pueda encontrar el demonio proxy de guacamole, que es ‘guacd’. Lo iniciamos y comprobamos su estado.
sudo systemctl daemon-reload
sudo systemctl start guacd
sudo systemctl enable guacd
systemctl status guacd
Comprobamos el estado del demonio
root@debian-cms:/home/vagrant/guacamole/guacamole-server-1.2.0# systemctl status guacd
● guacd.service - LSB: Guacamole proxy daemon
Loaded: loaded (/etc/init.d/guacd; generated)
Active: active (running) since Sun 2021-03-07 20:37:03 GMT; 29s ago
Docs: man:systemd-sysv-generator(8)
Tasks: 1 (limit: 544)
Memory: 10.6M
CGroup: /system.slice/guacd.service
└─10976 /usr/local/sbin/guacd -p /var/run/guacd.pid
Mar 07 20:37:03 debian-cms systemd[1]: Starting LSB: Guacamole proxy daemon...
Mar 07 20:37:03 debian-cms guacd[10974]: Guacamole proxy daemon (guacd) version 1.2.0 started
Mar 07 20:37:03 debian-cms guacd[10973]: Starting guacd: guacd[10974]: INFO: Guacamole proxy daemo
Mar 07 20:37:03 debian-cms guacd[10973]: SUCCESS
Mar 07 20:37:03 debian-cms systemd[1]: Started LSB: Guacamole proxy daemon.
Mar 07 20:37:03 debian-cms guacd[10976]: Listening on host 127.0.0.1, port 4822
- Comprobamos que esta escuchando en el puerto indicado
root@debian-cms:/home/vagrant/guacamole/guacamole-server-1.2.0# sudo ss -lnpt | grep guacd
LISTEN 0 5 127.0.0.1:4822 0.0.0.0:* users:(("guacd",pid=10976,fd=4))
Instalar la aplicacion web Guacamole y tomcat.
Como hemos dicho anteriormente la aplicación web de Guacamole está escrita en Javak por ello necesitamos instalar tomcat (contenedor Java Servelt)
sudo apt install tomcat9 tomcat9-admin tomcat9-common tomcat9-user
Apache Tomcat escuchará en el puerto 8080
sudo ss -lnpt | grep java
root@debian-cms:/home/vagrant/guacamole/guacamole-server-1.2.0# sudo ss -lnpt | grep java
LISTEN 0 100 *:8080 *:* users:(("java",pid=12680,fd=37))
- Ahora sí descargamos la aplicación web de guacamole
wget https://downloads.apache.org/guacamole/1.2.0/binary/guacamole-1.2.0.war
- Trasladamos la aplicación al directorio de tomcat para poder servirla
sudo mv guacamole-1.2.0.war /var/lib/tomcat9/webapps/guacamole.war
- Reinciamos los servicios
sudo systemctl restart tomcat9 guacd
Vamos a comprobar que desde el navegador ya tenemos disponible la aplicación con Tomcat. Si accedemos a la ip por el puerto 8080

Ademas podemos ver que accediendo a la siguiente dirección:
http://192.168.100.183:8080/guacamole/#/
Comprobamos que la aplicación ya está para ser usada.

He instalado también un entorno de escritorio ya que no tenia entorno para esta máquina.
sudo apt update
sudo apt install xfce4 xfce4-goodies
Si entramos y tenemos instalado un entorno de escritorio en nuestra maquina podremos verlo a traves del navegador indicando nuestras credenciales

Podemos ver la carpeta de nuestro usuario por ejemplo.

Configuración de Guacamole
- Vamos a crear un directorio donde vamos a tener la configuración del mismo
sudo mkdir /etc/guacamole
sudo nano /etc/guacamole/guacamole.properties
- Añadimos las siguientes lineas
# Nombre de host y puerto del proxy guacamole
guacd-hostname: localhost
guacd-port: 4822
# Clase de proveedor de autenticación (autentica la combinación de usuario / contraseña, necesaria si se usa la pantalla de inicio de sesión proporcionada)
auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
basic-user-mapping: /etc/guacamole/user-mapping.xml
El módulo de autentificación por defecto lee las credenciales ubicadas en el fichero ‘user-mapping.xml’ por lo que vamos a generar un hash y la contraseña que queramos
echo -n contrasenia | openssl md5
Ahora creamos el xml de asignación para usuarios
sudo nano /etc/guacamole/user-mapping.xml
En este fichero indicaremos el usuario que vayamos a poner, y el hash que nos generó con la contraseña que hemos creado previamente, más adelante crearemos la contraseña para VNC.
<user-mapping>
<!-- Per-user authentication and config information -->
<authorize
username="vagrant"
password="1060b7b46a3bd36b3a0d66e0127d051"
encoding="md5">
<connection name="default">
<protocol>vnc</protocol>
<param name="hostname">localhost</param>
<param name="port">5901</param>
<param name="password">vnc_password</param>
</connection>
</authorize>
</user-mapping>
Guardamos y reiniciamos los servicios
sudo systemctl restart tomcat9 guacd
- Instalar un servidor VNC
sudo apt install tigervnc-standalone-server
- Iniciamos VNC y elegimos una contraseña
vncserver
vagrant@debian-cms:~/guacamole/guacamole-server-1.3.0$ vncserver
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
/usr/bin/xauth: file /home/vagrant/.Xauthority does not exist
New 'debian-cms:2 (vagrant)' desktop at :2 on machine debian-cms
Starting applications specified in /etc/X11/Xvnc-session
Log file is /home/vagrant/.vnc/debian-cms:2.log
Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/vagrant/.vnc/passwd :2 to connect to the VNC server.
Ahora editamos el fichero /etc/guacamole/user-mapping.xml y cambiamos la contraseña para VNC y reinciamos los servicios
sudo systemctl restart tomcat9 guacd
Instalación de apache2 y configuración
- Instalamos apache2
sudo apt install apache2
- Creamos una página web simple
nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
ServerName www.misitio.org
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
- Comprobamos que funciona

Proxy inverso
Instalamos los módulos necesarios para la conexión entre tomcat y apache2
sudo apt install libapache2-mod-jk
sudo a2enmod proxy proxy_http
- En el fichero de configuración del virtualhost añadimos las opciones de proxy
<VirtualHost *:80>
ServerName www.misitio.org
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<Location /guacamole/>
Order allow,deny
Allow from all
ProxyPass http://localhost:8080/guacamole/ flushpackets=on
ProxyPassReverse http://localhost:8080/guacamole/
</Location>
Y en el html creamos un enlace para acceder a la aplicación
<h1>Hola! Enhorabuena tu sitio funciona!!!</h1>
<p>Guacamole-></p><a href=http://www.misitio.org/guacamole/#/> Enlace </a>

Si accedemos al sitio y accedemos al enlace que hemos dejado para ir a la aplicación vemos que funciona correctamente.


Fuentes:
https://www.linuxbabe.com/debian/apache-guacamole-remote-desktop-debian-10-buster