Desplegar PocketBase en un Servidor de Producción con RUNCLOUD.io

En esta ocasión vamos a desplegar PocketBase en un servidor de producción para que podamos acceder a nuestra aplicación desde cualquier cliente ya sea web o móvil.

Desplegar PocketBase en un servidor de producción

Realizar el despliegue de una aplicación de PocketBase en un servidor de producción no es tan complicado y hay diferentes opciones. Podemos utilizar Docker, Fly, Digital Ocean, etc. Pero en esta ocasión utilizaremos un servidor en el cual tengo alojado sitios web de WordPress y de Laravel.

Si tenemos un servidor para nuestras aplicaciones PHP, JavaScript, Python, etc. Por lo general se usa un proxy inverso ya que nos da la opción de generar un Proxy reverso.

Proxy reverso o inverso tiene el funcionamiento de recibir el tráfico dirigido hacia el dominio que esté alojado en ese servidor y redirigir específicamente hacia la App que debería llegar esa petición. Para que dentro la aplicación pueda estar corriendo en un puerto específico por ejemplo 8080 y de forma pública veremos el un dominio.com o sub.dominio.com (en el puerto 80).

Es NGINX quien se encargará de realizar este acoplamiento y el usuario final no lo notará en el resultado final.

Para este ejemplo lo desplegaremos en RunCloud, sin embargo es indiferente qué tipo de panel de Admin uses, ya que si tienes en NGINX como servidor siempre tendrás la opción de realizar la configuración del proxy o contacta con tu administrador del servidor.

Te puede interesar

Creando Flutter App con PocketBase como Backend
7) Desplegar PocketBase en un Servidor de Producción con NGINX proxy reverse en RunCloud.io

NGINX

Aunque NGINX puede funcionar en ambos sistemas operativos (Windows o Linux) los parámetros de configuración pueden ser los mismos pero la experiencia de realizar esta configuración en Windows puede tornarse un poco diferente y en este ejemplo nos centraremos únicamente en servidores Linux y específicamente en Ubuntu 20.

Servicios del Sistema

De vez en cuando nuestro servidor se va a reiniciar y no vamos a estar allí para volver a ejecutar cada instancia de nuestro backend (pocketbase u otro). Vamos agregar una configuración a los servicios del sistema para que sea este quién se encargue de gestionar el arranque de cada instancia de PocketBase.

Sólo cuando esto esto funcionando vamos a poder realizar una configuración del Proxy reverso para lograr que nuestra aplicación ahora está disponible para el mundo.

Pasos para desplegar pocketbase en un servidor de producción

Paso 1

Vamos a ingresar a través de la terminal a nuestro servidor mediante SSH. Reemplaza 0.0.0.0 por tu IP.

ssh [email protected]

Ingresamos en modo super usuario (su)

tuservidor.runcloud $ cd ~
tuservidor.runcloud $ su
# Ingresa tu contraseña

Según como lo haya asignado el administrador del sistema, la ruta a la que debes acceder es a una de las siguientes opciones:

cd /lib/systemd/system
cd /etc/systemd/system

Paso 2

Nuevo Servicio

Ahora crearemos un servicio, este es un archivo de texto plano con una extensión .service. Lo llamaremos cursospocketbase.service o el nombre que prefieras seguido de .service.

Necesitarás acceso de super admin para guardar el archivo.

Parámetros de configuración

Los parámetros que ajustaremos son los siguientes

ParámetroConfiguraciónDescripción
Typesimpleopciones: simple, forking, oneshot, dbus, notify or idle
Userruncloudeste usuario no puede ser root, debe ser un usuario con permisos no root. Por defecto es el usuario www o www-data
GroupruncloudPor defecto este también es www o www-data. O bien puedes crear un grupo asiganandole permisos: chmod 677
ExecStart/home/runcloud/webapps/app-cursosdatogedon/pocketbase serve –http=»0.0.0.0:1511″Esta es la ruta especifica donde estará el archivo binario que deseamos iniciar, seguido en la misma línea de los parámetros. En este ejemplo hacemos referencia a la configuración dada en la documentación.
Ejemplo de la documentación oficial
[Unit]
Description = pocketbase

[Service]
Type           = simple
User           = root
Group          = root
LimitNOFILE    = 4096
Restart        = always
RestartSec     = 5s
StandardOutput = append:/root/pb/errors.log
StandardError  = append:/root/pb/errors.log
ExecStart      = /root/pb/pocketbase serve --http="yourdomain.com:80" --https="yourdomain.com:443"

[Install]
WantedBy = multi-user.target

Si no funciona la configuración anterior, quita los parámetros StandardOutput, StandardError. O asigna una ruta válida.

Mi archivo de servicio final
[Unit]
Description = pocketbasecursosdatogedon

[Service]
Type           = simple
User           = runcloud
Group          = runcloud
LimitNOFILE    = 4096
Restart        = always
RestartSec     = 5s

ExecStart      = /home/runcloud/webapps/app-cursosdatogedon/pocketbase serve --http="0.0.0.0:1511"

[Install]
WantedBy = multi-user.target

Paso 3

Ahora que nuestro servicio está escrito y guardado, necesitamos habilitarlo e iniciarlo. Ejecutamos los siguientes comandos:

systemctl enable pocketbase.service
systemctl start pocketbase

Esto será suficiente para iniciar nuestro servicio y que esté disponible dentro del puerto que especificamos. Ejecutamos el comando sudo lsof -i -P -n para ver todos o filtramos los LISTEN con sudo lsof -i -P -n | grep LISTEN

sudo lsof -i -P -n | grep LISTEN

Paso 4

Asegurate de haber elegido: Navite NGINX + Custom config (For power user. Manual Nginx implementation)

Agregaremos un archivo de configuración en NGINX Config de nuestra aplicación en RunCloud.io

Elige el Tipo: location.root

Asigna un nombre lara el archivo.conf, en mi caso fue: miconfiguracionpersonalizada, pero nombralo como prefieras.

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://0.0.0.0:1511; # Pon el puerto que elegiste antes

Resultado

Ahora hemos desplegado PocketBase en un Servidor de Producción y está disponible para el mundo.

Desplegar PocketBase en un Servidor de Producción
pocketbase online

Fuentes

How To Set Up Runcloud Node.JS: https://marcocaggiano.medium.com/how-to-set-up-runcloud-node-js-85ef3d3a4dc8

Ubuntu Services: https://manpages.ubuntu.com/manpages/bionic/man5/systemd.service.5.html

Cómo comprobar los puertos en uso en Linux: https://ubunlog.com/como-comprobar-los-puertos-en-uso-en-linux/

Imágenes

Foto de Sigmund en Unsplash

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *