A continuación encontrarás una guía paso a paso que te permitirá desplegar tus apps Web 2.0 creadas con Xojo en un servidor basado en Linux. Para la elaboración de esta guía se ha utilizado el sistema operativo Ubuntu 20.4 (64 bits) corriendo sobre un servidor remoto (VPS), si bien debería funcionar igualmente en el resto de las distribuciones, como por ejemplo CentOS siempre y cuando estén instaladas las herramientas utilizadas.
Para desplegar las aplicaciones Web creadas con Xojo necesitarás contar acceso al servidor por línea de comandos, así como la capacidad de modificar determinados archivos de sistema; algo que no es posible en muchos (por no decir la mayoría) de servicios de Hosting compartidos. Es decir, si tienes contratado un VPS o vas a utilizar tus propios servidores de la red local (o remota), sobre los que puedas acceder por SSH y transferir archivos por SFTP, entonces podrás seguir esta guía sin problemas.
Por supuesto, vaya por delante que Xojo Cloud continúa siendo la forma más sencilla, potente y segura de desplegar tus aplicaciones Web creadas con Xojo. Lo único que necesitas es hacer clic sobre el botón de despliegue del IDE… ¡y listo! De esta forma te olvidas de todos los pasos de configuración requeridos en el lado del servidor, además de que tus aplicaciones estarán protegidas y realmente securizadas mediante Firewall (de hecho correrán sobre distribuciones Linux seguras), al tiempo que nosotros nos preocupamos de todas las tareas adicionales como actualizaciones del sistema, copias de seguridad, configuraciones de certificados, o de que hacer sencillo al máximo el uso combinado con los motores de bases de datos como MySQL o PostgreSQL (entre otras tareas).
1. Crear la aplicación de ejemplo
Dado que esta guía se centra en el aspecto del despliegue, hagamos que la aplicación Web sea lo más simple posible. De hecho, sólo consistirá de un botón que, al pulsarlo, muestre un mensaje al usuario. Evidentemente, las aplicaciones reales son más complejas que esta, y seguramente también hagan uso de conexión a base de datos o componentes de terceros, por ejemplo (aparte de que igualmente querrás establecer una conexión segura por HTTPS en vez de HTTP); pero centrémonos por ahora en un despliegue simple. Una vez que tu app funcione correctamente sobre este, ya podrás continuar añadiendo el resto de las piezas.
NOTA: Si lo deseas, también puedes ver este vídeo en el que se muestra cómo desplegar una aplicación web utilizando Docker.
Ejecuta Xojo y elige la opción Web como tipo de aplicación en el Selector de Proyecto:
En el caso de que no esté ya seleccionada y visible en el Editor de Página, selecciona la página WebPage1
en el Navegador del IDE de Xojo.
A continuación, arrastra un botón desde la Librería y suéltalo en la posición que desees de la página.
Con el botón seleccionado, añade el Manejador de Evento Pressed
. Una vez que lo confirmes, se presentará el Editor de Código correspondiente a dicho evento en el botón. A continuación teclea simplemente la siguiente línea de código:
MessageBox "Hola Mundo"
¡Esto es todo lo que hará la aplicación!
2. Configurar opciones de Despliegue
Selecciona Shared
en el apartado Build Settings
del Navegador. A continuación elige el puerto 8080
en la sección Build Settings
del Panel Inspector. Este será el puerto en el que estará escuchando nuestra aplicación una vez que la ejecutemos en el servidor.
3. Compilar la aplicación
Asegúrate de que esté marcada la casilla correspondiente a Linux bajo la sección Build Settings
, y de que esté seleccionada la opción X86 64-bit
en el apartado Build
del Panel Inspector asociado.
A continuación, pulsa sobre el botón Build
en la barra superior del IDE. Una vez que se haya compilado, obtendrás una carpeta con los siguientes elementos:
Es esta carpeta la que deberemos copiar al servidor. Puedes utilizar el método con el que te sientas más cómodo. En este caso utilizaré la aplicación Cyberduck.
4. Copiar los archivos al Servidor
Precisamente esto es lo que haremos ahora. Con independencia del método que utilices, asegúrate de copiar la carpeta en la ruta /var/www
del servidor. Una vez se hayan copiado todos los archivos, asegúrate de asignar 750
como el valor de privilegios tanto para la carpeta como para el resto de archivos que contiene (de forma recurrente)
5. Instalar Nginx
En el caso de que la distribución Linux del servidor no tuviese instalado ya Nginx es el momento de hacerlo ahora. Nginx es un servidor Web ligero que proporciona más rendimiento (capacidad de atender solicitudes por segundo) en comparación con el aún dominante Apache.
Para instalar Nginx es preciso acceder al servidor en cuestión (por ejemplo usando SSH mediante una sesión de Terminal/Línea de Comandos):
> SSH root@xxx.xxx.xxx.xxx
Una vez hayas accedido, teclea los siguientes comandos para instalar nginx:
$ sudo apt update $ sudo apt install nginx
6. Configuración básica del firewall
A continuación debemos configurar el firewall para que acepte las conexiones entrantes proporcionadas por el servidor web nginx. Por omisión, durante el proceso de instalación nginx
se registra automáticamente como un servicio de ufw
.
Para simplificar nuestro ejemplo de despliegue, utilizaremos la opción más restrictiva permitiendo el tráfico sólo a través del puerto 80:
$ sudo ufw allow 'Nginx HTTP'
Para verificar el cambio puedes escribir a continuación lo siguiente:
$ sudo ufw status
El resultado será similar al siguiente (en mi caso también tengo habilitado el acceso por SSH y el puerto 8080):
7. Crear bloque de acceso en Nginx
Cuando instalas Nginx, Ubuntu inicia dicho proceso, por lo que el servidor Web ya debería de estar activo. Puedes verificarlo escribiendo lo siguiente:
$ systemctl status nginx
Y obtendrás una salida similar a la mostrada a continuación:
Una vez que sabemos que el servidor está activo es el momento de crear un bloque de servidor. Dichos bloques son similares a los hosts virtuales de Apache y sirven para encapsular los detalles de la configuración y también permitirnos alojar más de un dominio desde un único servidor.
Nginx carga dichos archivos de configuración desde la ruta /etc/nginx/sites-available
de modo que crearemos un nuevo archivo utilizando el editor nano
:
$ sudo nano /etc/nginx/sites-available/XojoDemo
Escribiendo a continuación el siguiente bloque:
server { listen 80; listen [::]:80; root /var/www/XojoDemo; index index.html index.htm index.nginx-debian.html; server_name xxx.xxx.xxx.xxx; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:8080; } }
En dicho bloque, has de sustituir xxx.xxx.xxx.xxx
por la dirección IP de tu servidor o bien el dominio (registro DNS) que tengas configurado. Otra línea significativa es proxy_pass http://127.0.0.1:8080
, donde indicamos que el proxy inverso redirigirá las llamadas entrantes del puerto 80 (HTTP) al puerto 8080 que será el que utilicemos al ejecutar nuestra aplicación web de Xojo. No te olvides cambiar este valor en el caso de que utilices un puerto de escucha distinto para tu aplicación Xojo Web.
A continuación tendremos que activar el archivo creando un enlace entre este y el directorio sites-enabled
del cual Nginx obtiene las lecturas durante el inicio:
$ sudo ln -s /etc/nginx/sites-available/XojoDemo /etc/nginx/sites-enabled/
Comprobaremos que no tenemos errores de sintaxis en nuestros archivos de Nginx:
$ sudo nginx -t
Y si no existe ningún error, simplemente tendremos que recargar Nginx
para que cargue de nuevo los archivos de configuración y aplique nuestros cambios:
$ sudo systemctl restart nginx
8. Ejecutar la app Xojo
Ahora es el momento de ejecutar nuestra app Xojo y probar su acceso desde el navegador Web. Para ello, cambia desde la línea de comandos al directorio sobre el cual se copió la carpeta de la aplicación Web; en nuestro ejemplo:
$ cd /var/www/XojoDemo
Y finalmente ejecutaremos la app introduciendo el siguiente comando:
$ ./XojoDemo --port=8080
Abre una ventana en tu navegador web e introduce la dirección IP o dominio de tu servidor. Deberías de ver la app Xojo ejecutándose:
Sin embargo, esta forma de ejecutar la app presenta un problema: la hemos ejecutado desde el usuario con el cual hemos accedido mediante SSH (o cualquier otra vía en tu caso); de modo que una vez que salgamos del terminal o se “corte” la conexión con el servidor desde nuestro equipo local al servidor remoto… la aplicación web se cerrará y dejará de estar disponible. Un buen síntoma de que esto es cuando obtienes la siguiente pantalla desde el navegador web:
Para solucionar este tipo de problema es necesario que creemos un “Servicio”. De esta forma, la aplicación se ejecutará automáticamente sin que sea necesario lanzarla desde el Terminal/Línea de comandos… e incluso la reiniciará en el caso de que se produzca alguna interrupción (por ejemplo reinicio del Servidor o bien cuando la aplicación haya salido de forma inesperada como consecuencia del cualquier tipo de problema).
9. Crear un Servicio
Para asegurarte de que tu app Xojo Web siempre esté en funcionamiento crearemos un Servicio. Para ello, teclea el siguiente comando:
$ sudo nano /etc/systemd/XojoDemoApp.service
Y escribe el siguiente bloque en el nuevo archivo (asegúrate de guardar los cambios, una vez que termines):
[Service] Type=simple Restart=always RestartSec=3 User=root ExecStart=/var/www/XojoDemo/XojoDemo --port=8080 [Install] WantedBy=multi-user.target
A continuación sólo tendremos que activar e iniciar el servicio creado, utilizando para ello los siguientes comandos:
$ sudo systemctl enable /etc/systemd/XojoDemoApp.service $ sudo systemctl start /etc/systemd/XojoDemoApp.service
Podemos observar el estado del servicio tecleando el siguiente comando:
$ sudo systemctl status /etc/systemd/XojoDemoApp.service
Deberías de ver una salida similar a la siguiente:
Ahora ya podrás tener la confianza de que la app web Xojo estará funcionando incluso si cierras la sesión de acceso con el servidor, y de que esta se reiniciará automáticamente cuando se produzca algún tipo de fallo en el sistema o en la propia app.