Configuración de vLanzadera en Apache en servidores propietarios

En esta guía se detallan los pasos para configurar Velneo vModApache y la vLanzadera para que funcione en servidores propietarios en plataformas Windows o Linux.

Paso 1 - Instalación de Apache

Es requisito obligatorio instalar Apache en la misma máquina donde tengamos instalado Velneo vServer.

Windows

Recomendamos el uso de Apache Haus para seguir esta documentación, ya que las sendas y cambios que se indican en esta documentación son para esta distribución de Apache Haus. Si usas Apache de otra manera, tendrás que adaptar las indicaciones de la documentación a la distribución que utilices.

Consulta con un experto en despliegue Web para problemas que puedas encontrar en la instalación y despliegue de Apache.

En la página de descargas descargar la versión con OpenSSL1.1.1 e importante, la versión x64.

Al descomprimir el zip, obtenemos un directorio que tiene un readme_first.html con la documentación de Apache Haus (recomendamos leerlo) y un directorio de Apache24.

Para facilitar la configuración, recomendamos renombrar el directorio de "Apache24" a "apache2" y moverlo al homepath del usuario del servicio vatp que, si está asociado a la cuenta de sistema local, está ubicado en:

C:\Windows\System32\config\systemprofile

Editar el fichero:

C:\Windows\System32\config\systemprofile\apache2\conf\httpd.conf

Buscar la línea con el siguiente código:

Define SRVROOT "Apache24"

Y sustituirlo por:

Define SRVROOT "C:/Windows/System32/config/systemprofile/apache2"

Abrir en una terminal cmd o powershell como administrador (click derecho sobre cmd o powershell y ejecutar como administrador) y poner los siguientes comandos:

cd C://Windows/System32/config/systemprofile/apache2/bin

.\httpd.exe -k install

Ahora ya tenemos Apache como servicio.

Abrimos el panel de servicios en Windows y debería haber un servicio llamado Apache2.X. Iniciamos el servicio.

En este punto habría que obtener y configurar un certificado ssl para el dominio que se vaya a usar en el servidor. A lo largo de esta documentación hacemos referencia a mi-dominio.

Para ello debemos hacer lo siguiente:

Alojar los ficheros del certificado en la carpeta:

C:\Windows\System32\config\systemprofile\apache2\conf\ssl

Editamos el fichero httpd-ahssl.conf dentro del directorio C:\Windows\System32\config\systemprofile\apache2\conf\extra y comprobamos que estén descomentadas las siguientes líneas:

SSLCertificateFile "${SRVROOT}/conf/ssl/mi-dominio.crt"
SSLCertificateKeyFile "${SRVROOT}/conf/ssl/mi-dominioi.key"

En el que sustituiremos "mi-dominio.crt" y "mi-dominioi.key" por los nombres de ficheros de certificado y clave de nuestro propio certificado.

También debemos editar la línea:

ServerName localhost:443

Y reemplazarla por:

ServerName mi-dominio:443

Reinicia el servicio de Apache.

Para probar que hasta este punto está todo correcto, probar a cargar https://mi-dominio (es importante que sea https). Si hasta este punto está todo correcto te debería de cargar la página de bienvenida de Apache.

Recomendamos no continuar con los siguientes pasos hasta que no se cumpla esta validación.

Eliminamos el siguiente directorio:

C:\Windows\System32\config\systemprofile\apache2\htdocs

Creamos el siguiente directorio:

C:\Windows\System32\config\systemprofile\apache2\html

Dentro creamos un fichero llamado index.html y le agregamos un contenido cualquiera. Por ejemplo: "Hola mundo".

Editamos el fichero:

C:\Windows\System32\config\systemprofile\apache2\conf\httpd.conf

Y hacemos la siguiente modificación:

Sustituir:

DocumentRoot "${SRVROOT}/htdocs"
<Directory "${SRVROOT}/htdocs">

Por:

DocumentRoot "C:/Windows/System32/config/systemprofile/apache2/html"
<Directory "C:/Windows/System32/config/systemprofile/apache2/html">

Editamos el fichero:

C:\Windows\System32\config\systemprofile\apache2\conf\extra\httpd-ahssl.conf

