> ## Documentation Index
> Fetch the complete documentation index at: https://docs.casebender.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Actualizar CaseBender

> Actualice su despliegue de CaseBender a la última versión de forma segura, sin perder datos, licencias ni credenciales.

## Descripción general

CaseBender se distribuye como un conjunto de imágenes de contenedor versionadas.
Actualizar significa descargar las últimas imágenes y recrear los contenedores.
Sus datos, la licencia y la configuración residen en **volúmenes de Docker con
nombre** y en su archivo **`.env`** — ambos se conservan durante las
actualizaciones, por lo que una actualización nunca toca sus casos, usuarios,
credenciales ni licencia mientras los mantenga.

<Note>
  Las migraciones de base de datos y la carga de datos por defecto se ejecutan
  automáticamente al arrancar tras cada actualización. No necesita ejecutar ningún
  comando de migración manualmente.
</Note>

## Qué se conserva durante las actualizaciones

| Qué                                     | Dónde reside               | Conservado por              |
| --------------------------------------- | -------------------------- | --------------------------- |
| Casos, alertas, usuarios, configuración | PostgreSQL                 | volumen `pgdata`            |
| Clave secreta de licencia + blob        | `/app/apps/web/app/secret` | volumen `casebender_secret` |
| Archivos subidos / adjuntos             | MinIO                      | volumen `miniodata`         |
| Estado de cola / caché                  | Redis                      | volumen `redis_data`        |
| Configuración de entorno                | `.env`                     | su archivo `.env`           |

<Warning>
  Nunca ejecute `docker compose down -v` en un sistema de producción. La opción
  `-v` elimina todos los volúmenes con nombre — su base de datos, licencia y
  archivos. Sin esos volúmenes, el siguiente arranque crea una base de datos nueva,
  lo que restablece la contraseña de administrador al valor por defecto y regenera
  la licencia.
</Warning>

## Procedimiento de actualización (Docker Compose)

<Steps>
  <Step title="Haga una copia de seguridad de la base de datos y del .env">
    ```bash theme={null}
    # Copia de seguridad de PostgreSQL
    docker compose exec -T db pg_dump -U superadmin casebender > casebender-backup-$(date +%F).sql

    # Guarde una copia de su configuración
    cp .env .env.backup
    ```
  </Step>

  <Step title="Descargue las últimas imágenes">
    ```bash theme={null}
    docker compose pull
    ```
  </Step>

  <Step title="Recree los contenedores">
    ```bash theme={null}
    docker compose up -d
    ```

    Compose solo recrea los servicios cuya imagen cambió y conserva sus volúmenes.
  </Step>

  <Step title="Observe los registros">
    ```bash theme={null}
    docker compose logs -f app
    ```

    Las migraciones y la carga de datos se ejecutan al arrancar — espere a que la
    aplicación informe que está saludable.
  </Step>
</Steps>

## Verificación tras la actualización

* Inicie sesión y confirme que sus casos, alertas y usuarios existentes están presentes.
* Confirme que su inicio de sesión sigue funcionando (su contraseña de administrador no cambia).
* Compruebe que el worker está procesando trabajos:

```bash theme={null}
docker compose logs worker | tail
```

## Reversión (rollback)

Si algo sale mal, fije la etiqueta de la imagen anterior y restaure su copia de seguridad:

```bash theme={null}
# Fije la versión conocida como buena en docker-compose.yml, p. ej.
#   image: casebender/casebender:vX.Y.Z
docker compose pull
docker compose up -d

# Si es necesario, restaure la copia de seguridad de la base de datos
cat casebender-backup-YYYY-MM-DD.sql | docker compose exec -T db psql -U superadmin casebender
```

<Note>
  Actualice siempre primero un entorno de staging y realice una copia de seguridad
  reciente de la base de datos justo antes de actualizar producción.
</Note>

## Errores comunes al actualizar

Los dos problemas más comunes provienen de perder el estado:

* **Cambiar el nombre del proyecto o el directorio de Compose.** Docker deriva los
  nombres de los volúmenes del proyecto. Renombrar la carpeta o usar un nombre de
  proyecto `-p` diferente hace que Compose apunte a volúmenes *nuevos y vacíos*.
  Actualice siempre desde el mismo directorio/proyecto para reutilizar sus
  volúmenes existentes.
* **Falta `LICENSE_SECRET_KEY` y no existe el volumen `casebender_secret`.** En
  despliegues antiguos sin el volumen de secreto persistente, defina
  `LICENSE_SECRET_KEY` en `.env` (o añada el volumen) para que la licencia
  sobreviva. Los despliegues actuales lo conservan automáticamente.

## Instalador de escritorio

Si desplegó con el Instalador de escritorio, use el flujo de actualización
integrado de la aplicación — descarga las últimas imágenes y recrea los servicios
conservando su directorio de datos, el `.env` y la clave de licencia.

## Google Cloud Run

Las actualizaciones en Cloud Run despliegan una nueva revisión. Como Cloud Run
tiene un sistema de archivos efímero, el secreto de licencia debe proporcionarse
mediante **Secret Manager** como `LICENSE_SECRET_KEY` para que persista entre
revisiones. Vuelva a desplegar contra su instancia de Cloud SQL y secretos
existentes:

```bash theme={null}
gcloud run deploy casebender-web --image <nueva-imagen> --region <región>
```

Las migraciones se ejecutan automáticamente en la nueva revisión.
