129 lines
3.5 KiB
Markdown
129 lines
3.5 KiB
Markdown
**Docker Compose**
|
|
|
|
```
|
|
services:
|
|
vaultwarden:
|
|
image: vaultwarden/server:latest
|
|
container_name: vaultwarden
|
|
restart: unless-stopped
|
|
environment:
|
|
DOMAIN: "https://vw.domain.tld"
|
|
volumes:
|
|
- ./vw-data/:/data/
|
|
ports:
|
|
- 127.0.0.1:8000:80
|
|
```
|
|
|
|
**Docker CLI**
|
|
|
|
```
|
|
docker pull vaultwarden/server:latest
|
|
docker run --detach --name vaultwarden \
|
|
--env DOMAIN="https://vw.domain.tld" \
|
|
--volume /vw-data/:/data/ \
|
|
--restart unless-stopped \
|
|
--publish 127.0.0.1:8000:80 \
|
|
vaultwarden/server:latest
|
|
```
|
|
|
|
🔹 **backup**
|
|
cd /opt/vaultwarden
|
|
tar -czvf vaultwarden-backup-$(date +%F).tar.gz vw-data
|
|
|
|
Or if you are using docker:
|
|
docker exec -it vaultwarden /vaultwarden backup
|
|
|
|
🔹 **Restore**
|
|
sudo docker-compose down
|
|
rm -rf vw-data
|
|
tar -xzvf vaultwarden-backup-2025-09-15.tar.gz
|
|
sudo docker-compose up -d
|
|
|
|
**🔹 Backup automático con cron**
|
|
crontab -e
|
|
0 3 * * * tar -czf /opt/vaultwarden/backups/vaultwarden-$(date +%F).tar.gz -C /opt/vaultwarden vw-data
|
|
|
|
**🔹 backup.sh**
|
|
#!/bin/bash
|
|
### Backup de Vaultwarden
|
|
#### Carpeta de datos
|
|
DATA_DIR="/opt/vaultwarden/vw-data"
|
|
#### Carpeta de backups
|
|
BACKUP_DIR="/opt/vaultwarden/backups"
|
|
#### Crear carpeta de backups si no existe
|
|
mkdir -p "$BACKUP_DIR"
|
|
#### Nombre del archivo con fecha
|
|
BACKUP_FILE="$BACKUP_DIR/vaultwarden-$(date +%F-%H%M).tar.gz"
|
|
echo "📦 Creando backup en $BACKUP_FILE ..."
|
|
tar -czvf "$BACKUP_FILE" -C /opt/vaultwarden vw-data
|
|
echo "✅ Backup completado."
|
|
|
|
**🔹 restore.sh**
|
|
#!/bin/bash
|
|
### Restaurar backup de Vaultwarden
|
|
DATA_DIR="/opt/vaultwarden/vw-data"
|
|
BACKUP_DIR="/opt/vaultwarden/backups"
|
|
if [ -z "$1" ]; then
|
|
echo "Uso: $0 archivo_backup.tar.gz"
|
|
exit 1
|
|
fi
|
|
BACKUP_FILE="$1"
|
|
if [ ! -f "$BACKUP_FILE" ]; then
|
|
echo "❌ El archivo $BACKUP_FILE no existe."
|
|
exit 1
|
|
fi
|
|
echo "🛑 Deteniendo contenedor..."
|
|
cd /opt/vaultwarden
|
|
sudo docker-compose down
|
|
echo "🗑️ Eliminando datos actuales..."
|
|
rm -rf "$DATA_DIR"
|
|
echo "📂 Restaurando desde $BACKUP_FILE ..."
|
|
tar -xzvf "$BACKUP_FILE" -C /opt/vaultwarden
|
|
echo "🚀 Iniciando contenedor..."
|
|
sudo docker-compose up -d
|
|
echo "✅ Restauración completada."
|
|
|
|
---
|
|
|
|
**ejecutar backup sh**
|
|
chmod +x /opt/vaultwarden/backup.sh /opt/vaultwarden/restore.sh
|
|
|
|
/opt/vaultwarden/backup.sh
|
|
/opt/vaultwarden/restore.sh /opt/vaultwarden/backups/vaultwarden-2025-09-15-1530.tar.gz
|
|
|
|
---
|
|
|
|
**Añadir menu administrador:**
|
|
openssl rand -base64 48 - generar token mac/linux o (git bash windows)
|
|
|
|
[Convert]::ToBase64String((1..48 | ForEach-Object {Get-Random -Maximum 256})) - generar token windows
|
|
|
|
environment:
|
|
- ADMIN_TOKEN=pon_aqui_un_token_seguro
|
|
|
|
<http://IP-DE-TU-SERVIDOR:8080/admin>
|
|
|
|
|
|
### Docker-Based Automated Backups (Example)
|
|
If you're using Vaultwarden via Docker and want to automate your backups to a remote machine, the following method might help. It stops the container to ensure consistency, zips the data directory, transfers it via scp, and then restarts Vaultwarden.
|
|
|
|
**Backup Script Example:**
|
|
|
|
#!/bin/bash
|
|
docker-compose down
|
|
datestamp=$(date +%m-%d-%Y)
|
|
backup_dir="/home/<user>/vw-backups"
|
|
zip -9 -r "${backup_dir}/${datestamp}.zip" /opt/vw-data*
|
|
scp -i ~/.ssh/id_rsa "${backup_dir}/${datestamp}.zip" user@<REMOTE_IP>:~/vw-backups/
|
|
docker-compose up -d
|
|
|
|
You can automate this via cron:
|
|
0 0 * * * /root/transfer_vaultwarden_logs.sh
|
|
|
|
Cleanup Script (optional) to keep only the most recent backup:
|
|
#!/bin/bash
|
|
cd ~/backups || exit
|
|
find . -type f -name '*.zip' ! -mtime -1 -exec rm {} +
|
|
Always test restores. To restore, unzip the archive back into /opt/vw-data, replacing the previous data directory.
|
|
|