Backups y Restauracion
Backups y Restauracion
Dokploy incluye un sistema de backups integrado para todas las bases de datos soportadas. Los backups se pueden almacenar localmente o en cualquier proveedor compatible con S3.
Configurar destinos S3
Antes de crear backups, configura un destino de almacenamiento externo. Dokploy soporta cualquier servicio compatible con el protocolo S3.
Proveedores compatibles
| Proveedor | Endpoint |
|---|---|
| AWS S3 | https://s3.{region}.amazonaws.com |
| MinIO | https://tu-minio.dominio.com |
| Backblaze B2 | https://s3.{region}.backblazeb2.com |
| Cloudflare R2 | https://{account-id}.r2.cloudflarestorage.com |
| DigitalOcean Spaces | https://{region}.digitaloceanspaces.com |
Agregar credenciales S3
- Ve a Settings > S3 Destinations en el panel principal
- Clic en Add Destination
- Completa los campos:
| Campo | Descripcion |
|---|---|
| Name | Nombre identificativo (ejemplo: backblaze-backups) |
| Access Key | Clave de acceso del proveedor |
| Secret Key | Clave secreta |
| Bucket | Nombre del bucket (debe existir previamente) |
| Region | Region del bucket (ejemplo: us-east-1) |
| Endpoint | URL del proveedor (ver tabla anterior) |
Ejemplo: Configurar Backblaze B2
- Crear un bucket en Backblaze B2 con nombre
dokploy-backups - Generar Application Key con permisos de lectura y escritura sobre ese bucket
- En Dokploy:
Name: backblaze-prod
Access Key: 00xxxxxxxxxxxxx
Secret Key: Kxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Bucket: dokploy-backups
Region: us-west-004
Endpoint: https://s3.us-west-004.backblazeb2.com
- Clic en Save
Ejemplo: Configurar MinIO local
Si tienes MinIO corriendo en el mismo servidor o red:
Name: minio-local
Access Key: minioadmin
Secret Key: minioadmin
Bucket: db-backups
Region: us-east-1
Endpoint: http://minio:9000
Si MinIO corre como servicio de Dokploy, usa el nombre del contenedor como hostname.
Backups manuales
Crear un backup manual
- Selecciona la base de datos en el panel
- Ve a la pestana Backups
- Selecciona el destino S3 configurado
- Clic en Create Backup
Dokploy ejecuta el comando de dump correspondiente al motor:
| Motor | Comando interno |
|---|---|
| PostgreSQL | pg_dumpall |
| MySQL | mysqldump --all-databases |
| MongoDB | mongodump |
| MariaDB | mariadb-dump --all-databases |
El archivo resultante se comprime y sube al bucket S3 configurado.
Formato del archivo
Los backups se almacenan con este patron de nombre:
{nombre-servicio}/{fecha}-{hora}.sql.gz
{nombre-servicio}/{fecha}-{hora}.archive.gz (MongoDB)
Verificar el backup
Despues de crear el backup, verifica que aparece en la lista de la pestana Backups con estado Success. Tambien puedes verificar directamente en el bucket S3:
# AWS CLI
aws s3 ls s3://dokploy-backups/nombre-servicio/
# MinIO client
mc ls minio/db-backups/nombre-servicio/
Backups automaticos (scheduled)
Configurar backup periodico
- En la base de datos, pestana Backups
- Activa Enable Automatic Backups
- Selecciona el destino S3
- Configura la frecuencia con expresion cron
Expresiones cron comunes
| Frecuencia | Expresion cron |
|---|---|
| Cada hora | 0 * * * * |
| Diario a las 3 AM | 0 3 * * * |
| Cada 6 horas | 0 */6 * * * |
| Lunes a viernes a las 2 AM | 0 2 * * 1-5 |
| Domingos a las 4 AM | 0 4 * * 0 |
Estrategia recomendada
Para una base de datos en produccion:
Backup diario: 0 3 * * * (3 AM todos los dias)
Combina con la limpieza automatica para no acumular backups indefinidamente (ver seccion mas abajo).
Verificar que el cron funciona
Despues de configurar, espera a que se ejecute el primer backup automatico y verifica:
- La lista de backups en la pestana Backups muestra una nueva entrada
- El estado es Success
- El archivo existe en el bucket S3
Restaurar un backup
Desde el panel de Dokploy
- Selecciona la base de datos
- Ve a la pestana Backups
- Localiza el backup en la lista
- Clic en Restore
Dokploy descarga el archivo del bucket S3 y ejecuta el comando de restauracion correspondiente:
| Motor | Comando interno |
|---|---|
| PostgreSQL | psql (ejecuta el dump SQL) |
| MySQL | mysql (ejecuta el dump SQL) |
| MongoDB | mongorestore |
| MariaDB | mariadb (ejecuta el dump SQL) |
Consideraciones antes de restaurar
- La restauracion sobreescribe los datos actuales. Si necesitas conservar el estado actual, crea un backup manual antes de restaurar.
- La base de datos queda inaccesible durante la restauracion. Las aplicaciones conectadas recibiran errores de conexion temporales.
- Para bases de datos grandes, la restauracion puede tomar varios minutos. No interrumpas el proceso.
Restaurar en una base de datos diferente
Si necesitas restaurar un backup en una nueva instancia (por ejemplo, para testing):
- Crea una nueva base de datos del mismo motor en Dokploy
- Descarga el backup del bucket S3 manualmente:
aws s3 cp s3://dokploy-backups/nombre-servicio/2026-02-28-030000.sql.gz ./backup.sql.gz
gunzip backup.sql.gz
- Copia el archivo al contenedor y restaura:
# PostgreSQL
docker cp backup.sql nombre-contenedor-nuevo:/tmp/
docker exec -i nombre-contenedor-nuevo psql -U usuario -d nombre_db < /tmp/backup.sql
# MySQL / MariaDB
docker cp backup.sql nombre-contenedor-nuevo:/tmp/
docker exec -i nombre-contenedor-nuevo mysql -u root -p < /tmp/backup.sql
# MongoDB
docker cp backup.archive.gz nombre-contenedor-nuevo:/tmp/
docker exec nombre-contenedor-nuevo mongorestore --gzip --archive=/tmp/backup.archive.gz
Verificar integridad de backups
No confies ciegamente en que los backups funcionan. Verifica periodicamente.
Test de restauracion
La unica forma confiable de verificar un backup es restaurarlo. Crea una base de datos temporal en Dokploy, restaura el backup y verifica los datos:
# PostgreSQL: verificar que las tablas tienen datos
docker exec nombre-contenedor-test psql -U usuario -d nombre_db -c "\dt"
docker exec nombre-contenedor-test psql -U usuario -d nombre_db -c "SELECT count(*) FROM tabla_principal;"
Verificar tamano del archivo
Un backup valido tiene un tamano consistente. Si un backup diario pasa de 50MB a 1KB, algo fallo. Monitorea el tamano en el bucket:
aws s3 ls s3://dokploy-backups/nombre-servicio/ --human-readable
Script de verificacion basico
Ejecuta desde el VPS como cron job semanal:
#!/bin/bash
BUCKET="s3://dokploy-backups"
SERVICE="api-postgres"
MIN_SIZE=1048576 # 1MB en bytes
LAST_BACKUP=$(aws s3 ls "$BUCKET/$SERVICE/" | sort | tail -1)
SIZE=$(echo "$LAST_BACKUP" | awk '{print $3}')
if [ "$SIZE" -lt "$MIN_SIZE" ]; then
echo "ALERTA: Backup de $SERVICE demasiado pequeno ($SIZE bytes)"
# Aqui puedes enviar una notificacion
fi
Limpieza automatica de backups antiguos
Desde la version 0.20, Dokploy incluye limpieza automatica de backups.
Configurar retencion
En la pestana Backups de la base de datos:
- Activa Enable Cleanup
- Configura el numero de backups a retener
Backups to keep: 7
Dokploy elimina automaticamente los backups mas antiguos despues de cada backup exitoso, manteniendo solo los N mas recientes.
Politica de retencion recomendada
| Frecuencia de backup | Backups a retener | Cobertura |
|---|---|---|
| Cada hora | 24 | 1 dia |
| Diario | 7 | 1 semana |
| Diario | 30 | 1 mes |
Limpieza manual en S3
Si necesitas limpiar backups manualmente en el bucket:
# Listar backups de un servicio
aws s3 ls s3://dokploy-backups/api-postgres/
# Eliminar un backup especifico
aws s3 rm s3://dokploy-backups/api-postgres/2026-01-15-030000.sql.gz
# Eliminar backups anteriores a una fecha (usa lifecycle rules en S3 para automatizar)
Lifecycle rules en S3
Como capa adicional de proteccion, configura lifecycle rules directamente en el proveedor S3:
{
"Rules": [
{
"ID": "cleanup-old-backups",
"Status": "Enabled",
"Filter": {
"Prefix": ""
},
"Expiration": {
"Days": 90
}
}
]
}
Esta regla elimina archivos con mas de 90 dias, independientemente de la configuracion de Dokploy.
Siguiente: Capitulo 13: Dominios y SSL —>