Guía de despliegue

Alojar PocketBase en un VPS: guía completa

Desplegar en un VPS Cloud →

Tutorial

Alojar PocketBase en un VPS: guía completa

Bases de datos10 min de lectura5 pasos

PocketBase cabe en un único binario Go: base de datos SQLite integrada, autenticación, almacenamiento de archivos, API REST y suscripciones en tiempo real, todo con una interfaz de administración incorporada. Es el backend ideal para autoalojar en un VPS ligero para tus aplicaciones web y móviles. Esta guía completa te lleva desde la instalación con Docker hasta la configuración HTTPS, la autenticación OAuth, las copias de seguridad automáticas y los ajustes avanzados.

Contenido· Por qué autoalojar PocketBase en un VPS1/11
  1. 01Por qué autoalojar PocketBase en un VPS
  2. 02Beneficios concretos de autoalojar PocketBase
  3. 03Requisitos precisos: VPS, sistema y software
  4. 04Desplegar PocketBase en VPS paso a paso
  5. 05Configurar autenticación OAuth (Google, GitHub, GitLab)
  6. 06Copias de seguridad automáticas: SQLite y archivos
  7. 07Modo WAL de SQLite y rendimiento
  8. 08Resolución de problemas: errores comunes
  9. 09Para ir más lejos: CLI admin, colecciones y hooks
  10. 10PocketBase vs alternativas self-hosted
  11. 11Documentación oficial

Por qué autoalojar PocketBase en un VPS

PocketBase es un backend-as-a-service de código abierto distribuido como un único binario: sin Postgres separado, sin Redis, sin una pila compleja que orquestar. Todo funciona sobre SQLite, lo que lo hace perfectamente adecuado para un VPS de gama de entrada.

Al autoalojarlo, mantienes el control total de los datos de tus usuarios y sus archivos, sin depender de un Firebase o Supabase administrado con cuotas y latencia que pueden ser problemáticas según tu región. Un VPS te da una IP fija, un dominio personalizado y copias de seguridad que controlas completamente.

Como PocketBase escribe en una única carpeta pb_data, tu estrategia de backup se reduce a copiar ese directorio, lo que simplifica enormemente la operación comparado con un clúster de base de datos clásico.

Beneficios concretos de autoalojar PocketBase

  • Un único binario para desplegar: arranca en segundos, huella de memoria mínima (a menudo menos de 100 MB de RAM).
  • Base de datos SQLite integrada: cero servicios de base de datos que administrar, copia de seguridad copiando la carpeta pb_data.
  • Autenticación completa (email/contraseña, OAuth2, OTP, LDAP) y reglas de acceso granulares por colección.
  • API en tiempo real mediante Server-Sent Events para sincronizar automáticamente tus clientes.
  • Interfaz de administración web completa para gestionar colecciones, usuarios, permisos y archivos.
  • Soberanía de los datos: tus usuarios y sus archivos permanecen en tu infraestructura, detrás de tu dominio.
  • Coste predecible: el precio del VPS no varía con el tráfico, a diferencia de la facturación por solicitud.

Requisitos precisos: VPS, sistema y software

PocketBase es extremadamente ligero. Aquí lo que necesitas según tu carga:

Mínimo absoluto: 1 vCPU, 512 MB de RAM. Suficiente para un proyecto en desarrollo o una aplicación pequeña con menos de 1.000 usuarios activos.

Recomendado en producción: 1 vCPU, 1 GB de RAM. PocketBase gestiona sin dificultad un proyecto de tamaño pequeño a mediano con esta configuración.

Para volúmenes altos: 2 vCPU, 2 GB de RAM. El límite suele ser la escritura concurrente en SQLite, no la CPU.

En cuanto al almacenamiento, planifica 20 a 40 GB SSD NVMe según el volumen de archivos. Evita sistemas de archivos de red (NFS) que pueden corromper la base de datos.

Software requerido: Docker 24+ y Docker Compose v2, un dominio apuntando a la IP del VPS mediante un registro A, un proxy inverso (Caddy, Nginx o Traefik) para gestionar TLS.

