[{"data":1,"prerenderedAt":133},["ShallowReactive",2],{"seo-verification":3,"blog-alojar-garage-s3-en-un-vps-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-alojar-garage-s3-en-un-vps-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":33,"intro":36,"sections":37,"ctaTitle":128,"ctaBody":129,"ctaButton":130,"ctaUrl":131,"relatedPosts":132},245,"alojar-garage-s3-en-un-vps",{"fr":12,"en":13,"ar":14,"es":10},"heberger-garage-s3-vps","host-garage-on-a-vps-s3-object-storage-that-belongs-to-you","استضافة-garage-على-خادم-vps-تخزين-كائنات-s3-يملكه-أنت","Alojar Garage en un VPS: storage bucket S3 propio y autoalojado","Despliega Garage en un VPS para tener un storage bucket S3 propio — copias de seguridad, archivos de app, sitio estático — sin depender de ninguna nube externa.",8,1,false,"2026-08-10T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Autoalojamiento","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-garage-s3-vps-poster.svg",{"categorySlug":34,"appSlug":35},"bases-de-datos","garage","Quieres un storage bucket S3 propio — para tus copias de seguridad con restic, los archivos de una aplicación o el origen de un sitio estático — sin abrir cuenta en un proveedor de nube. Garage, desarrollado por el colectivo Deuxfleurs, hace exactamente eso: un único binario Rust que expone una API S3, suficientemente ligero para compartir servidor con tus otros servicios. Esta guía parte de cero y llega hasta el primer archivo subido, cubre los casos de uso más habituales y los errores reales que conviene evitar.",[38,42,52,55,58,77,80,89,121,125],{"type":39,"title":40,"body":41},"h2","Qué es Garage y qué no es","Garage es un almacén de objetos compatible con S3 diseñado para despliegues autoalojados de pequeño tamaño, opcionalmente distribuidos en varios sitios. Corre en un contenedor, no necesita una base de datos adyacente, y en un despliegue de un solo nodo consume unos pocos megabytes de memoria en reposo.\n\nLo que no es, hay que decirlo desde el principio: **Garage no tiene consola web**. La administración se realiza mediante la herramienta de línea de comandos `garage` y una API de administración HTTP. No es una función omitida — es una decisión deliberada para mantener el servicio pequeño y su superficie de ataque estrecha. Proyectos de la comunidad ofrecen una interfaz en el navegador sobre la API de administración si la necesitas.\n\nSi buscas este punto porque MinIO retiró su consola de la edición comunitaria en 2025 — y después dejó de publicar sus imágenes Docker comunitarias — la respuesta honesta es que Garage no te devolverá esa consola. Sí te da un proyecto cuya licencia AGPLv3 no reserva ninguna función a una edición de pago.",{"type":43,"title":44,"items":45},"ul","Lo que Garage hace bien en un VPS",[46,47,48,49,50,51],"**API S3 estándar**: compatible con `aws` CLI, `rclone`, `mc`, `restic`, SDKs de Python\u002FGo\u002FRust y prácticamente todos los clientes S3 del mercado.","**Huella de memoria mínima**: unos pocos megabytes en reposo — convive sin fricción con un servidor web, una base de datos o un proxy inverso en el mismo VPS.","**Sin dependencias externas**: ni PostgreSQL, ni Redis, ni etcd. El motor de metadatos está embebido (LMDB o SQLite).","**Replicación opcional**: en modo de un nodo basta un disco; en modo multinodo Garage replica objetos entre máquinas, incluso en sitios distintos.","**Licencia AGPLv3 sin restricciones**: ninguna función reservada a una edición de pago, sin límite de volumen ni de número de buckets.","**Subdominios virtuales**: Garage gestiona el enrutamiento `\u003Cbucket>.s3.tu-dominio.com`, que algunos clientes S3 y SDKs requieren.",{"type":39,"title":53,"body":54},"Requisitos previos: dimensionar tu VPS para un storage bucket","Garage en sí es frugal — es el **volumen de datos** que almacenas el que determina el tamaño del disco, no el servicio. Un VPS de entrada es suficiente para ejecutar el daemon. Para cargas de trabajo habituales (copias de seguridad de aplicaciones, assets de un sitio):\n\n- **CPU**: 1 vCPU es suficiente; Garage es ligero en cómputo.\n- **RAM**: 512 MB disponibles son cómodos; el motor LMDB mantiene su índice en archivos mapeados en memoria.\n- **Disco**: SSD NVMe del tamaño de tus datos más un 20 % de margen para metadatos. Un nodo único guarda **una sola copia** de tus objetos — planifica en consecuencia.\n- **SO**: Debian 12 o Ubuntu 22.04 LTS con Docker y el plugin Compose instalados.\n\nPara instalar Docker en un solo comando:\n\n```bash\ncurl -fsSL https:\u002F\u002Fget.docker.com | sh\n```",{"type":39,"title":56,"body":57},"Configuración mínima del storage bucket","Garage lee un archivo `garage.toml`. Para un nodo único, lo esencial cabe en pocas líneas — fíjate en `replication_factor = 1`, que indica explícitamente que no hay replicación:\n\n```toml\nmetadata_dir = \"\u002Fvar\u002Flib\u002Fgarage\u002Fmeta\"\ndata_dir = \"\u002Fvar\u002Flib\u002Fgarage\u002Fdata\"\ndb_engine = \"sqlite\"\nreplication_factor = 1\n\nrpc_bind_addr = \"[::]:3901\"\nrpc_public_addr = \"127.0.0.1:3901\"\nrpc_secret = \"\u003C64 caracteres hexadecimales>\"\n\n[s3_api]\ns3_region = \"garage\"\napi_bind_addr = \"[::]:3900\"\nroot_domain = \".s3.tu-dominio.com\"\n\n[admin]\napi_bind_addr = \"[::]:3903\"\nadmin_token = \"\u003Ctoken de administración>\"\n```\n\nEl `rpc_secret` debe tener 32 bytes, es decir, 64 caracteres hexadecimales: `openssl rand -hex 32`.",{"type":59,"title":60,"steps":61},"steps","Desplegar Garage y crear tu primer bucket S3",[62,65,68,71,74],{"title":63,"body":64},"Crear la estructura de directorios","Crea un directorio de trabajo y el archivo de configuración:\n\n```bash\nmkdir -p \u002Fopt\u002Fgarage\u002Fconfig\nopenssl rand -hex 32   # → pega como rpc_secret\nopenssl rand -base64 32 | tr -d '=' | head -c 40  # → admin_token\n```\n\nEscribe `garage.toml` en `\u002Fopt\u002Fgarage\u002Fconfig\u002F` reemplazando los dos tokens generados.",{"title":66,"body":67},"Escribir el Compose y arrancar","Desde la versión 2.3, Garage puede inicializar un clúster de un nodo y crear su primer bucket automáticamente a partir de variables de entorno. Esto evita la secuencia manual `layout assign` \u002F `layout apply` \u002F `bucket create` \u002F `key create`:\n\n```yaml\nservices:\n  garage:\n    image: dxflrs\u002Fgarage:v2.3.0\n    restart: unless-stopped\n    command: [\"\u002Fgarage\", \"-c\", \"\u002Fetc\u002Fgarage\u002Fgarage.toml\", \"server\", \"--single-node\", \"--default-bucket\"]\n    environment:\n      GARAGE_DEFAULT_BUCKET: mi-bucket\n      GARAGE_DEFAULT_ACCESS_KEY: GK\u003C30 hex>\n      GARAGE_DEFAULT_SECRET_KEY: \u003C64 hex>\n    ports:\n      - \"127.0.0.1:3900:3900\"\n      - \"127.0.0.1:3903:3903\"\n    volumes:\n      - .\u002Fconfig:\u002Fetc\u002Fgarage\n      - garage-meta:\u002Fvar\u002Flib\u002Fgarage\u002Fmeta\n      - garage-data:\u002Fvar\u002Flib\u002Fgarage\u002Fdata\n\nvolumes:\n  garage-meta:\n  garage-data:\n```\n\nLa imagen es **distroless**: sin shell, entrypoint vacío. El comando debe nombrar el binario por ruta absoluta (`\u002Fgarage`) y pasar el archivo de configuración (`-c`). La clave de acceso S3 debe ser `GK` seguida de exactamente 30 caracteres hexadecimales.\n\n```bash\ndocker compose up -d\n```",{"title":69,"body":70},"Verificar que la API responde","Una llamada anónima a la API S3 debe devolver **403** — la señal correcta de que el servicio está activo y rechaza peticiones sin firmar:\n\n```bash\ncurl -s -o \u002Fdev\u002Fnull -w '%{http_code}\\n' http:\u002F\u002F127.0.0.1:3900\u002F\n# 403 → la API responde\n```\n\nLa API de administración devuelve 200 con el token:\n\n```bash\ncurl -H \"Authorization: Bearer $ADMIN_TOKEN\" http:\u002F\u002F127.0.0.1:3903\u002Fv2\u002FListBuckets\n```",{"title":72,"body":73},"Exponer la API detrás de nginx y TLS","Nunca publiques el puerto 3900 directamente en la interfaz pública. Enlázalo a localhost y deja que nginx gestione el proxy y el certificado TLS:\n\n```nginx\nserver {\n    listen 443 ssl;\n    server_name s3.tu-dominio.com *.s3.tu-dominio.com;\n    ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Fs3.tu-dominio.com\u002Ffullchain.pem;\n    ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fs3.tu-dominio.com\u002Fprivkey.pem;\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:3900;\n        proxy_set_header Host $host;\n    }\n}\n```",{"title":75,"body":76},"Probar con un cliente S3","Con las variables de entorno configuradas, la CLI `aws` funciona sin modificaciones:\n\n```bash\nexport AWS_ACCESS_KEY_ID=GK...\nexport AWS_SECRET_ACCESS_KEY=...\nexport AWS_DEFAULT_REGION=garage\n\naws --endpoint-url https:\u002F\u002Fs3.tu-dominio.com s3 ls\naws --endpoint-url https:\u002F\u002Fs3.tu-dominio.com s3 cp miarchivo.txt s3:\u002F\u002Fmi-bucket\u002F\n```\n\nPara restic, configura `RESTIC_REPOSITORY=s3:https:\u002F\u002Fs3.tu-dominio.com\u002Fmi-bucket` y ejecuta `restic init`.",{"type":39,"title":78,"body":79},"Casos de uso habituales de un storage bucket S3 autoalojado","Un storage bucket Garage en un VPS cubre varias necesidades habituales sin depender de ninguna nube externa.",{"type":43,"title":81,"items":82},"Qué se despliega detrás de Garage",[83,84,85,86,87,88],"**Copias de seguridad con restic o Borg**: configura `RESTIC_REPOSITORY=s3:https:\u002F\u002Fs3.tu-dominio.com\u002Fbackups`. La compatibilidad S3 en restic es nativa y no requiere plugins.","**Origen de sitio estático**: almacena los assets compilados del frontend y sírvelos con nginx o Cloudflare en modo proxy.","**Subida de archivos de aplicaciones**: las aplicaciones Laravel, Django o Rails escriben en Garage a través de su SDK S3 habitual — solo cambia el endpoint.","**Artefactos de CI\u002FCD**: GitHub Actions o GitLab CI suben artefactos de build a Garage con `aws s3 cp`, igual que con AWS S3.","**Archivo de logs y métricas**: Loki, Vector o Fluentd pueden escribir en un almacén de objetos compatible con S3 para archivo a largo plazo.","**Compartir archivos entre servicios**: dos contenedores en el mismo o diferente VPS acceden al mismo bucket a través de la API S3, sin montaje NFS.",{"type":90,"title":91,"headers":92,"rows":96},"comparison","Garage vs alternativas S3 autoalojadas",[93,94,95],"Criterio","Garage","MinIO (comunitario)",[97,101,105,109,113,117],[98,99,100],"Licencia","AGPLv3 — sin restricción de uso","AGPLv3, pero consola retirada de la edición libre en 2025",[102,103,104],"Imágenes Docker","Publicadas activamente en Docker Hub (`dxflrs\u002Fgarage`)","Imágenes comunitarias discontinuadas en Docker Hub en 2025",[106,107,108],"Consola web","Ausente (CLI + API de administración HTTP)","Consola eliminada de la edición comunitaria",[110,111,112],"Multi-sitio","Diseñado nativamente para zonas geográficas","Posible pero requiere un clúster dedicado",[114,115,116],"Huella de memoria","Unos pocos MB en reposo","Varias decenas de MB como mínimo",[118,119,120],"Compatibilidad S3","Buena en la superficie habitual","Muy amplia, incluyendo extensiones propias de AWS",{"type":122,"title":123,"body":124},"tip","Buckets, claves de acceso y permisos","Garage gestiona el acceso a nivel de clave: cada clave S3 puede autorizarse en uno o varios buckets, de solo lectura o lectura-escritura. Para copias de seguridad automatizadas, crea una clave dedicada con acceso únicamente al bucket de backup — no a todo el servidor.\n\nEl comando `garage key create \u003Cnombre>` genera una clave, y `garage bucket allow --key \u003Cid> --read --write \u003Cbucket>` le otorga los derechos. También puedes usar la API de administración HTTP para automatizarlo en un script.",{"type":39,"title":126,"body":127},"Lo que hay que tener presente","**Un nodo único no es redundancia.** Garage puede replicar entre varias máquinas, incluso en sitios distintos — ese es su objetivo de diseño. Pero mientras tengas un solo nodo, tus objetos existen en una única copia sobre un único disco. Mantén la disciplina de copias de seguridad que aplicarías de todos modos.\n\n**Expón la API detrás de un dominio y TLS**, no sobre una IP desnuda. Es a la vez un requisito de seguridad y una necesidad práctica: varios clientes S3 se niegan a funcionar sin TLS, y el enrutamiento por subdominio de bucket requiere un certificado wildcard.\n\n**La compatibilidad S3 cubre la superficie habitual**, no cada extensión propia de AWS. Los clientes, bibliotecas y herramientas de backup estándar funcionan sin modificación; si dependes de una llamada inusual, compruébalo en la documentación del proyecto antes de migrar.\n\n**Vigila el espacio en disco.** Un bucket de copias de seguridad que crece sin política de retención llena el disco silenciosamente. Configura una regla de ciclo de vida o un cron que elimine snapshots antiguos mediante `garage bucket lifecycle`.","Garage en un clic en tu VPS","El Marketplace de ServOrbit instala Garage, crea su bucket y tus credenciales S3 en el primer arranque. Solo tienes que conectar tu cliente.","Desplegar Garage","\u002Fmarketplace\u002Fbases-de-datos\u002Fgarage",[],1789664998006]