Realiza fácilmente una copia de seguridad de los datos del contenedor docker de Vaultwarden.
:arrow_forward: Actualmente sólo soporta la instalación con SQLite :arrow_backward:
Es un script realizado en shell de Bash que, para su automatización, debería ejecutarse de manera periódica mediante una tarea en cron por ejemplo para posteriormente integrarlo en su sistema de copias de seguridad. Está diseñado únicamente para cumplir con mis propios requisitos de respaldo y como un mero ejercicio de programación de scripts en shell de Bash :relaxed:.
Para hacer una copia de seguridad de tu vaultwarden se sigue uno de los procedimientos explicados en su wiki "Backing up your vault". Básicamente hay dos procedimientos según tengamos la base de datos sobre SQLite u otro gestor como MySQL o PostgreSQL. Copiar toda la carpeta de datos o bien copiar los datos excepto la base de datos y hacer un volcado de los datos de la base de datos junto con su estructura, sea SQLite, MySQL o PostgreSQL.
En la instalación que nos ocupa los procedimientos posibles serían:
db.sqlite3
, db.sqlite3-shm
y db.sqlite3-wal
y asegurarse de que la base de datos no esté en uso. Lo mejor para ello, parar temporalmente el contenedor..backup
del CLI de SQLite (sqlite3
), recomendando igualmente que la base de datos no esté activa aunque En principio se usa la opción 1 para realizar la copia de seguridad de todos los datos.
Características que permite el script:
Futuro: podría elegirse si se quiere añadir un volcado de la base de datos a la carpeta donde se guardan los backup.
El script contiene dos partes. Una de configuración previa y otra operacional del propio backup. Por otro lado, el script tiene un modo depuración que nos servirá para chequear los parámetros sin realizar el backup propiamente.
Descarga el script del repositorio.
wget https://raw.githubusercontent.com/GuruYosh/vwbackup/refs/heads/main/vwbackup.sh
Dale permisos de ejecución al script:
chmod u+x vwbackup.sh
4 -rwxr--r-- 1 user group 485 mar 16 18:35 vwbackup.sh
Edita el script. Al comienzo del mismo tienes los parámetros que debes proporcionar.
Ejecuta el script con el modo depuración activado para evaluar los parámetros (-d o --debug)
Con cada ejecución del script se evaluan las dependecias obligatorias y opcionales del mismo para poder funcionar correctamente
Prueba que el script funciona y verifica el resultado.
Automatiza la ejecución del mismo mediante una tarea en cron, por ejemplo.
Al comienzo del script existen una serie de parámetros obligatorios y opcionales. Edita el fichero vwbackup.sh
con tu editor favorito y modifica los parámetros según tu instalación y necesidades.
Parámetro | Nota | Ejemplo |
---|---|---|
ContainerName | Nombre del contenedor de Vaultwarden | vaultwarden |
ContainerDataDir | Path del directorio donde están los datos del vaultwarden. El usuario que lanza el script debe tener permisos de lectura | "tu_directorio_docker/vaultwarden/data/" |
BackupDataDir | Path del directorio donde se guardarán los ficheros del backup. El usuario que lanza el script debe tener permisos de escritura | "/home/user/backup/" |
CompressionType | Algoritmo de compresión utilizado para comprimir el empaquetado de los ficheros de tar. Disponibles: gzip, bzip2 y xz | Por defecto se utiliza gzip |
PathDir | Uso de ruta relativa o ruta absoluta al crear el backup * | Por defecto se utiliza la ruta relativa |
LogFile | Ruta completa del fichero donde se hará el registro de eventos. El fichero debe estar creado y el usuario que lanza el script debe tener permisos de escritura. Si está vacío no hay registro de eventos. | /path_directorio_docker/vaultwarden/vwbackup.log/". Por defecto LogFile="" |
MaxNumBackup | Rotación de backups. Mantiene un número determinado de ficheros en la carpeta de backups. El valor 0 se utilizará para no realizar rotación. | Por defecto será 0 |
Ruta absoluta: ruta completa de un archivo o directorio desde el directorio raíz. Ruta relativa: ruta de un archivo o directorio en relación con el directorio definido. Depende del directorio desde el cual se está ejecutando el comando.
De igual manera y dado que para la ejecución correcta del script son necesarias ciertas aplicaciones/comandos accesibles en el sistema, estos se evalúan siempre al comienzo, dando un aviso y parando el script antes de continuar. Por su uso existen dos tipos. Las obligatorias o requeridas y las opcionales.
Aplicaciones requeridas
: Es muy probable que ya estén instaladas en el sistema, pero nunca está de más revisarlo. Instálelas si faltasen. Dependiendo de la distribución Linux usada se hará de una u otra manera. Se indica como se llama el paquete a instalar
Aplicación | Acción | Paquete | Enlace |
---|---|---|---|
docker | crear y gestionar contenedores y la virtualización | docker, docker-ce, docker.io | https://www.docker.com/ |
tar | empaquetado de archivos y directorios | tar | https://www.gnu.org/software/tar/ |
du | uso de disco | coreutils | https://www.gnu.org/software/coreutils/manual/coreutils.html#du-invocation |
Aplicaciones opcionales No son obligatorias, pero si necesarias para el funcionamiento del script. Ya que son las utilidades de compresión que se van a utilizar para comprimir el fichero tar deberán estar instaladas según desee configurar el script. En la mayoría de las distribuciones están instaladas. Si necesita instalar alguna el paquete necesario está indicado.
Aplicaciones opcionales | Acción | Paquete | Enlace |
---|---|---|---|
gzip | Compresión de ficheros .gz | gzip | https://www.gnu.org/software/gzip/ |
bzip2 | Compresión de ficheros .bz2 | bzip2 | https://sourceforge.net/projects/bzip2/ |
xz | Compresión de ficheros .xz | xz-utils | https://tukaani.org/xz/ |
Un ejemplo de parada del script con errores, que ya te comento que es muy raro que ocurra y que las aplicaciones/comandos utilizados no estén accesibles o instalados:
vwbackup | 1.1
ERRORES DE DEPENDENCIA
✘ Aplicaciones REQUERIDAS: du (Instálelas según su OS)
✘ Aplicaciones OPCIONALES: gzip (Revise e instale si son necesarias para su configuración)
La ejecución del script no seguirá hasta haber resuelto los errores de dependencia de las aplicaciones REQUERIDAS.
> > > > > > > FIX IT & ENJOY !!
Para usar el modo depuración sólo hay que añadir el parámetro -d o --debug en la ejecución del script,
./vwbackup.sh --debug
Se evaluará la idoneidad de los parámetros, pero no se realizará el backup.
Ejemplos
Verificación sin errores
pi@rpi4:~/scripts/backup $./vwbackup.sh --debug
vwbackup | 0.99
✔ Contenedor: vaultwarden
✔ Directorio de datos: "/home/pi/docker/vaultwarden/data/"
✔ Directorio de backup: "/home/pi/backup/"
✔ Tipo de compresión: "gzip"
✔ Tipo de ruta de empaquetado: "relativa"
✔ Rotación de backups: Si. Núm. de Ficheros: 3
✔ Registro de eventos: Si
✔ Fichero de registro: "/home/pi/docker/vaultwarden/vwbackup.log"
Parece que la configuración no tiene ningún error aparente :) BACKING UP!!
Verificación con varios errores:
pi@rpi4:~/scripts/backup $./vwbackup.sh -d
vwbackup | 0.99
✘ Contenedor: "vaultwwwarden" no creado
✘ Directorio de datos: "/home/pi/docker/vaultwarden/datos/" no existe
✔ Directorio de backup: "/home/pi/backup/" | ✘ Sin permisos de escritura
✔ Tipo de compresión: "gzip"
✘ Tipo de ruta de empaquetado: "relativa3" no definida. Tipos válidos: relativa absoluta
✔ Rotación de backups: No
✔ Registro de eventos: No
La configuración inicial contiene errores (4)
Una vez revisados los parámetros proporcionados se realiza la copia de seguridad. Los pasos para realizarlo son los siguientes:
Uno de los parámetros del script proporciona la posibilidad de registrar los eventos de ejecución del mismo. De ello se encarga el parámetro LogFile. Es la ruta completa del fichero donde se hará el registro de eventos. El fichero debe estar creado y el usuario que lanza el script debe tener permisos de escritura. Por defecto o si no quieres este parámetro está vacío, es decir LogFile=""
Un ejemplo de registro sin errores:
2024-10-05 14:57:39 vwbackup | Contenedor vaultwarden parado
2024-10-05 14:57:41 vwbackup | Backup realizado correctamente en /home/pi/backup/vaultwarden_20241005145739.tar.bz2
2024-10-05 14:57:41 vwbackup | Tamaño del respaldo: 928K
2024-10-05 14:57:41 vwbackup | Rotación de backup: 1 fichero/s borrado/s
2024-10-05 14:57:41 vwbackup | Tamaño de /home/pi/backup/: 6,4M - 7 archivos (Rotación: 7)
2024-10-05 14:57:43 vwbackup | Arrancando contenedor vaultwarden
Forma parte del mantenimiento de tu sistema. Puedes automatizar la ejecución diaria del mismo (cron) y mantener, por ejemplo, las últimas 7 copias y de la misma forma incluir tu copia de seguridad de vaultwarden en tu sistema de respaldos. Ya sabes la regla 3 ... 2 ... 1 :bomb::collision: ( G B D )
tar -xvf archivo.tar.gz -C /ruta/data
archivo.tar.gz
es el nombre del archivo del backup, y/ruta/data
es la carpeta destino donde se va a depositar el contenido
tar -xvf vaultwarden_20240929201852.tar.gz -C ../test/
Si deseas visualizar el contenido de un respaldo, sin tener que extraer el contenido, puedes hacerlo de la sigueinte manera:
tar -tf vaultwarden_20240929201852.tar.gz
Si prefieres charlar, normalmente estamos en Telegram en el grupo Vaultwarden ES. ¡Únete a nosotros!
Una pregunta, sugerencias o nuevas funciones o para obtener ayuda [Discusiones de GitHub].
Si detectas algún error o fallo en VWBackup, abre una incidencia (Issues).