Y hacer la siguiente modificación:

Sustituir:

DocumentRoot "${SRVROOT}/htdocs"

Por:

DocumentRoot "C:/Windows/System32/config/systemprofile/apache2/html"

Sustituir:

<Directory "${SRVROOT}/htdocs">

Por:

<Directory "C:/Windows/System32/config/systemprofile/apache2/html">

Reiniciar el servicio de Apache2 y acceder a https://mi-dominio.

Ahora en vez de mostrar la página de bienvenida de Apache, debe mostrar el contenido que has puesto en el fichero de index.html. Si es así, puedes continuar con el siguiente paso.

Linux

Esta documentación ha sido elaborada tomando como base la distribución de Ubuntu 20. Si usas otro distribución operativo tendrás que adaptar la configuración en caso de que la estructura de directorios no sea la misma.

En primer lugar abrir una terminal y actualizar el repositorio de aplicaciones ejecutando el comando:

$sudo apt update

A continuación instalar Apache2 con el comando:

$sudo apt install apache2
$sudo a2dismod mpm_event
$sudo a2enmod mpm_worker
$systemctl restart apache2

Comprobar que se ha creado el siguiente directorio:

/etc/apache2

A continuación vamos a activar el SSL que es obligatorio para ejecutar Lanzadera y que funcione la ejecución Web.

$sudo a2dissite 000-default.conf
$sudo a2ensite default-ssl.conf
$sudo a2enmod ssl
$sudo service apache2 restart

En este punto habría que configurar previamente un certificado ssl para el dominio que se va a usar. En el paso 1 hay indicaciones de como incluir los certificados en Apache. Según hemos indicado antes, en esta documentación suponemos que tenemos un certificado para un dominio llamado "mi-dominio".

Accede a https://mi-dominio (es importante que sea https) Si hasta este punto está todo correcto te debería de cargar la página de bienvenida de Apache.

A continuación, para el correcto funcionamiento de la vLanzadera en futuros pasos, hay que cambiar el DocumentRoot que por defecto viene en /var/www/html

Ejecutar el siguiente comando para editar la configuración:

$sudo nano /etc/apache2/sites-enabled/default-ssl.conf

Se abrirá un editor de texto. Buscar la línea que pone:

DocumentRoot /var/www/html

Y sustituirla por:

# Si se va a usar vServer con el usuario de linux velneo:
DocumentRoot /home/velneo/apache2/html

#Si se va a usar vServer con el usuario de linux root:
DocumentRoot /root/apache2/html

En este paso, suponemos y recomendamos para seguir la documentación que el usuario de Linux que va a ejecutar el vServer es velneo. Si no es así, en la senda cambiar "velneo" por el nombre de usuario que corresponda. Para el usuario root, las rutas cambian como indicamos.

Editar el fichero de apache2.conf:

$sudo nano /etc/apache2/apache2.conf

Buscar la línea con lo siguiente:

<Directory /var/www/>

Y cambiarla por:

# Si usas el usuario velneo
<Directory /home/velneo/apache2/html>

# Si usas el usuario root
<Directory /root/apache2/html>

A continuación, hay que crear esa senda y crear un fichero html en ella:

# Si usas el usuario velneo
$sudo mkdir -p /home/velneo/apache2/html
$sudo touch /home/velneo/apache2/html/index.html

# Si usas el usuario root
$sudo mkdir -p /root/apache2/html
$sudo touch /root/apache2/html/index.html

Añadirle permisos de ejecución a la senda para que apache pueda acceder:

# Si usas el usuario velneo
$sudo chmod +x /home
$sudo chmod +x /home/velneo
$sudo chmod -R +x /home/velneo/apache2

# Si usas el usuario root
$sudo chmod +x /root
$sudo chmod -R +x /root/apache2

Editar el fichero de index:

# Si usas el usuario velneo
$sudo nano /home/velneo/apache2/html/index.html

# Si usas el usuario root
$sudo nano /root/apache2/html/index.html

Y escribir cualquier contenido, por ejemplo "Hola Mundo".

Reinicia Apache y vuelve a acceder a https://mi-dominio.