Desplegar PocketBase en VPS paso a paso

  1. Preparar el VPS y el DNS

    Conéctate por SSH, actualiza el sistema con apt update && apt upgrade -y, luego instala Docker con el script oficial: curl -fsSL https://get.docker.com | sh. Añade tu usuario al grupo Docker con usermod -aG docker $USER.

    Crea un registro DNS de tipo A que apunte app.your-domain.com a la IP pública de tu VPS. Verifica con dig app.your-domain.com.

  2. Crear la estructura de archivos

    Crea un directorio dedicado y el archivo de composición:

    mkdir -p /opt/pocketbase && cd /opt/pocketbase

    Crea el archivo docker-compose.yml con el siguiente contenido:

    services:
      pocketbase:
        image: ghcr.io/muchobien/pocketbase:latest
        restart: unless-stopped
        volumes:
          - ./pb_data:/pb_data
        expose:
          - "8090"

    No publiques el puerto 8090 directamente a Internet — deja que el proxy inverso lo gestione.

  3. Configurar HTTPS con Caddy (proxy inverso recomendado)

    Caddy obtiene y renueva automáticamente los certificados Let's Encrypt. Crea /opt/pocketbase/Caddyfile:

    app.your-domain.com {
        reverse_proxy pocketbase:8090
    }

    Añade el servicio Caddy en docker-compose.yml:

      caddy:
        image: caddy:2-alpine
        restart: unless-stopped
        ports:
          - "80:80"
          - "443:443"
        volumes:
          - ./Caddyfile:/etc/caddy/Caddyfile
          - caddy_data:/data
        depends_on:
          - pocketbase
    
    volumes:
      caddy_data:

    Caddy activa WebSockets por defecto. Si prefieres Nginx, añade las cabeceras Upgrade y Connection en tu location /.

  4. Arrancar y verificar

    Inicia la pila con docker compose up -d y sigue los logs:

    docker compose logs -f pocketbase

    Deberías ver una línea indicando que PocketBase escucha en 0.0.0.0:8090. Verifica HTTPS con curl -I https://app.your-domain.com/_/ — debe devolver HTTP/2 200.

  5. Crear la cuenta super-administrador

    Abre https://app.your-domain.com/_/ en tu navegador. En el primer acceso, PocketBase te invita a crear una cuenta super-administrador (email + contraseña). Hazlo inmediatamente tras el arranque — antes de hacer pública la URL — porque cualquier persona que acceda a /_/ puede crear esta primera cuenta en una instancia nueva.

Configurar autenticación OAuth (Google, GitHub, GitLab)

PocketBase soporta nativamente OAuth2 con varios proveedores: Google, GitHub, GitLab, Discord, Twitter/X, Microsoft, Apple y otros. La configuración se hace íntegramente desde la interfaz de administración.

Para Google OAuth:
1. Abre la Google Cloud Console, crea un proyecto y activa la API "OAuth consent screen".
2. En "Credentials", crea un "OAuth 2.0 Client ID" de tipo "Web application".
3. Añade https://app.your-domain.com/api/oauth2-redirect como URI de redirección autorizada.
4. Copia el Client ID y el Client secret.
5. En PocketBase /_/, ve a Settings → Auth providers → Google, actívalo y pega tus credenciales.

Para GitHub OAuth:
1. En GitHub, ve a Settings → Developer settings → OAuth Apps → New OAuth App.
2. Indica https://app.your-domain.com como Homepage URL y https://app.your-domain.com/api/oauth2-redirect como Authorization callback URL.
3. Copia el Client ID y genera un Client Secret.
4. Activa GitHub en Settings → Auth providers de PocketBase.

Cada proveedor activo aparecerá automáticamente en la página de login generada por PocketBase. Tu frontend solo necesita llamar a pb.collection('users').authWithOAuth2({ provider: 'google' }) mediante el SDK JavaScript.

Copias de seguridad automáticas: SQLite y archivos

PocketBase almacena todo en la carpeta pb_data: la base de datos SQLite (pb_data/data.db), los archivos subidos (pb_data/storage/) y los logs. Una copia de seguridad completa es simplemente archivar esa carpeta.

Método 1 — cron simple: añade esta línea a tu crontab (crontab -e) para un archivo diario a las 3am:

0 3 * * * tar czf /var/backups/pocketbase-$(date +\%F).tar.gz /opt/pocketbase/pb_data && find /var/backups -name 'pocketbase-*.tar.gz' -mtime +7 -delete

Método 2 — copias de seguridad integradas de PocketBase: desde /_/, ve a Settings → Backups. PocketBase puede crear archivos de pb_data desde el admin o mediante la API (POST /api/backups).

Método 3 — rclone a S3: para copia automática fuera del servidor:

0 4 * * * rclone sync /opt/pocketbase/pb_data your-remote:pocketbase-backup/

