Qué es Logto, y qué no es
Logto es una plataforma de autenticación entregada como un SDK: usted la integra en el código de su aplicación en unas quince líneas, y se encarga de todo el ciclo de vida de las cuentas, en su propio servidor. Es distinto de las otras dos herramientas de autenticación del catálogo ServOrbit:
- Authelia añade MFA e inicio de sesión único *delante* de aplicaciones existentes, por delegación, sin tocar su código: protege aplicaciones que no tienen ninguna pantalla de inicio de sesión.
- Authentik es un proveedor de identidad completo, para centralizar el inicio de sesión único de sus herramientas autoalojadas (Grafana, Gitea, Nextcloud).
- Logto sustituye a un servicio de autenticación alojado: usted llama a su SDK desde su aplicación React, Python o Go, y él gestiona cuentas, sesiones, conectores sociales y tokens.
Si está construyendo un producto en el que los usuarios crean una cuenta, Logto es la herramienta adecuada.
Requisitos previos
Antes de desplegar Logto 1.19+, verifique los siguientes puntos en su VPS ServOrbit:
- RAM: al menos 2 GB (4 GB recomendados si espera más de 5 000 usuarios activos). Logto se ejecuta sobre Node.js 20 LTS y comparte la misma instancia que PostgreSQL 17.
- CPU: 1 vCPU es suficiente para empezar, pero 2 vCPU evitan latencias de inicio de sesión bajo carga.
- Disco: reserve al menos 10 GB libres — PostgreSQL asigna registros WAL y las sesiones activas se acumulan rápidamente con el registro de auditoría activado por defecto.
- Docker ≥ 24.0 y Docker Compose ≥ 2.20 — preinstalados en todas las ofertas VPS de ServOrbit.
- PostgreSQL 17 como mínimo (incluido en la imagen oficial de Logto) — las versiones anteriores no admiten las extensiones requeridas.
- Un nombre de dominio o subdominio apuntado a su VPS y resuelto públicamente: Logto inscribe ese dominio en cada token OIDC que emite. Debe estar definido antes del primer arranque y no puede cambiarse sin reinicializar todos los datos de usuario.
Cómo funciona Logto en producción
Logto arranca dos contenedores: db (PostgreSQL 17 para los usuarios, las aplicaciones, las sesiones y el registro de auditoría) y logto (Node.js, que sirve el punto de acceso OIDC en el puerto 3001 y la consola de administración en el puerto 3002). El proxy inverso nginx de su VPS transmite el tráfico HTTPS de su dominio hacia el puerto 3001 — es el punto de acceso ante el que se autentican sus aplicaciones. El puerto 3002 solo está vinculado al bucle local y únicamente es accesible por un túnel SSH, lo que mantiene la administración de su base de usuarios fuera de la internet pública.
Lo que Logto aporta desde la instalación
- Tokens conformes a OIDC/OAuth 2.0 — JWT firmados que cualquier biblioteca estándar (passport.js, python-jose, go-oidc) verifica sin código específico.
- Conectores de inicio de sesión social — active Google, GitHub, Apple, Microsoft, Discord y una treintena de proveedores más desde la consola, con un clic.
- La autenticación sin contraseña — enlaces mágicos por correo electrónico o códigos de un solo uso por SMS (Twilio, SendGrid, Mailgun), sin mantener un servicio de notificación aparte.
- La doble autenticación — TOTP (Google Authenticator, Authy), llaves físicas WebAuthn/FIDO2 y códigos de recuperación, impuestos por política desde la consola.
- El control de acceso por roles — defina roles y permisos en la consola, recíbalos como claims
scopedel JWT y aplíquelos en su API con una línea de middleware. - SDK para más de 20 frameworks — React, Next.js, Vue, Angular, React Native, Flutter, Python, FastAPI, Go, PHP, Laravel, .NET, Java, Spring Boot y otros.
Despliegue Docker Compose paso a paso
Crear el directorio de trabajo y el archivo Compose
Conéctese a su VPS por SSH y cree el directorio de trabajo:
mkdir -p /opt/logto && cd /opt/logtoCree el archivo
docker-compose.ymlcon el contenido mostrado en la sección en francés, sustituyendoauth.votre-domaine.compor su propio dominio.Generar los secretos y crear el archivo .env
Genere una contraseña de base de datos y una clave AES-256 robustas:
DB_PASSWORD=$(openssl rand -hex 32) SECRET_VAULT_KEK=$(openssl rand -hex 32) printf "DB_PASSWORD=%s\nSECRET_VAULT_KEK=%s\n" "$DB_PASSWORD" "$SECRET_VAULT_KEK" > .env chmod 600 .envVerifique que
.envcontiene dos líneas no vacías antes de continuar.Configurar nginx como proxy inverso
Cree el vhost en
/etc/nginx/sites-available/logtoy active el sitio:ln -s /etc/nginx/sites-available/logto /etc/nginx/sites-enabled/ nginx -t && systemctl reload nginxIniciar la pila y verificar
Lance los dos contenedores:
docker compose up -dSiga los logs durante 60 segundos para confirmar que PostgreSQL está listo y que Logto ha completado sus migraciones. Debe ver la línea
App is running at https://auth.su-dominio.com.Verificar el documento de descubrimiento OIDC
Desde su equipo local, compruebe que el endpoint OIDC responde:
curl -s https://auth.su-dominio.com/.well-known/openid-configuration | python3 -m json.tool | head -10La respuesta debe contener
issuer,authorization_endpointyjwks_uri. Si el comando devuelve un error 502, Logto no ha completado aún sus migraciones — espere 30 segundos y vuelva a intentarlo.Configurar las copias de seguridad automáticas
Añada una tarea cron para exportar la base de datos diariamente. Para copias de seguridad automatizadas, deduplicadas y cifradas hacia S3 o Backblaze B2, monte el volumen
logto_dben una instancia Backrest disponible en el catálogo ServOrbit.
Conectarse por primera vez
Abrir el túnel SSH hacia la consola de administración
La consola de administración escucha en el puerto 3002, vinculado al bucle local por razones de seguridad. Desde su equipo, abra un túnel:
ssh -L 3002:127.0.0.1:3002 root@ip-de-su-vpsMantenga esta terminal abierta durante toda la sesión de administración.
Crear la cuenta de administrador
Abra
http://localhost:3002en su navegador. Aparece el asistente de primer arranque — no existe ninguna credencial por defecto. Introduzca una dirección de correo y una contraseña robusta, luego haga clic en Create account. Guarde estas credenciales en un gestor de contraseñas.Explorar el panel de control
Tras crear la cuenta, accede al panel de control de Logto. Desde aquí puede consultar el registro de auditoría, gestionar usuarios, configurar conectores sociales y crear Aplicaciones — la entidad Logto que representa uno de sus proyectos.
Crear su primera Aplicación
En la consola: Applications → Create application. Elija el tipo que corresponda a su proyecto (Traditional Web, Single Page App, Native o Machine-to-machine). Asígnele un nombre y rellene la Redirect URI — la URL a la que Logto redirige tras un inicio de sesión correcto. Logto genera entonces un
App IDy unApp Secretque usará en su SDK.
Integrar Logto en una aplicación Next.js
Instale el SDK con npm install @logto/next y cree un logto.ts que exporte un new LogtoClient({ … }) configurado con endpoint (la URL de su instancia Logto), appId y appSecret (obtenidos en la consola Logto), baseUrl (la URL de su aplicación), cookieSecret y cookieSecure.
Para proteger una ruta, llame a getLogtoContext({ getAccessToken: true }) importado de @logto/next/server-component: devuelve isAuthenticated y los claims del usuario. Si isAuthenticated es falso, redirija a /api/logto/sign-in; si no, sirva la página apoyándose en los claims recibidos.
Activar el inicio de sesión con Google
En la consola de Google Cloud, cree un identificador de cliente OAuth 2.0 de tipo aplicación web. Indique la URI de redirección autorizada https://auth.su-dominio.com/callback/google y copie el identificador y el secreto de cliente.
En la consola Logto → Conectores → Conectores sociales → Google → Activar. Pegue el identificador y el secreto, y guarde. Google aparece a partir de ese momento como opción de inicio de sesión en su página Logto, sin ninguna modificación de código en su aplicación.
Logto, Authentik, Authelia, Keycloak — ¿cuál elegir?
Desplace la tabla
| Solución | Caso de uso principal | RAM mínima | Complejidad de integración SDK |
|---|---|---|---|
| **Logto** | Autenticación para un producto que está desarrollando (registro, JWT, conectores sociales) | 2 GB | Baja — SDK oficial en 15 líneas para React, Next.js, Python, Go, Flutter y más de 15 frameworks más |
| **Authentik** | SSO centralizado para sus herramientas autoalojadas (Grafana, Gitea, Nextcloud, Proxmox) | 2 GB | Media — configuración mediante Providers en la consola, sin SDK de aplicación |
| **Authelia** | MFA y portal de inicio de sesión delante de aplicaciones existentes, sin modificar su código | 256 MB | Ninguna — delegación de autenticación por cabecera nginx, sin integración SDK |
| **Keycloak** | SSO empresarial, federación LDAP/AD, escenarios multitenant avanzados | 4 GB mínimo | Alta — configuración OIDC manual, bibliotecas de cliente a configurar por framework |
Para un producto SaaS en desarrollo, Logto es el punto de partida natural. Keycloak es adecuado para organizaciones que ya tienen un directorio empresarial que integrar. Authelia y Authentik responden a necesidades de infraestructura, no de aplicaciones.
Solución de problemas frecuentes
Estos son los cuatro problemas más comunes en una primera instalación de Logto en VPS y cómo resolverlos.
La consola de administración no es accesible (puerto 3002)
El puerto 3002 está vinculado intencionalmente a 127.0.0.1 — no es accesible directamente desde internet. Si http://localhost:3002 no responde, compruebe primero que su túnel SSH está abierto. Luego verifique que el contenedor Logto funciona: docker compose ps. Si el contenedor está en estado Exit, consulte los logs: docker compose logs logto --tail=50.
Error 502 en el descubrimiento OIDC
Logto ejecuta sus migraciones de base de datos en el primer arranque — esto tarda entre 30 y 90 segundos. Si el documento de descubrimiento devuelve 502, nginx está enviando peticiones antes de que Logto esté listo. Espere 90 segundos y vuelva a intentarlo.
Redirect URI mismatch
Logto valida estrictamente la URI de redirección: si la URI enviada por su aplicación no coincide exactamente con la declarada en la consola Logto (Application → Redirect URIs), el inicio de sesión falla con redirect_uri_mismatch. Verifique que ha registrado la URL completa, incluyendo el esquema (https://) y la ruta exacta. Las URIs de desarrollo (http://localhost:3000/…) deben añadirse por separado.
Fatal: cannot connect to db
Si los logs de Logto muestran Fatal: cannot connect to db, PostgreSQL no estaba listo cuando Logto intentó conectarse. Simplemente reinicie el contenedor Logto: docker compose restart logto. Se reconectará en cuanto PostgreSQL esté disponible.
Estrategia de copias de seguridad
Logto conserva todo su estado en el volumen PostgreSQL logto_db. Respáldelo con una tarea programada pg_dump, o monte el volumen en una instancia de Backrest (también en el catálogo ServOrbit) para obtener copias de seguridad automatizadas, deduplicadas y cifradas hacia S3, Backblaze B2 o SFTP. Perder el volumen logto_db es perder todas las cuentas de usuario, la configuración de las aplicaciones y el registro de auditoría — respáldelo antes de cualquier migración de VPS.