Ahora en vez de mostrar la página de bienvenida de Apache, debe mostrar el contenido que has puesto en el fichero de index.html. Si es así, puedes continuar con el siguiente paso.

Paso 2 - Instalación de vServer (servicio vatp)

Windows

Revisar los requerimientos de la versión.

Sigue los pasos indicados en la documentación para instalar vServer en Windows.

Sigue los pasos de la documentación para incluir un certificado ssl propio (recuerda que en este punto ya has puesto en marcha los certificados en Apache así que será configurar la misma senda de ambos ficheros en el servidor).

Es importante que tanto el vServer como el Apache respondan a través del mismo dominio (mi-dominio.com)

Una vez instalado Velneo vServer, hacer las siguientes comprobaciones:

  • Al arrancar el servicio, comprueba desde el vAdmin los siguientes mensajes:

    • Que el servicio vatp se ha arrancado correctamente con la licencia: busca en el log el mensaje de inicio similar a este: "Servidor vatp de 64 bits iniciado con licencia [....]. Versión: XX.X.X.XXXXX , Puerto: 690, Puestos de edición: X, Puestos de ejecución: X, Código de licencia: xxx-xxxx-xxx".

    • Comprueba el puerto vatp, lo necesitamos más adelante.

    • Busca en los mensajes de Velneo vAdim una entrada de inicio similar a la siguiente: "Cifrado de VATPS activado, certificado ssl: xxxx. Válido hasta el xxxx".

    • Localiza el mensaje de "Servidor websockets iniciado en puerto xxx" Necesitamos el puerto más adelante.

Linux

Para no tener problemas siguiendo la guía, recomendamos ejecutar Velneo vServer como servicio con un usuario llamado velneo en un puerto superior al 1024. Si lo ejecutas con otro usuario, deberás adaptar algunas instrucciones. Si decides ejecutar el vServer con root ten en cuenta que debes seguir las instrucciones para root y no para el usuario velneo.

Revisar los requerimientos de la versión actual. Realizar las configuraciones en la máquina e instalar librerías que falten.

Sigue los pasos de la documentación para instalar vServer en Linux.

Sigue los pasos de la documentación para incluir un certificado ssl propio

Una vez instalado Velneo vServer, hacer las siguientes comprobaciones.

Una vez instalado Velneo vServer, hacer las siguientes comprobaciones:

  • Al arrancar el servicio, comprueba desde el vAdmin los siguientes mensajes:

    • Que el servicio vatp se ha arrancado correctamente con la licencia: busca en el log el mensaje de inicio similar a este: "Servidor vatp de 64 bits iniciado con licencia [....]. Versión: XX.X.X.XXXXX , Puerto: 690, Puestos de edición: X, Puestos de ejecución: X, Código de licencia: xxx-xxxx-xxx".

    • Comprueba el puerto vatp, lo necesitamos más adelante.

    • Busca en los mensajes de Velneo vAdim una entrada de inicio similar a la siguiente: "Cifrado de VATPS activado, certificado ssl: xxxx. Válido hasta el xxxx".

    • Localiza el mensaje de "Servidor websockets iniciado en puerto xxx" Necesitamos el puerto más adelante.

Paso 3 - Instalación de vLanzadera

Ver el punto Aplicación vLanzadera y login social.

Una vez instalada, al ejecutar la aplicación se abre el formulario principal que muestra, en caso de que los haya, una lista de errores a solucionar.

Creación de clave para login con jwt

La lanzadera utiliza JWT para intercambiar información con el servidor. Para garantizar y securizar el intercambio de información entre la lanzadera y Velneo vServer, es necesario especificar una clave JWT en el registro de Velneo vServer.

En Windows, debemos crear dentro de la clave HKEY_USERS.DEFAULT\Software\Velneo\vServer una entrada de tipo cadena llamada jwtKey y establecer la clave que queramos usar.

En Linux, debemos editar el fichero vServer.conf y, si no la tenemos ya, añadir una línea que contenga la propiedad:

jwtKey=TU_CLAVE_JWT_DE_32

La clave JWT debe tener una longitud mínima de 32 caracteres.

De forma opcional, se puede configurar un parámetro de tiempo de validez del token.

