--- title: "Cómo usar DigitalOcean Spaces con rclone en Ubuntu 24.04" description: "Conecta tu servidor Ubuntu 24.04 a DigitalOcean Spaces con rclone, sube y sincroniza archivos, publícalos por CDN y automatiza copias con un timer de systemd." category: "Integración Cloud" language: es source: https://cubepath.com/es/docs/integración-cloud/integracion-de-digitalocean-spaces-para-almacenamiento updated: 2026-09-25 --- # Cómo usar DigitalOcean Spaces con rclone en Ubuntu 24.04 DigitalOcean Spaces es un servicio de almacenamiento de objetos compatible con la API de Amazon S3, así que funciona con cualquier herramienta que hable S3. En este tutorial conectarás un servidor Ubuntu 24.04 a un Space usando rclone, aprenderás las operaciones básicas de subida y sincronización, publicarás archivos a través del CDN integrado y dejarás programada una copia de seguridad diaria con un timer de systemd. ## Requisitos previos - Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, con un usuario no root con privilegios `sudo`. - Una cuenta de DigitalOcean con Spaces activado. - Un nombre para tu Space. Los nombres son únicos en todo DigitalOcean, así que en esta guía se usa `mi-space-backups` como ejemplo: sustitúyelo por el tuyo. - La región del Space. Los ejemplos usan `fra1` (Frankfurt); si eliges otra, cambia el endpoint en consecuencia (`ams3.digitaloceanspaces.com`, `nyc3.digitaloceanspaces.com`, etc.). ## Paso 1: Crear una clave de acceso de Spaces rclone se autentica contra Spaces con un par de claves de estilo S3 (access key y secret key), que son distintas de los tokens de la API de DigitalOcean. 1. En el panel de DigitalOcean, abre **Spaces Object Storage** y ve a la pestaña **Access Keys**. 2. Pulsa **Create Access Key**. Si el panel te lo ofrece, limita el alcance de la clave al Space que vas a usar con permisos de lectura y escritura, en lugar de dar acceso completo a todos los buckets. 3. Copia la **Access Key** y la **Secret Key**. La secret key solo se muestra una vez. Guarda ambas en un gestor de contraseñas. En los pasos siguientes aparecen como `your_access_key` y `your_secret_key`. ## Paso 2: Instalar rclone Ubuntu 24.04 incluye rclone en sus repositorios, pero es una versión antigua. El proyecto publica un paquete `.deb` oficial con la versión actual, que es la opción recomendada: ```bash cd /tmp curl -fsSLO https://downloads.rclone.org/rclone-current-linux-amd64.deb sudo apt install ./rclone-current-linux-amd64.deb ``` Si tu servidor es ARM64, descarga `rclone-current-linux-arm64.deb` en su lugar. Comprueba la instalación: ```bash rclone version ``` ```output rclone v1.71.1 - os/version: ubuntu 24.04 (64 bit) - os/kernel: 6.8.0-84-generic (x86_64) - os/type: linux - os/arch: amd64 ... ``` El número de versión exacto será el más reciente disponible cuando instales el paquete. ## Paso 3: Configurar el remoto de Spaces Como las copias de seguridad del paso 6 se ejecutarán como root, configura rclone para root. Con `sudo`, Ubuntu usa `/root` como directorio personal, así que rclone leerá `/root/.config/rclone/rclone.conf`. Crea el directorio y el archivo de configuración: ```bash sudo install -d -m 700 /root/.config/rclone sudo nano /root/.config/rclone/rclone.conf ``` Añade el siguiente bloque, sustituyendo las claves y la región: ```ini [do-spaces] type = s3 provider = DigitalOcean access_key_id = your_access_key secret_access_key = your_secret_key endpoint = fra1.digitaloceanspaces.com acl = private ``` `provider = DigitalOcean` activa los ajustes específicos de Spaces en rclone y `acl = private` hace que todo lo que subas sea privado por defecto. Protege el archivo, ya que contiene la secret key en texto plano: ```bash sudo chmod 600 /root/.config/rclone/rclone.conf ``` Comprueba que rclone puede autenticarse listando los Spaces de la región: ```bash sudo rclone lsd do-spaces: ``` Si todavía no tienes ningún Space, el comando no devuelve nada y termina sin error. Un error `SignatureDoesNotMatch` o `InvalidAccessKeyId` indica que las claves están mal copiadas. ## Paso 4: Crear el Space y trabajar con archivos Puedes crear el Space desde el panel (**Create > Spaces Object Storage**) o directamente con rclone, ya que Spaces acepta la creación de buckets por la API S3: ```bash sudo rclone mkdir do-spaces:mi-space-backups sudo rclone lsd do-spaces: ``` ```output -1 2026-09-25 10:12:03 -1 mi-space-backups ``` Sube un archivo de prueba y lista el contenido del Space: ```bash sudo rclone copy /etc/hostname do-spaces:mi-space-backups/pruebas/ sudo rclone ls do-spaces:mi-space-backups ``` ```output 12 pruebas/hostname ``` Estas son las operaciones que usarás más a menudo: | Comando | Qué hace | |---|---| | `rclone copy origen destino` | Copia archivos nuevos o modificados, nunca borra en el destino. | | `rclone sync origen destino` | Hace que el destino sea idéntico al origen, **borrando** en el destino lo que ya no existe en el origen. | | `rclone check origen destino` | Compara tamaños y hashes sin transferir nada. | | `rclone size remoto:ruta` | Muestra el número de objetos y el tamaño total. | Antes de lanzar un `sync` sobre datos importantes, pruébalo con `--dry-run` para ver qué se copiaría y qué se borraría: ```bash sudo rclone sync /var/www do-spaces:mi-space-backups/web --dry-run ``` Para directorios grandes, `--transfers` aumenta el número de subidas en paralelo (el valor por defecto es 4) y `--progress` muestra el avance en directo: ```bash sudo rclone sync /var/www do-spaces:mi-space-backups/web --transfers 16 --progress ``` ## Paso 5: Publicar archivos a través del CDN Por defecto los objetos son privados. Para servir archivos estáticos (imágenes, descargas, recursos de una web) sube solo esos archivos como públicos a un prefijo separado, sin cambiar el resto del Space: ```bash sudo rclone copy ./logo.png do-spaces:mi-space-backups/public/ --s3-acl public-read ``` Comprueba que el objeto responde desde el endpoint de origen: ```bash curl -I https://mi-space-backups.fra1.digitaloceanspaces.com/public/logo.png ``` ```output HTTP/2 200 content-type: image/png ... ``` Para distribuir el contenido desde el CDN de DigitalOcean, abre el Space en el panel, entra en **Settings** y activa el CDN. A partir de ese momento el mismo archivo está disponible en la URL del CDN, que añade `.cdn` al nombre del host: ```text https://mi-space-backups.fra1.cdn.digitaloceanspaces.com/public/logo.png ``` Desde la misma sección puedes asociar un subdominio propio (por ejemplo `cdn.your_domain`) con su certificado; el panel te indica el registro CNAME que debes crear en tu DNS. > Advertencia: no marques como públicos los prefijos que contienen copias de seguridad. Cualquier objeto con `public-read` puede descargarlo quien conozca su URL. ## Paso 6: Automatizar las copias de seguridad Ahora programarás una copia diaria de `/etc` y `/var/www` con retención de 30 días. El script empaqueta cada directorio con la fecha en el nombre, lo sube al Space y borra los archivos remotos con más de 30 días. Crea el script: ```bash sudo nano /usr/local/bin/backup-spaces.sh ``` ```bash #!/usr/bin/env bash set -euo pipefail REMOTE="do-spaces:mi-space-backups/servidores/$(hostname -s)" FECHA="$(date +%F)" TMPDIR="$(mktemp -d)" trap 'rm -rf "$TMPDIR"' EXIT for dir in /etc /var/www; do [ -d "$dir" ] || continue nombre="$(basename "$dir")" tar -czf "$TMPDIR/${nombre}-${FECHA}.tar.gz" -C / "${dir#/}" done rclone copy "$TMPDIR" "$REMOTE" --log-level INFO rclone delete "$REMOTE" --min-age 30d --log-level INFO ``` `set -euo pipefail` detiene el script ante cualquier error, y el `trap` borra los archivos temporales pase lo que pase. Si tienes una base de datos, añade su volcado (por ejemplo con `mysqldump` o `pg_dump`) al directorio temporal antes de la subida. Haz el script ejecutable y pruébalo a mano: ```bash sudo chmod 750 /usr/local/bin/backup-spaces.sh sudo /usr/local/bin/backup-spaces.sh sudo rclone ls do-spaces:mi-space-backups/servidores ``` ```output 1843210 mi-servidor/etc-2026-09-25.tar.gz 20417736 mi-servidor/www-2026-09-25.tar.gz ``` Crea un servicio de systemd que ejecute el script: ```bash sudo nano /etc/systemd/system/backup-spaces.service ``` ```ini [Unit] Description=Copia de seguridad a DigitalOcean Spaces Wants=network-online.target After=network-online.target [Service] Type=oneshot Environment=HOME=/root ExecStart=/usr/local/bin/backup-spaces.sh ``` Y un timer que lo lance cada día a las 03:00: ```bash sudo nano /etc/systemd/system/backup-spaces.timer ``` ```ini [Unit] Description=Copia diaria a DigitalOcean Spaces [Timer] OnCalendar=*-*-* 03:00:00 RandomizedDelaySec=15m Persistent=true [Install] WantedBy=timers.target ``` `Persistent=true` hace que, si el servidor estaba apagado a esa hora, la copia se ejecute al arrancar. Activa el timer y comprueba la próxima ejecución: ```bash sudo systemctl daemon-reload sudo systemctl enable --now backup-spaces.timer systemctl list-timers backup-spaces.timer ``` ```output NEXT LEFT LAST PASSED UNIT ACTIVATES Fri 2026-09-26 03:07:41 UTC 16h left - - backup-spaces.timer backup-spaces.service ``` Puedes forzar una ejecución y revisar el resultado en el journal: ```bash sudo systemctl start backup-spaces.service sudo journalctl -u backup-spaces.service -n 20 --no-pager ``` ## Paso 7: Restaurar desde Spaces Una copia que nunca se ha restaurado no es una copia fiable. Descarga un archivo a un directorio temporal y comprueba que se puede leer: ```bash sudo rclone copy do-spaces:mi-space-backups/servidores/$(hostname -s)/etc-$(date +%F).tar.gz /tmp/restauracion/ sudo tar -tzf /tmp/restauracion/etc-$(date +%F).tar.gz | head ``` ```output etc/ etc/hostname etc/hosts ... ``` Para recuperar un archivo concreto, extráelo con `tar -xzf` en `/tmp/restauracion` y cópialo después a su ubicación original. ## Solución de problemas **`SignatureDoesNotMatch` o `InvalidAccessKeyId`.** La access key o la secret key no son correctas, o has pegado un espacio al final. También ocurre si usas un token de la API de DigitalOcean en lugar de una clave de Spaces. **`AccessDenied` al subir o listar.** La clave tiene un alcance limitado que no incluye ese Space, o solo tiene permiso de lectura. Revisa la clave en **Access Keys**. **`BucketAlreadyExists` al crear el Space.** El nombre ya lo usa otra cuenta. Elige otro nombre más específico. **El timer no ejecuta la copia.** Revisa `journalctl -u backup-spaces.service`. Si el error es que no encuentra el remoto `do-spaces`, comprueba que el archivo está en `/root/.config/rclone/rclone.conf` y que el servicio define `HOME=/root`. ## Conclusión Tu servidor ya puede leer y escribir en DigitalOcean Spaces con rclone, publicar archivos por CDN y guardar una copia diaria con retención de 30 días. Como siguientes pasos, puedes usar `rclone crypt` para cifrar los datos antes de subirlos, sustituir los archivos tar por restic para tener copias incrementales y deduplicadas, o replicar el Space en otro proveedor S3 con `rclone sync` entre dos remotos.