[{"data":1,"prerenderedAt":180},["ShallowReactive",2],{"seo-verification":3,"blog-estrategia-3-2-1-backup-vps-restic-s3-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-estrategia-3-2-1-backup-vps-restic-s3-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":30,"intro":33,"sections":34,"ctaTitle":123,"ctaBody":124,"ctaButton":125,"ctaUrl":126,"relatedPosts":127},347,"estrategia-3-2-1-backup-vps-restic-s3",{"fr":12,"en":13,"ar":14,"es":10},"backup-vps-restic-s3-3-2-1","restic-s3-3-2-1-backup-strategy-vps","restic-s3-3-2-1-backup-strategy-vps-ar","Estrategia 3-2-1 para tu VPS con Restic y S3","Construye una estrategia 3-2-1 completa en tu VPS: Restic hacia Backblaze B2 o Cloudflare R2, timer systemd, política de retención y prueba de restauración automatizada.",11,0,false,"2026-09-10T00:00:00+00:00","2026-09-10T13:10:45+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},8,"Seguridad y monitorización","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fbackup-vps-restic-s3-3-2-1-poster.svg","Activar los snapshots de tu proveedor de alojamiento no es una estrategia 3-2-1: es una sola copia, en un solo soporte, en un solo proveedor. Si la VM desaparece, tu cuenta se ve comprometida o el centro de datos sufre un incidente, tus datos desaparecen con ellos. La regla 3-2-1 aborda este riesgo: tres copias, en dos soportes distintos, una de ellas fuera del proveedor y cifrada antes de salir del servidor. Esta guía cubre la implementación completa con Restic, un timer systemd, una política de retención calibrada y una prueba de restauración automatizada que falla cuando la copia de seguridad está corrupta.",[35,39,50,53,85,113,117,120],{"type":36,"title":37,"body":38},"h2","Por qué los snapshots del proveedor no son suficientes: tres límites concretos","Un snapshot de alojamiento es práctico, pero comparte el mismo plano de fallo que tu VM. Primer límite: si la VM se elimina — por error, por parte del proveedor, o tras un impago — los snapshots asociados desaparecen con ella. Segundo límite: si un atacante compromete tu cuenta de alojamiento, puede eliminar snapshots y VM en segundos a través de la API o el panel de control. Tercer límite: los snapshots del centro de datos nunca prueban la restauración. Un snapshot «coherente» puede contener un sistema de archivos corrupto o una base de datos en estado inconsistente; solo lo descubrirás cuando lo necesites.",{"type":40,"title":41,"items":42},"ul","Lo que garantiza una estrategia 3-2-1 y lo que no garantiza un snapshot",[43,44,45,46,47,48,49],"**Tres copias**: la original en disco local, una en snapshots del proveedor, una fuera del proveedor en S3 — ningún punto de fallo único puede borrar todo.","**Dos soportes distintos**: el disco NVMe de tu VPS y el almacenamiento de objetos de otro proveedor están separados física y lógicamente.","**Cifrado antes de la transferencia**: Restic cifra del lado del cliente con AES-256; el proveedor de almacenamiento S3 solo ve blobs opacos, ilegibles sin tu clave.","**Prueba de restauración**: una copia de seguridad no probada es una promesa, no una garantía. Un timer systemd puede verificar automáticamente que un archivo centinela sea restaurable.","**Independencia del proveedor**: tu bucket B2 o R2 no puede eliminarse desde el panel de control de tu proveedor VPS.","Un snapshot de alojamiento no cifra antes de la transferencia: los datos son legibles por el proveedor.","Un snapshot de alojamiento nunca verifica la coherencia a nivel de aplicación de tus bases de datos.",{"type":36,"title":51,"body":52},"Las tres copias explicadas: local, proveedor, fuera del sitio","La regla 3-2-1 no es una receta rígida — es un principio de diversificación de riesgos.\n\n**Copia 1 — disco local de tu VPS.** Esta es tu primera línea: el original, en NVMe. Sirve para restauraciones rápidas de un archivo eliminado accidentalmente sin latencia de red.\n\n**Copia 2 — snapshots del proveedor.** La copia de seguridad automática gestionada por tu proveedor VPS cubre accidentes de configuración y eliminaciones accidentales a nivel de sistema. Es tu red de seguridad en el sitio.\n\n**Copia 3 — almacenamiento de objetos fuera del sitio, cifrado con Restic.** Este es el eslabón que la mayoría de los equipos olvida, y el único que sobrevive a la pérdida completa de la cuenta de alojamiento. Restic cifra los datos antes de cualquier transferencia, los deduplica para minimizar costes y los envía a un bucket compatible con S3 en un proveedor externo. Esta tercera copia es lo que construye esta guía.",{"type":54,"title":55,"headers":56,"rows":60},"comparison","Backblaze B2 vs Cloudflare R2: elegir tu backend S3",[57,58,59],"Criterio","Backblaze B2","Cloudflare R2",[61,65,69,73,77,81],[62,63,64],"Almacenamiento","Tarifa pública por GB","Gratis hasta 10 GB\u002Fmes, luego tarifa pública por GB",[66,67,68],"Egress (tráfico saliente)","Gratis hacia Cloudflare y socios CDN seleccionados; facturado fuera de socios","Gratis sin límite — sin coste de salida",[70,71,72],"Compatibilidad S3","API compatible con S3 nativa; endpoint `s3.us-west-004.backblazeb2.com`","API compatible con S3 nativa; endpoint `\u003Caccount>.r2.cloudflarestorage.com`",[74,75,76],"Variable `RESTIC_REPOSITORY`","`s3:https:\u002F\u002Fs3.us-west-004.backblazeb2.com\u002Fnombre-bucket`","`s3:https:\u002F\u002F\u003Caccount>.r2.cloudflarestorage.com\u002Fnombre-bucket`",[78,79,80],"Claves de acceso","B2 Application Key (Key ID + Application Key)","R2 API Token con permisos Object Read & Write",[82,83,84],"Caso de uso recomendado","Alto volumen con egress limitado o desde infraestructura Cloudflare","Egress frecuente o pruebas de restauración regulares desde cualquier lugar",{"type":86,"title":87,"steps":88},"steps","Implementación completa: Restic + S3 en tu VPS",[89,92,95,98,101,104,107,110],{"title":90,"body":91},"Exportar variables de entorno a un archivo seguro","Crea `\u002Froot\u002F.restic-env` con las variables necesarias. Para Backblaze B2:\n\n```bash\nexport RESTIC_REPOSITORY=\"s3:https:\u002F\u002Fs3.us-west-004.backblazeb2.com\u002Ftu-bucket\"\nexport RESTIC_PASSWORD=\"tu-contraseña-de-repositorio\"\nexport AWS_ACCESS_KEY_ID=\"tu-b2-key-id\"\nexport AWS_SECRET_ACCESS_KEY=\"tu-b2-application-key\"\n```\n\nPara Cloudflare R2, reemplaza la URL del repositorio y las claves:\n\n```bash\nexport RESTIC_REPOSITORY=\"s3:https:\u002F\u002F\u003Caccount-id>.r2.cloudflarestorage.com\u002Ftu-bucket\"\nexport RESTIC_PASSWORD=\"tu-contraseña-de-repositorio\"\nexport AWS_ACCESS_KEY_ID=\"tu-r2-access-key-id\"\nexport AWS_SECRET_ACCESS_KEY=\"tu-r2-secret-access-key\"\n```\n\nRestringe inmediatamente los permisos: `chmod 600 \u002Froot\u002F.restic-env`. Este archivo nunca debe ser commiteado en un repositorio Git.",{"title":93,"body":94},"Inicializar el repositorio Restic en S3","Carga el entorno, luego inicializa el repositorio cifrado en tu bucket:\n\n```bash\nsource \u002Froot\u002F.restic-env\nrestic init\n```\n\nRestic crea la estructura del repositorio y sella el cifrado con tu contraseña. **Guarda la contraseña del repositorio fuera del VPS**: en un gestor de contraseñas o una bóveda cifrada en una máquina separada. Sin ella, ninguna restauración es posible, incluso si tienes acceso completo al bucket.",{"title":96,"body":97},"Ejecutar una primera copia de seguridad hacia S3","Prueba el camino completo con una copia manual:\n\n```bash\nsource \u002Froot\u002F.restic-env\nrestic backup \u002Fetc \u002Fvar\u002Fwww \u002Fopt\u002Fdocker-data\n```\n\nPara bases de datos, genera un dump primero o usa el modo stdin. Ejemplo para PostgreSQL:\n\n```bash\npg_dump -U postgres mibd | restic backup --stdin --stdin-filename mibd.sql\n```\n\nVerifica que el snapshot fue creado: `restic snapshots`.",{"title":99,"body":100},"Definir la política de retención","El comando `forget` elimina referencias a snapshots antiguos; `--prune` libera físicamente los bloques huérfanos en el backend:\n\n```bash\nrestic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 3 --prune\n```\n\n**Justificación de los valores.** Siete diarios cubren una semana completa — suficiente para detectar una corrupción silenciosa que solo aparece días después del incidente. Cuatro semanales ofrecen una ventana de un mes para detectar un problema a nivel de aplicación. Tres mensuales permiten restaurar a un estado anterior al trimestre actual. `--prune` es esencial: sin él, `forget` marca snapshots para eliminación pero no libera espacio en el bucket.",{"title":102,"body":103},"Distinguir restic check de restic check --read-data","Estos dos comandos no verifican lo mismo.\n\n`restic check` valida los **metadatos del repositorio** — estructura de packs, coherencia de índices, integridad de punteros. Rápido (segundos a minutos según el tamaño del repositorio). Ejecútalo después de cada `forget --prune`.\n\n```bash\nrestic check\n```\n\n`restic check --read-data` descarga y verifica **cada blob de datos** comparándolos con su hash criptográfico. Lento (proporcional al volumen del repositorio) y potencialmente costoso en egress. Resérvalo para una verificación mensual o tras dudas sobre la integridad del bucket.\n\n```bash\nrestic check --read-data\n```",{"title":105,"body":106},"Crear la unidad systemd de copia de seguridad (.service)","Crea `\u002Fetc\u002Fsystemd\u002Fsystem\u002Frestic-backup.service`:\n\n```bash\n[Unit]\nDescription=Restic backup a S3\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=oneshot\nEnvironmentFile=\u002Froot\u002F.restic-env\nExecStartPre=\u002Fbin\u002Fsh -c 'curl -sf --max-time 10 https:\u002F\u002Fone.one.one.one > \u002Fdev\u002Fnull || exit 1'\nExecStart=\u002Fusr\u002Fbin\u002Frestic backup \u002Fetc \u002Fvar\u002Fwww \u002Fopt\u002Fdocker-data\nExecStartPost=\u002Fusr\u002Fbin\u002Frestic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 3 --prune\nExecStartPost=\u002Fusr\u002Fbin\u002Frestic check\nStandardOutput=journal\nStandardError=journal\n```\n\n`ExecStartPre` verifica la conectividad de red antes de intentar la copia — si el VPS está aislado o el bucket es inaccesible, el servicio falla de forma limpia.",{"title":108,"body":109},"Crear la unidad systemd de planificación (.timer)","Crea `\u002Fetc\u002Fsystemd\u002Fsystem\u002Frestic-backup.timer`:\n\n```bash\n[Unit]\nDescription=Timer diario para restic-backup.service\n\n[Timer]\nOnCalendar=*-*-* 03:00:00\nPersistent=true\nRandomizedDelaySec=900\n\n[Install]\nWantedBy=timers.target\n```\n\n`Persistent=true` garantiza que si el VPS está apagado a las 03:00, la copia se ejecutará en el siguiente arranque. Activa y arranca:\n\n```bash\nsystemctl daemon-reload\nsystemctl enable --now restic-backup.timer\n```\n\nVerifica el estado del timer: `systemctl status restic-backup.timer` y los logs del último run: `journalctl -u restic-backup.service`.",{"title":111,"body":112},"Crear una prueba de restauración automatizada con archivo centinela","Crea el archivo centinela e inclúyelo en tu copia de seguridad:\n\n```bash\necho \"sentinel-$(date +%s)\" > \u002Fopt\u002Frestic-sentinel.txt\n```\n\nCrea `\u002Fetc\u002Fsystemd\u002Fsystem\u002Frestic-restore-test.service`:\n\n```bash\n[Unit]\nDescription=Prueba de restauración Restic\nAfter=network-online.target\n\n[Service]\nType=oneshot\nEnvironmentFile=\u002Froot\u002F.restic-env\nExecStart=\u002Fbin\u002Fsh -c '\n  rm -rf \u002Ftmp\u002Frestic-test-restore && \\\n  restic restore latest --target \u002Ftmp\u002Frestic-test-restore && \\\n  test -f \u002Ftmp\u002Frestic-test-restore\u002Fopt\u002Frestic-sentinel.txt && \\\n  echo \"Restauración OK\" || \\\n  (echo \"FALLO restauración centinela\" && exit 1)\n'\nStandardOutput=journal\nStandardError=journal\n```\n\nCrea el timer semanal `\u002Fetc\u002Fsystemd\u002Fsystem\u002Frestic-restore-test.timer`:\n\n```bash\n[Unit]\nDescription=Prueba semanal de restauración Restic\n\n[Timer]\nOnCalendar=Sun 04:00:00\nPersistent=true\n\n[Install]\nWantedBy=timers.target\n```\n\nActiva: `systemctl enable --now restic-restore-test.timer`.",{"type":114,"title":115,"body":116},"tip","Secretos de Restic: archivo .env aislado, nunca en duro en el servicio","Nunca coloques `RESTIC_PASSWORD`, `AWS_ACCESS_KEY_ID` o `AWS_SECRET_ACCESS_KEY` directamente en una definición de unidad systemd, un script versionado o un Dockerfile. El archivo `\u002Froot\u002F.restic-env` con `chmod 600` es la práctica correcta: se carga mediante `EnvironmentFile=` sin aparecer nunca en `systemctl show` ni en los logs. Añade `\u002Froot\u002F.restic-env` a tu `.gitignore` o `.dockerignore` si tu directorio `\u002Froot` está versionado. Para entornos multiusuario, prefiere un gestor de secretos o las credenciales systemd (`LoadCredential=`) frente a un archivo plano.",{"type":36,"title":118,"body":119},"Resolución de problemas: cuatro errores comunes","**`Fatal: unable to open config file` en `restic init` o el primer `restic backup`.** Restic no puede acceder al bucket. Verifica que las variables están cargadas (`echo $RESTIC_REPOSITORY`) y que las credenciales son correctas. Verifica los permisos IAM de tu clave B2 o R2: necesita al menos derechos de lectura, escritura y listado en el bucket.\n\n**Bucket S3: permisos insuficientes.** Si `restic init` tiene éxito pero `restic backup` falla con un error de autorización, una política de bucket está anulando los permisos de la clave. En B2, verifica que no haya ninguna regla `denyUpload` activa. En R2, verifica que el bucket no esté en modo público con restricciones de escritura.\n\n**Timer systemd que no se activa.** Diagnostica con tres comandos: `systemctl status restic-backup.timer`, `systemctl list-timers --all | grep restic`, `journalctl -u restic-backup.service --since today`. Si el timer está activo pero el servicio no ha corrido, verifica que `OnCalendar` sea sintácticamente válido: `systemd-analyze calendar '*-*-* 03:00:00'` debe devolver una fecha de próximo disparo.\n\n**`restic check --read-data` demasiado lento.** En un repositorio de decenas de GB, `--read-data` puede tardar horas y generar costes significativos de egress en B2. Usa `--read-data-subset=10%` para verificar una muestra aleatoria en cada ejecución semanal, y reserva la verificación completa para un mantenimiento mensual planificado.",{"type":36,"title":121,"body":122},"Plan de recuperación: ¿cuánto tiempo lleva restaurar desde B2 o R2?","El tiempo de restauración depende de tres factores: el volumen de datos, el ancho de banda disponible entre tu VPS y el bucket, y los posibles costes de egress.\n\nComo estimación: un repositorio Restic de 20 GB en B2 (datos ya deduplicados y comprimidos) se restaura en unos 15 a 30 minutos con una conexión de centro de datos estándar a 1 Gbps. En R2, el egress es gratuito — no hay presión financiera para escalonar la restauración.\n\nDos prácticas reducen el tiempo de recuperación: primero, mantener una lista de tus directorios críticos separada de los directorios de caché o logs — un repositorio más pequeño se restaura más rápido. Segundo, probar periódicamente la restauración parcial de un solo directorio (`restic restore latest --target \u002Ftmp\u002Ftest --include \u002Fetc`) para calibrar la duración real en tu infraestructura. El comando `restic stats` muestra el tamaño del repositorio para la planificación.","Un VPS diseñado para estrategias de copia de seguridad serias","Acceso root, almacenamiento local, snapshots automáticos y ancho de banda saliente incluido: un VPS ServOrbit es el punto de partida de cualquier estrategia 3-2-1.","Obtener un VPS con acceso root","\u002Fvps-cloud",[128,144,159],{"id":129,"slug":130,"slugs":131,"title":135,"excerpt":136,"readTime":137,"views":18,"isPinned":19,"publishedAt":138,"updatedAt":139,"category":140,"categories":141,"featuredImage":30,"bgImage":31,"posterImage":143,"relatedSolution":30},113,"copias-de-seguridad-vps-con-restic",{"fr":132,"en":133,"ar":134,"es":130},"sauvegardes-restic-vps","automate-your-vps-backups-with-restic","أتمتة-نسخ-خادمك-vps-الاحتياطية-باستخدام-restic","Automatizar las copias de seguridad de su VPS con Restic","Automatice las copias de seguridad de su VPS con Restic: snapshots cifrados, deduplicación y envío a S3 o a cualquier backend de objetos.",3,"2026-02-27T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[142],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fsauvegardes-restic-vps-poster.svg",{"id":145,"slug":146,"slugs":147,"title":151,"excerpt":152,"readTime":153,"views":18,"isPinned":19,"publishedAt":154,"updatedAt":139,"category":155,"categories":156,"featuredImage":30,"bgImage":31,"posterImage":158,"relatedSolution":30},114,"copias-de-seguridad-vps-con-borgbackup",{"fr":148,"en":149,"ar":150,"es":146},"backups-borgbackup-vps","encrypted-vps-backups-with-borgbackup","نسخ-خادم-vps-الاحتياطية-المشفرة-باستخدام-borgbackup","Copias de seguridad cifradas de VPS con BorgBackup","Respalde su VPS con BorgBackup: deduplicación potente, cifrado autenticado y compresión. Guía completa y comparativa con Restic.",4,"2026-02-26T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[157],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fbackups-borgbackup-vps-poster.svg",{"id":160,"slug":161,"slugs":162,"title":166,"excerpt":167,"readTime":168,"views":169,"isPinned":19,"publishedAt":170,"updatedAt":139,"category":171,"categories":177,"featuredImage":30,"bgImage":31,"posterImage":179,"relatedSolution":30},126,"copias-seguridad-servidor-jetbackup",{"fr":163,"en":164,"ar":165,"es":161},"sauvegardes-serveur-jetbackup","server-backups-jetbackup-explained","نسخ-الخوادم-الاحتياطية-شرح-jetbackup","JetBackup en cPanel\u002FWHM: instalación y restauración","Cómo instalar JetBackup en WHM, configurar destinos S3 o SFTP, programar las copias de seguridad y restaurar una cuenta, una base o un e-mail por separado.",9,1,"2026-02-18T00:00:00+00:00",{"id":172,"name":173,"slug":174,"color":175,"icon":176},7,"Autoalojamiento","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[178],{"id":172,"name":173,"slug":174,"color":175,"icon":176},"\u002Fblog\u002Fcovers\u002Fsauvegardes-serveur-jetbackup-poster.svg",1789665020834]