jwtExpiredSeconds=NUMERICO_SEGUNDOS

Por seguridad el servidor solo aceptará el token generado por la lanzadera durante los siguientes jwtExpiredSeconds segundos más 60 segundos de cortesía por si hay desviación de la hora entre el cliente y el servidor.

Si no se configura el parámetro tendrá un valor por defecto de 60 segundos.

Por temas de seguridad, la clave JWT solo debe ser conocida por el administrador.

Asegúrate de reinciar Velneo vServer tras la configuración. Si la configuración no se hace correctamente, aparece un error en el formulario de inicio de vLanzadera con el siguiente mensaje:

Para hacer login con la vLanzadera es necesario que esté definida una clave jwt. Consulta la documentación. La vLanzadera devolverá un error -1 si se intenta utilizar en este estado.

Posibles errores

Error al crear directorio /senda/directorio

Si al abrir vLanzadera hay un error "Error al crear directorio /senda/directorio", quiere decir que en el paso 1 no hemos creado correctamente los directorios, o que estos no tienen los permisos necesarios y vServer no puede acceder. Verifica que todas las instrucciones del paso 1 se han seguido correctamente.

Error descarga: senda/fichero

Si al abrir vLanzadera hay un error de “Error descarga: senda/fichero” quiere decir que en el paso 1 no hemos creado correctamente los directorios, o que estos no tienen los permisos necesarios y vServer no puede acceder. Verifica que todas las instrucciones del paso 1 se han seguido correctamente. Continúa con el siguiente paso cuando la vLanzadera no muestre errores en el formulario de inicio.

Paso 4 - Instalación y configuración de vModApache

Sigue los pasos de la documentación de vModApache para instalarlo y configurarlo.

Configura una directiva location para cargar vLanzadera, donde la "senda_base” indicada en la documentación debe ser "/auth" y apuntar a la instancia de vLanzadera creada en el paso 3.

Windows

En C:\Windows\System32\config\systemprofile\apache2\conf\extra\httpd-ahssl.conf, dentro del bloque Virtualhost y antes del cierre de etiqueta de virtualhost:

<Location /auth>
		SetHandler velneo
		#VelneoMode SERVER
		Vrl vatps://usuario:contraseña@servidor[:num_puerto]/id_instancia
	</Location>
</Virtualhost>

Linux

En /etc/apache2/sites-enabled/default-ssl.conf, dentro del bloque Virtualhost y antes del cierre de etiqueta de virtualhost:

	<Location /auth>
		SetHandler velneo
		#VelneoMode SERVER
		Vrl vatps://usuario:contraseña@servidor[:num_puerto]/id_instancia
	</Location>
</Virtualhost>

Continúa con el siguiente paso cuando al arrancar apache2, puedas ver un enganche que pertenece a vModApache a la instancia de vLanzadera. Al desconectar el servicio debería de desconectarse el enganche.

Paso 5 - Configuración adicional de apache para la vLanzadera

Crear un fichero vLanzadera.conf en la siguiente ruta:

# Windows
C:/Windows/System32/config/systemprofile/apache2/conf/extra

# Linux
/etc/apache/conf-available

Añadir el siguiente contenido al fichero:

Header add Cross-Origin-Embedder-Policy: require-corp
Header add Cross-Origin-Opener-Policy: same-origin
Header set Cache-Control: "max-age=1800"

AddType application/wasm wasm

