Saltar al contenido principal

Actualizaciones y copias de seguridad

Actualizar​

Descarga las imágenes nuevas y recrea los contenedores. Las migraciones se ejecutan al arrancar.

docker compose pull && docker compose up -d

Si usas el perfil de IA local, reconstruye la imagen de Laya tras una actualización:

docker compose --profile ai build laya

Tareas en segundo plano y el worker​

El trabajo en segundo plano (mantenimiento hoy, y la sincronización del correo y el pase de IA según vayan llegando) se ejecuta dentro del mismo contenedor. La imagen ejecuta campbooks-server all, que es la API más el worker de tareas. Las tareas viven en Postgres, así que no se pierde nada al reiniciar.

Para ejecutar el worker por separado, añade un segundo servicio con la misma imagen y el mismo entorno, y estos dos ajustes:

  • command: ["worker"]
  • healthcheck: { disable: true }, porque la comprobación de salud sondea la API, que un worker no sirve.

Después dale al primer servicio command: ["api"]. Los ajustes del worker son el bloque CAMPBOOKS_JOBS__* en Configuración.

Qué respaldar​

Respalda estos elementos juntos, aproximadamente a la misma hora:

QuéDóndeContiene
Postgresvolumen postgres-data (usa pg_dump)Todo excepto los archivos y la clave secreta de la instancia: cuentas, claves de inicio de sesión, autorizaciones
Archivosvolumen blobs-data, o tu bucketMensajes en bruto, adjuntos, documentos
Clave secreta de la instanciavolumen server-secretsLa clave que abre las claves de inicio de sesión y las credenciales guardadas en Postgres

Guarda también una copia de tu .env y de los archivos de secreto de cliente de deploy/secrets/. No están en ningún volumen.

:::warning Guarda una copia de la clave secreta de la instancia server-init genera la clave una sola vez, en el primer arranque. Protege las claves de inicio de sesión y las credenciales de las cuentas conectadas. La clave no se puede recuperar si la pierdes, así que guarda una copia en un lugar seguro, aparte de tus copias de seguridad.

Sin la clave correcta, el servidor se niega a arrancar. Si la clave está realmente perdida, puedes empezar de nuevo con una nueva:

  1. Elimina las filas de identity.signing_keys en Postgres.
  2. Quita la clave: docker compose run --rm server-init rm /secrets/secret-key.
  3. Ejecuta docker compose up -d && docker compose restart server.

Todo el mundo vuelve a iniciar sesión, y los buzones conectados muestran «necesita reautorización» hasta que su propietario los conecte de nuevo. El correo y los documentos ya guardados no se pierden. :::

Restaura Postgres y los archivos al mismo punto en el tiempo. Un archivo que falta en el almacén mientras Postgres aún lo lista no se puede leer. Por eso haz primero el volcado de la base de datos y después copia los archivos: los archivos subidos entretanto son solo extras inofensivos. Para un bucket, activa el versionado (y conserva las versiones antiguas unos días) en lugar de copiar.

Respalda los volúmenes locales con un contenedor desechable. Para los archivos:

docker run --rm -v campbooks_blobs-data:/data -v "$PWD":/backup busybox:1.37.0-musl \
tar czf /backup/blobs-data.tgz -C /data .

Y para la clave secreta de la instancia:

docker run --rm -v campbooks_server-secrets:/data -v "$PWD":/backup busybox:1.37.0-musl \
tar czf /backup/server-secrets.tgz -C /data .

El archivo contiene la propia clave, así que guárdalo donde solo tú puedas leerlo.

Actualizar desde el inicio de sesión con Rauthy​

Las versiones anteriores incluían Rauthy como proveedor de identidad: los servicios idp, idp-init e idp-provision y el volumen idp-data. Campbooks ahora inicia la sesión de las personas por sí mismo, y el nuevo compose.yaml no tiene ninguno de ellos.

  1. Copia el nuevo compose.yaml sobre el tuyo y elimina los tres contenedores antiguos:

    docker compose up -d --remove-orphans

    No se rompe nada si dejas los servicios antiguos en marcha. Simplemente ya no se usan.

  2. Las cuentas que existían en Rauthy no se trasladan. Esas personas vuelven a iniciar sesión con Google, Microsoft, Zoho o una llave de acceso, y obtienen una cuenta nueva de Campbooks.

  3. Pasa los antiguos ajustes de proveedor CAMPBOOKS_IDP_* a CAMPBOOKS_GOOGLE__*, CAMPBOOKS_MICROSOFT__* y CAMPBOOKS_ZOHO__*. Mantén cada secreto de cliente en deploy/secrets/<provider>-client-secret. Consulta Inicio de sesión.

  4. Añade ${CAMPBOOKS_PUBLIC_URL}/auth/callback/<provider> como URI de redirección en la aplicación OAuth de cada proveedor.

  5. El volumen idp-data se queda donde está. Cuando estés seguro de que no lo necesitas, elimínalo:

    docker volume rm <project>_idp-data

Monitorización (opcional)​

Campbooks escribe registros JSON en stdout y por defecto no exporta nada.

docker compose logs server

Los ajustes CAMPBOOKS_TELEMETRY__* activan una página de Prometheus o la exportación OTLP. Consulta .env.example.