Operación /

Copias de seguridad

Haz copia de lo que Gresbase guarda en /data y restáurala, para que perder el volumen no te cueste las conexiones ni las consultas guardadas.

En esta página

Qué copiar#

Gresbase guarda su propio estado en /data (o en GRESBASE_DATA_DIR, si lo defines):

Ruta Qué contiene
gresbase.json Ajustes cambiados desde la app, conexiones guardadas, la cuenta de administrador y el modo elegido en el asistente. Las contraseñas de las conexiones y el secreto de sesión van cifrados.
secret.key La clave que cifra esos secretos. Se crea en el primer arranque si no defines GRESBASE_SECRET_KEY.
snippets/ Las consultas guardadas, como ficheros .sql. Las de una conexión concreta van en una carpeta @<id>/.

Copia los tres juntos. Un gresbase.json sin su clave pierde los secretos cifrados.

Esto no copia tus bases de datos. Son de tu servidor PostgreSQL: para ellas usa pg_dump.

El historial del editor SQL y las preferencias de la interfaz se guardan en cada navegador, no en /data. La copia no los incluye.

Copiar un volumen de Docker#

La imagen de Gresbase no tiene shell ni tar, así que la copia la hace un contenedor de usar y tirar. Para Gresbase antes, para que los ficheros no cambien a mitad de copia.

  1. Busca el nombre del volumen#

    Compose antepone el nombre del proyecto al volumen, por ejemplo miproyecto_gresbase-data. Para verlos:

    docker volume ls
  2. Para Gresbase#

    docker compose stop gresbase
  3. Copia el volumen a un fichero#

    Cambia gresbase-data por el nombre que encontraste. El archivo queda en la carpeta actual.

    docker run --rm \
      -v gresbase-data:/data:ro \
      -v "$PWD":/backup \
      alpine tar czf /backup/gresbase-data.tar.gz -C /data .
  4. Vuelve a arrancar Gresbase#

    docker compose start gresbase

Si montas una carpeta del anfitrión en lugar de un volumen (./data:/data), copia esa carpeta.

El archivo incluye secret.key, que descifra las contraseñas guardadas. Guárdalo con el mismo cuidado que las contraseñas.

Restaurar#

  1. Para Gresbase#

    docker compose stop gresbase
  2. Descomprime el archivo en el volumen#

    Primero vacía el volumen y después extrae la copia.

    docker run --rm \
      -v gresbase-data:/data \
      -v "$PWD":/backup \
      alpine sh -c "rm -rf /data/* /data/.[!.]* ; tar xzf /backup/gresbase-data.tar.gz -C /data"

    La imagen corre con el usuario 65532, que tiene que poder escribir en /data. El archivo conserva propietarios y permisos: los ficheros extraídos, y el propio /data, siguen siendo de 65532, también en un volumen nuevo y vacío. No hace falta ningún chown.

  3. Arranca Gresbase#

    docker compose start gresbase

Si la copia viene de un Gresbase más nuevo, uno más antiguo no arranca con ella. Lo explica Actualizar.

La clave de cifrado#

Los secretos de gresbase.json van sellados con una clave. Gresbase la toma de uno de estos dos sitios:

  • GRESBASE_SECRET_KEY, si está definida. Mínimo 32 caracteres. En ese caso no lee ni crea secret.key.
  • secret.key en el directorio de datos, si no. Contiene 64 caracteres hexadecimales y se crea en el primer arranque.

Si la clave cambia o desaparece, Gresbase arranca igual, pero no puede descifrar lo que selló la anterior:

  • Se cierran todas las sesiones, salvo que tengas GRESBASE_SESSION_SECRET definida. Un secreto de sesión nuevo sustituye al anterior.
  • Las conexiones guardadas pierden su contraseña. Edita cada una y vuelve a escribirla. Lo tienes en Conexiones guardadas.
  • La cuenta de administrador sigue funcionando. Su contraseña se guarda como hash, no cifrada.

Si usas GRESBASE_SECRET_KEY, guárdala junto a tus otros secretos. Sin ella, una copia de /data no puede descifrar nada.

Un secret.key que no tenga 64 caracteres hexadecimales impide arrancar, con el mensaje /data/secret.key is not a valid key (64 hex characters).