<IfModule mod_headers.c>
        RewriteEngine On
        #LogLevel alert rewrite:trace6
        # Serve gzip compressed CSS and JS files if they exist
        # and the client accepts gzip.
        RewriteCond "%{HTTP:Accept-encoding}" "gzip"
        RewriteCond "%{DOCUMENT_ROOT}/%{REQUEST_FILENAME}\.gz" -s
        RewriteRule "^(.*)\.(css|js)"         "$1\.$2\.gz" [QSA]


        # Serve correct content types, and prevent mod_deflate double gzip.
        RewriteRule "\.css\.gz$" "-" [T=text/css,E=no-gzip:1]
        RewriteRule "\.js\.gz$"  "-" [T=text/javascript,E=no-gzip:1]

        <FilesMatch "(\.js\.gz|\.css\.gz)$">
                # Serve correct encoding type.
                Header append Content-Encoding gzip


                # Force proxies to cache gzipped &
                # non-gzipped css/js files separately.
                Header append Vary Accept-Encoding
        </FilesMatch>
        
        # Serve brotli compressed wasm files if they exist
        # and the client accepts brotli.
        RewriteCond "%{HTTP:Accept-encoding}" "br"
        RewriteCond "%{DOCUMENT_ROOT}/%{REQUEST_FILENAME}\.br" -s
        RewriteRule "^(.*)\.(wasm)"         "$1\.$2\.br" [QSA]

        # Serve correct content types, and prevent mod_deflate double gzip.
        RewriteRule "\.wasm\.br$"  "-" [T=application/wasm,E=no-gzip:1]

        <FilesMatch "(\.wasm\.br)$">
                # Serve correct encoding type.
                Header append Content-Encoding br
                Header append Vary Accept-Encoding
        </FilesMatch>
</IfModule>

En windows

Editar C:\Windows\System32\config\systemprofile\apache2\conf\httpd.conf

Localiza y descomenta las siguientes líneas:

#LoadModule headers_module modules/mod_headers.so
#LoadModule rewrite_module modules/mod_rewrite.so

Modifica el fichero C:\Windows\System32\config\systemprofile\apache2\conf\extra\httpd-ahssl.conf, y al final, antes de la directiva añade un include al fichero vLanzadera.conf quedando de la siguiente manera:

...
	Include "C:/Windows/System32/config/systemprofile/apache2/conf/extra/vLanzadera.conf"
</VirtualHost>

Reinicia el servicio de apache2.

A continuación hay que añadir un RewriteRule para que el sitio raíz (el que devuelve el index.html del “Hola mundo”) responda con vLanzadera. Para ello editamos el fichero C:\Windows\System32\config\systemprofile\apache2\conf\extra\httpd-ahssl.conf y buscamos el siguiente bloque:

<Directory "C:/Windows/System32/config/systemprofile/apache2/html">
	Options Indexes Includes FollowSymLinks
	AllowOverride AuthConfig Limit FileInfo
  Require all granted
</Directory>

Y le añadimos el rewrite rule para que quede de la siguiente manera:

<Directory "C:/Windows/System32/config/systemprofile/apache2/html">
	Options Indexes Includes FollowSymLinks
	AllowOverride AuthConfig Limit FileInfo
  	Require all granted
  	# Para la redirección de la lanzadera de /* a /auth/*
  	RewriteEngine On
  	RewriteRule ^/?$ /auth?%{QUERY_STRING} [NC,L]	
</Directory>

Para comprobar que de momento tenemos todo correcto, debemos reiniciar Apache y luego verificar que, https://mi-dominio ahora debe devolver lo mismo que https://mi-dominio/auth.

En linux

Ejecutar los siguientes comandos:

$sudo a2enmod rewrite
$sudo a2enmod headers

Edita el fichero /etc/apache2/sites-enabled/default-ssl.conf e inserta lo siguiente al final del documento antes de la etiqueta de cierre de </VirtualHost> de modo que quede así:

...
	Include /etc/apache2/conf-available/vLanzadera.conf
</VirtualHost>
...

Reinicia el servicio de Apache:

$sudo service apache2 restart

En este punto, al cargar https://mi-dominio/auth, debería aparecerte una página en blanco, pero la pestaña debería tener el título de "Lanzadera".

A continuación hay que añadir un RewriteRule para que el sitio raíz (el que devuelve el index.html del "Hola mundo") responda con vLanzadera. Para ello:

Editamos el fichero /etc/apache2/apache2.conf y buscamos el siguiente bloque:

<Directory /home/velneo/apache2/html>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Y le añadimos el RewriteRule quedando así:

<Directory /home/velneo/apache2/html>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted

        # Para la redirección de la lanzadera de /* a /auth/*
        RewriteEngine On
        RewriteRule ^/?$ /auth?%{QUERY_STRING} [NC,L]
</Directory>

Para comprobar que tenemos todo correcto, reiniciar Apache y entonces https://mi-dominio ahora debe devolver lo mismo que https://mi-dominio/auth.

