Actualizar tu versión OSS
Logto sigue semver. Puedes encontrar cada versión y sus cambios en GitHub Releases. Esta guía explica cómo funciona una actualización, cómo actualizar cada tipo común de despliegue y cómo solucionar los problemas que puedas encontrar.
Cómo funciona una actualización
Una actualización tiene dos partes:
- El código de Logto: la imagen de Docker o el tarball de la versión que ejecutas.
- El esquema de la base de datos: los cambios de esquema entre versiones se entregan como alteraciones de base de datos, y los despliegas con el Logto CLI. Tu base de datos registra qué alteraciones se han desplegado.
Cuando Logto se inicia, revisa la base de datos. Si alguna alteración incluida en esta versión de Logto aún no se ha desplegado, Logto se niega a iniciar:
Found undeployed database alterations, you must deploy them first by npm run alteration deploy command.
...
Error: Undeployed database alterations found.
Las alteraciones están diseñadas para ser compatibles con la versión anterior de Logto, por lo que las instancias que aún ejecutan la versión anterior siguen funcionando después de desplegar las alteraciones. Esto da el siguiente orden, que evita tiempos de inactividad:
- Despliega las alteraciones usando la nueva versión de Logto.
- Sustituye las instancias en ejecución por la nueva versión.
Recomendamos hacer una copia de seguridad de la base de datos antes de comenzar.
Siempre despliega las alteraciones con el CLI que viene con la versión a la que estás actualizando, como la nueva imagen de Docker o el nuevo tarball de la versión. Los scripts de alteración vienen incluidos con el CLI, por lo que un CLI antiguo no puede desplegar las alteraciones de una versión más nueva de Logto.
Puedes actualizar a través de varias versiones a la vez. Desplegar alteraciones hasta la versión objetivo despliega todas las alteraciones intermedias, en orden.
Antes de actualizar
- Lee las notas de la versión de cada versión entre tu versión actual y la versión objetivo.
- Haz una copia de seguridad de tu base de datos (recomendado), por ejemplo con
pg_dumpo una instantánea de tu proveedor de base de datos. Las alteraciones se pueden revertir, pero una copia de seguridad es la forma más fiable de volver atrás. - Fija la versión objetivo. Usa una versión exacta como
ghcr.io/logto-io/logto:1.45.0en lugar delatest. Conlatest, un reinicio o un nuevo pull puede actualizar Logto antes de que se desplieguen las alteraciones, y Logto no se iniciará. - Verifica el requisito de Node.js si ejecutas Logto directamente con Node.js. Cada versión lo declara en el campo
enginesde supackage.json. Por ejemplo, Logto 1.45.0 requiere Node.js^22.14.0. - Verifica tus conectores personalizados, si tienes alguno. Consulta Los conectores personalizados se omiten después de actualizar.
- Actualiza primero el entorno de pruebas, si tienes un entorno de staging con su propia base de datos. Si tu entorno de staging comparte la base de datos con producción, desplegar alteraciones desde staging también cambia la base de datos de producción. Las instancias de producción en la versión anterior siguen funcionando, porque las alteraciones son compatibles con la versión anterior.
Pasos de actualización
En los siguientes ejemplos, 1.45.0 es la versión objetivo. Sustitúyela, y la URL de la base de datos, por tus propios valores.
Docker
-
Descarga la nueva imagen:
docker pull ghcr.io/logto-io/logto:1.45.0 -
Despliega las alteraciones con la nueva imagen. Tu contenedor actual de Logto sigue funcionando durante este paso:
docker run --rm \-e DB_URL=postgres://username:password@your_postgres_url:port/db_name \ghcr.io/logto-io/logto:1.45.0 \alteration deploy 1.45.0Deberías ver una salida como esta. El número y los nombres de las alteraciones dependen de las versiones entre las que actualices:
info Deploy target 1.45.0info Found 1 alteration to deployinfo Run alteration 1.45.0-1791531333-add-tenant-viewer-role.js `up()` function succeedednota:El entrypoint de la imagen es
npm run, así que los argumentos después del nombre de la imagen se pasan anpm run. Escribealteration deploy 1.45.0, nonpm run alteration deploy 1.45.0. -
Sustituye el contenedor en ejecución por uno que use la nueva imagen. Mantén los mismos puertos, variables de entorno y otras opciones que antes:
docker stop logto && docker rm logtodocker run -d --name logto \-p 3001:3001 \-p 3002:3002 \-e DB_URL=postgres://username:password@your_postgres_url:port/db_name \ghcr.io/logto-io/logto:1.45.0
Docker Compose
-
Actualiza la etiqueta de la imagen del servicio Logto en tu archivo Compose, luego descárgala:
services:logto:image: ghcr.io/logto-io/logto:1.45.0docker compose pull logto -
Despliega las alteraciones en un contenedor temporal de la nueva imagen:
docker compose run --rm --entrypoint sh logto -c "npm run alteration deploy 1.45.0"Sustituye
logtopor el nombre del servicio Logto en tu archivo Compose (el archivo demodocker-compose.ymllo llamaapp). Sobrescribir el entrypoint hace que el comando funcione incluso si el servicio define su propioentrypoint, como en el archivo demo. -
Recrea el contenedor Logto con la nueva imagen:
docker compose up -d logto
Si ejecutas una sola instancia de Logto, puedes hacer que el contenedor inicialice una nueva base de datos y despliegue alteraciones cada vez que se inicia:
services:
logto:
image: ghcr.io/logto-io/logto:1.45.0
entrypoint:
['sh', '-c', 'npm run cli db seed -- --swe && npm run alteration deploy latest && npm start']
Aquí latest significa la última versión incluida en la imagen, por lo que las alteraciones siempre coinciden con la imagen que ejecutas. No uses este enfoque con múltiples instancias. Consulta Kubernetes para conocer la razón.
Si tu configuración se basa en el archivo demo docker-compose.yml, su contenedor de Postgres almacena los datos en un volumen anónimo. Los volúmenes anónimos no se montan de nuevo después de docker compose down, así que el siguiente docker compose up comienza con una base de datos vacía. Antes de ejecutar docker compose down, mueve los datos a un volumen con nombre o a una base de datos externa.
Kubernetes
Despliega las alteraciones una vez con un Job, luego despliega la nueva imagen.
-
Crea un Job que ejecute las alteraciones con la nueva imagen:
apiVersion: batch/v1kind: Jobmetadata:name: logto-alteration-1-45-0spec:backoffLimit: 0template:spec:restartPolicy: Nevercontainers:- name: alterationimage: ghcr.io/logto-io/logto:1.45.0command: ['/bin/sh', '-c', 'npm run alteration deploy 1.45.0']env:- name: DB_URLvalueFrom:secretKeyRef:name: logtokey: db-urlAplícalo y espera a que termine:
kubectl apply -f logto-alteration-job.yamlkubectl wait --for=condition=complete job/logto-alteration-1-45-0 --timeout=10mkubectl logs job/logto-alteration-1-45-0 -
Actualiza la imagen del Deployment de Logto y espera al rollout. Si tu Deployment tiene un init container que usa la imagen de Logto, como el del ejemplo de la carpeta de conectores compartidos, actualízalo también:
kubectl set image deployment/logto logto=ghcr.io/logto-io/logto:1.45.0kubectl rollout status deployment/logto
Si despliegas con Helm o una herramienta GitOps, ejecuta el Job antes de actualizar el Deployment, por ejemplo como un hook pre-upgrade de Helm o un hook PreSync de Argo CD.
Despliega las alteraciones desde un solo lugar. El CLI no bloquea la base de datos mientras despliega alteraciones, así que no las despliegues desde el comando de inicio de cada réplica.
Node.js
Si instalaste Logto con npm init @logto o desde un tarball de versión, instala la nueva versión junto a la actual. Mantén el directorio actual hasta que la actualización esté terminada, para poder volver rápidamente si es necesario.
-
Asegúrate de que tu versión de Node.js cumple el requisito de la nueva versión.
-
Descarga y extrae la nueva versión:
curl -fL -o logto-1.45.0.tar.gz https://github.com/logto-io/logto/releases/download/v1.45.0/logto.tar.gzmkdir logto-1.45.0tar -xzf logto-1.45.0.tar.gz -C logto-1.45.0 --strip-components=1Para obtener la última versión, también puedes ejecutar
npm init @logto@latest -- --path ./logto-new --skip-seed. La opción--skip-seedes necesaria porque tu base de datos ya existe. -
Copia tu configuración desde la instalación actual (
~/logtopor defecto):cp ~/logto/.env logto-1.45.0/.env -
Los conectores oficiales están incluidos en la versión. Si añadiste otros conectores, añádelos de nuevo al nuevo directorio, por ejemplo:
cd logto-1.45.0npm run cli connector add <connector-package-name> -
Despliega las alteraciones desde el nuevo directorio. El CLI lee
DB_URLdel archivo.env:npm run alteration deploy 1.45.0 -
Detén el proceso actual de Logto y arranca el nuevo desde el nuevo directorio:
npm startSi usas un gestor de procesos como systemd o pm2, actualiza su directorio de trabajo al nuevo directorio.
Proveedores de hosting
Si desplegaste Logto con una plantilla de un solo clic de un proveedor de hosting, cambia la etiqueta de la imagen de Logto a la versión objetivo. Antes de que se inicie la nueva versión, despliega las alteraciones con la nueva imagen usando el comando temporal o la función de shell del proveedor, ejecutando npm run alteration deploy 1.45.0. Para una sola instancia, también puedes usar el comando de inicio del tip de Docker Compose. Las plantillas son mantenidas por los proveedores, así que revisa su documentación para más detalles.
Revertir
Si la nueva versión no funciona como esperabas:
-
Vuelve a la versión anterior. Como las alteraciones son compatibles con la versión anterior de Logto, normalmente puedes ejecutar la versión anterior de nuevo sin tocar la base de datos. Esto solo aplica a la versión justo anterior a la versión objetivo. Si actualizaste a través de varias versiones, revierte también las alteraciones.
-
Revierte las alteraciones. Ejecuta la reversión con la nueva versión, porque la versión anterior no contiene los scripts de alteración más recientes. Luego inicia la versión anterior. Por ejemplo, con Docker:
docker run --rm \-e DB_URL=postgres://username:password@your_postgres_url:port/db_name \ghcr.io/logto-io/logto:1.45.0 \alteration rollback 1.44.0Después de una reversión, la nueva versión no se iniciará hasta que vuelvas a desplegar las alteraciones. Consulta Revertir alteraciones para más detalles.
-
Restaura la copia de seguridad, si hiciste una. Esta es la opción más fiable, pero se perderán los datos escritos después de la copia de seguridad.
Solución de problemas
Logto no se inicia después de actualizar
Si los logs muestran Undeployed database alterations found, despliega las alteraciones como se describe en Pasos de actualización.
Si ya has desplegado las alteraciones y aún ves este error, probablemente se desplegaron con un CLI antiguo, como un comando logto instalado globalmente o un npx @logto/cli que resolvió a una versión anterior. En ese caso, el CLI informa Found 0 alteration to deploy porque no conoce las alteraciones más recientes. Despliega de nuevo con el CLI de la nueva versión: la nueva imagen de Docker, el nuevo directorio de la versión, o npx @logto/cli@1.45.0 db alteration deploy 1.45.0.
Logto falla al iniciar después de un reinicio
Si usas la etiqueta latest, un reinicio o un nuevo pull de la imagen puede haber actualizado Logto sin desplegar las alteraciones. Despliega las alteraciones con la imagen que estás ejecutando, luego fija una versión exacta para evitar actualizaciones no planificadas.
Error: Missing target version
Sin una terminal interactiva, el CLI no puede preguntar qué versión desplegar. Pasa la versión objetivo explícitamente, como alteration deploy 1.45.0, o usa alteration deploy latest para desplegar hasta la última versión incluida en el CLI.
npm error Missing script: "npm"
Pasaste npm run alteration ... después del nombre de la imagen en docker run. El entrypoint de la imagen ya es npm run, así que pasa alteration deploy 1.45.0 en su lugar.
Una alteración falla
Cada alteración se ejecuta en una transacción, por lo que una alteración fallida no deja cambios parciales. Soluciona la causa y ejecuta el mismo comando de nuevo. Las alteraciones que ya se desplegaron se omiten. Causas comunes:
- Tiempo de espera de la sentencia. Las alteraciones en tablas grandes pueden tardar más que el tiempo de espera por defecto de 60 segundos. Establece
DATABASE_STATEMENT_TIMEOUT(en milisegundos), o ponlo enDISABLE_TIMEOUT, para el comando de alteración. - Permisos de base de datos. Ejecuta las alteraciones como un usuario de base de datos con los mismos privilegios que usaste para inicializar la base de datos.
Algunas alteraciones incluyen pasos que se ejecutan fuera de una transacción. Si el mensaje de error dice que se pueden haber aplicado pasos no transaccionales, revisa el estado de tu base de datos antes de ejecutar el comando de nuevo.
Los conectores personalizados se omiten después de actualizar
Logto verifica que cada conector sea compatible con la versión de @logto/connector-kit incluida con Logto. Si un conector no lo es, Logto lo omite y registra:
[load-connector] skip <connector-name> due to error: Connector requires @logto/connector-kit to be <range>, but the version here is <version>.
Actualiza el conector para que sea compatible con la nueva versión de @logto/connector-kit. Establecer IGNORE_CONNECTOR_VERSION_CHECK=1 omite la comprobación, pero está altamente desaconsejado en producción.
Esto también puede ocurrir con conectores oficiales en una carpeta de conectores compartidos: npm run cli connector add -- --official descarga los conectores más recientes de npm, que pueden requerir una versión más nueva de Logto. En ese caso, actualiza Logto, o usa los conectores oficiales incluidos en la imagen de Docker en lugar de una carpeta compartida.
npm init @logto elimina el nuevo directorio
Si ejecutas npm init @logto contra tu base de datos existente sin --skip-seed, la inicialización falla porque la base de datos ya existe, y el CLI elimina el directorio que acaba de crear. Tu base de datos no se modifica. Ejecuta el comando de nuevo con --skip-seed.