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
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ámetro | Configuración | Descripción |
---|---|---|
Type | simple | opciones: simple, forking, oneshot, dbus, notify or idle |
User | runcloud | este usuario no puede ser root, debe ser un usuario con permisos no root. Por defecto es el usuario www o www-data |
Group | runcloud | Por 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.
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/
Deja una respuesta