En este punto, vLanzadera ya debería funcionar correctamente y ser capaz de ejecutar las aplicaciones en web. Si hay algún fallo, asegúrate de que no se ha cacheado una configuración incorrecta a lo largo del proceso limpiando la caché del navegador o probando con el modo incógnito.

Configuración adicional para intranets

En intranets en las que no se vaya a hacer uso de Internet se han de descargar los recursos de Velneo Web desde nuestra página de descargas.

Se trata de un fichero comprimido que contiene una serie de carpetas y ficheros.

El ese fichero comprimido se incluye el vin de vLanzadera, que en este punto ya tendremos instalado y hecha la configuración inicial.

La configuración adicional que debemos hacer es la siguiente:

  1. Copiar del zip todo el contenido de la carpeta assets-wasm/vLanzadera/35.0/assets/

    1. En disco, borrar el contenido de la carpeta apache2/html/35.0/assets .

    2. Pegar lo que hemos copiado del zip.

  2. Copiar del zip todo el contenido de la carpeta wasm-assets/vLanzadera/vLanzadera/35.0/assets

    1. En el disco, borrar todo el contenido de la carpeta apache2/html/vLanzadera/35.0/assets

    2. Pegar lo que hemos copiado del zip.

  3. Copiar del zip todo el contenido de la carpeta wasm-assets/vLanzadera/vLanzadera/assets.

    1. En el disco, borrar todo el contenido de la carpeta apache2/html/vLanzadera/assets.

    2. Pegar lo que hemos copiado del zip.

  4. Ejecutar vLanzadera con Velneo vClient y en estáticos, editar los 3 registros, activar el check personalizado y reempalzar el código fuente de cada uno por el equivalente incluido en la carpeta wasm-assets/vLanzadera/vLanzadera/estaticosdel zip.

Proxy para redirigir el tráfico WSS al puerto 443

Por defecto, para websockets (necesarios para la ejecución web) se usa el puerto que tenga nuestro servidor + 9. Es decir, que si el puerto del servidor es el 690, para Websockets se usa el 699. En el caso de que queramos usar en su lugar el puerto estándar 443, será necesario realizar configuración adicional en Apache y en vLanzadera.

Si usábamos un RewriteRule para usar la raíz del host para servir la lanzadera, hay que añadirle un RewriteCond: RewriteCond %{HTTP:Upgrade} !=websocket [NC] para que no aplique esa redirección a las peticiones wss. La directiva <directory> quedaría así (se ha insertado la línea 8):

<Directory /home/${USERNAME}/apache2/html/>
        Options FollowSymLinks
        AllowOverride All
        Require all granted

        # Para la redirección de la lanzadera de /* a /auth/*
        RewriteEngine On
        RewriteCond %{HTTP:Upgrade} !=websocket [NC]
        RewriteRule ^/?$ /auth?%{QUERY_STRING} [NC,L]
</Directory>

Fuera de la directiva <directory> hay que declarar otro RewriteRule para redirigir las peticiones wss que llegan del puerto 443 al puerto vatp + 9 (699 en el ejemplo) y configurar el proxy inverso (se añaden las líneas 12 a 19) :

<Directory /home/${USERNAME}/apache2/html/>
        Options FollowSymLinks
        AllowOverride All
        Require all granted

        # Para la redirección de la lanzadera de /* a /auth/*
        RewriteEngine On
        RewriteCond %{HTTP:Upgrade} !=websocket [NC]
        RewriteRule ^/?$ /auth?%{QUERY_STRING} [NC,L]
</Directory>

RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/$ wss://localhost:699/$1 [P,L]

# Proxy inverso para manejar conexiones WSS
ProxyPreserveHost On
ProxyPass ^/$ wss://localhost:699/
ProxyPassReverse ^/$ wss://localhost:699/

Además, será necesario habilitar una serie de módulos adicionales en Apache.

En Windows se suelen configurarse en el fichero httpd.conf:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

Para activarlos en Linux, en distribuciones como Ubuntu o Debian, podemos usar el comando a2enmod, que está diseñado para habilitar módulos de Apache:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_wstunnel

Última actualización