Conserva siempre una copia fuera del servidor — si el disco falla, una copia solo local no sirve de nada.

Modo WAL de SQLite y rendimiento

PocketBase activa el modo WAL (Write-Ahead Logging) de SQLite por defecto en versiones recientes. Este modo permite lecturas concurrentes durante las escrituras, evitando que una inserción bloquee todas las lecturas. Si experimentas timeouts bajo carga alta, verifica con PRAGMA journal_mode; en el admin SQL — la respuesta debe ser wal.

Para tráfico elevado, coloca pb_data en un volumen NVMe y evita cualquier sistema de archivos de red.

Resolución de problemas: errores comunes

Puerto ya en uso: si docker compose up falla con bind: address already in use, verifica con ss -tlnp | grep ':80' qué servicio ocupa el puerto. Detén nginx o Apache (systemctl stop nginx) o cambia sus puertos.

Permisos en pb_data: PocketBase corre como usuario nobody (UID 65534) en el contenedor oficial. Si montaste una carpeta creada por root, el proceso no puede escribir. Corrige con chown -R 65534:65534 /opt/pocketbase/pb_data.

/_/ inaccesible tras el arranque: verifica que el proxy inverso apunte al nombre del servicio Docker (pocketbase:8090) y no a localhost:8090.

Actualizar PocketBase: cambia el tag de la imagen en docker-compose.yml luego docker compose pull && docker compose up -d. PocketBase aplica migraciones de esquema automáticamente. Haz una copia de seguridad de pb_data antes de cualquier actualización mayor.

Certificado Let's Encrypt no obtenido: Caddy necesita los puertos 80 y 443 accesibles desde Internet. Verifica tu firewall (ufw status).

Para ir más lejos: CLI admin, colecciones y hooks

CLI de administración: PocketBase expone una CLI para operaciones comunes. Desde el contenedor: docker exec -it pocketbase_pocketbase_1 /pb/pocketbase --help.

Colecciones personalizadas: en /_/, crea tus colecciones (equivalentes a tablas) definiendo campos tipados. Las reglas de API se expresan en sintaxis PocketBase (@request.auth.id != "" para restringir a usuarios autenticados).

Hooks (JavaScript del lado del servidor): desde PocketBase v0.17, puedes extender el backend con scripts JavaScript del lado del servidor (pb_hooks/*.pb.js). Ejemplos: enviar un email al crear un usuario, validar datos complejos, disparar un webhook. Estos hooks son archivos montados en el contenedor:

volumes:
  - ./pb_data:/pb_data
  - ./pb_hooks:/pb_hooks

SDK JavaScript: el SDK oficial (npm install pocketbase) simplifica las llamadas desde tu frontend React, Vue o móvil. Gestiona la autenticación, el refresco del token y las suscripciones en tiempo real (pb.collection('tasks').subscribe('*', callback)).

PocketBase vs alternativas self-hosted

Desplace la tabla

CriterioPocketBaseSupabase self-hostedAppwrite
Complejidad de instalaciónMuy baja (1 binario o 1 contenedor)Alta (10+ servicios)Media (6 servicios)
RAM mínima512 MB4 GB+2 GB+
Base de datosSQLite integradoPostgreSQLMariaDB
Autenticación OAuthSí (nativa)Sí (GoTrue)Sí (nativa)
Tiempo realServer-Sent EventsWebSocketWebSocket
Almacenamiento de archivosSí (local + S3)Sí (compatible S3)Sí (local + S3)
Escalado horizontalNo (SQLite archivo único)Sí (PostgreSQL)Limitado

Documentación oficial

Para configuración avanzada y opciones específicas de la herramienta, consulta la documentación oficial de PocketBase. Esta guía cubre el despliegue en VPS; la documentación del editor es la referencia para ajustes finos, actualizaciones mayores y casos de uso específicos.

Si quieres probar PocketBase sin Docker, descarga el binario Linux desde github.com/pocketbase/pocketbase/releases, ejecuta ./pocketbase serve --http=0.0.0.0:8090 y crea un servicio systemd para que se reinicie automáticamente. Este enfoque es incluso más ligero que Docker en VPS pequeños.

Lance su backend PocketBase en unos minutos

El VPS Cloud ServOrbit le da un entorno Docker listo para usar, una IP fija y discos SSD rápidos para alojar PocketBase con SSL automático y copias de seguridad simplificadas.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva