Recuperación¶
Abre esta página cuando ya nadie puede iniciar sesión, cuando la clave que
firma los tokens de acceso puede haberse filtrado, o cuando la base de datos
tiene que volver a una copia anterior a una migración. Cada procedimiento es
un comando evey admin que se ejecuta dentro del contenedor; la página
Línea de comandos enumera los demás subcomandos.
Antes de empezar¶
Los comandos leen la misma configuración EVEY_* que el servidor, así que
ejecutarlos en el contenedor del servidor no necesita nada más:
docker exec evey-server evey admin <subcommand> # servidor en marcha
docker compose run --rm evey admin <subcommand> # contenedor parado
La segunda forma arranca primero la base de datos integrada, después ejecuta el comando y termina. Ninguno de estos comandos arranca el servidor.
Dar una contraseña nueva a un usuario¶
Úsalo cuando un usuario no puede entrar en su cuenta, o justo después de sospechar que una cuenta ha sido comprometida. La contraseña nueva se muestra una sola vez y nunca se guarda en el registro: cópiala antes de cerrar el terminal.
Así se ve un resultado correcto:
user: admin@example.com
user_id: usr-xxxxxxxx
password: <random 24-byte base64url>
Save this - it is the only time the new password is shown.
Every session of this user has been ended.
Todas las sesiones de ese usuario se cierran a la vez: los tokens de renovación se borran y los tokens de acceso se revocan. Una app que esté abierta lo nota en unos 30 segundos y pide volver a iniciar sesión. Si pierdes lo que ha mostrado el comando, vuelve a ejecutarlo.
Cambiar la clave que firma los tokens de acceso¶
Úsalo cuando el archivo de la clave puede haberse filtrado, o para cerrar la sesión de todos los usuarios a la vez. Para una sola cuenta, basta con Administración → Usuarios → Desactivar o con cambiar la contraseña como se explica arriba.
Lo que pasa:
- El archivo de la clave (
EVEY_JWT_PRIVATE_KEY_PATH,/data/jwt.keypor defecto) se renombra a<path>.rotated-<UTC timestamp>. - Todos los tokens de renovación se borran y todos los tokens de acceso se revocan, en una sola transacción. Las apps abiertas lo notan en unos 30 segundos; todo el mundo vuelve a iniciar sesión.
- En su siguiente arranque, el servidor genera una clave RSA nueva de 2048 bits.
Reinicia el contenedor después (docker compose restart evey) para que se
use la clave nueva. Si no se ha podido llegar a la base de datos, la clave se
aparta igualmente y el comando dice key rotated, but sessions could not be
ended (restart the server, then run this again): haz exactamente eso.
Restaurar una copia anterior a una migración¶
Úsalo cuando hay que deshacer una actualización y se pueden perder los datos
escritos desde entonces. El comando pasa una copia .sql.gz por
gunzip | psql hacia la base de datos configurada.
Warning
La restauración borra y vuelve a crear cada tabla antes de cargarla, así que las filas actuales se sustituyen. Haz antes una copia de seguridad del estado actual (Administración → Copia de seguridad y restauración → Ejecutar ahora) si hay alguna posibilidad de que lo necesites.
docker compose stop evey
docker compose run --rm evey admin restore-backup /data/backups/pre-migration-152-20260418T220130Z.sql.gz
docker compose up -d
Lo que pasa:
- El comando lee primero el archivo entero: tiene que descomprimirse sin
errores y terminar con la línea de cierre de
pg_dump. Una copia cortada o corrupta se rechaza (refusing to restore: ...) antes de borrar nada. - Después espera 5 segundos antes de tocar nada: Ctrl+C lo cancela.
psqlaplica la copia con--single-transactionyON_ERROR_STOP=1. Ante cualquier error, la transacción se deshace y la base de datos se queda como estaba.- Si todo va bien, la última línea es
[admin] restored backup <path>.
Requisitos:
- El nombre del archivo tiene que terminar en
.sql.gz. Los archivos.tar.gzde Administración → Copia de seguridad y restauración se restauran desde el panel, no con este comando. - La base de datos de destino tiene que existir; la copia borra y vuelve a crear cada tabla antes de cargarla, así que se puede restaurar sobre una base de datos con datos, pero no crea la base de datos.
psqlygunziptienen que estar en el PATH, cosa que garantiza la imagen.
Las copias anteriores a una migración se escriben solas antes de cada cambio
del esquema, en EVEY_BACKUP_DIR (/data/backups, es decir,
./evey-data/backups en el equipo), con el nombre
pre-migration-<schema version>-<UTC timestamp>.sql.gz. Se guarda la copia
más reciente de cada una de las 3 últimas versiones del esquema, y las demás
se borran. Migraciones de la base de datos explica
cuándo restaurar una en lugar de hacer retroceder el esquema.