{"id":33373,"date":"2026-08-03T11:39:00","date_gmt":"2026-08-03T09:39:00","guid":{"rendered":"https:\/\/contabo.com\/blog\/?p=33373"},"modified":"2026-08-17T11:22:35","modified_gmt":"2026-08-17T09:22:35","slug":"autoalojar-notediscovery-vps-docker","status":"publish","type":"post","link":"https:\/\/contabo.com\/blog\/es\/autoalojar-notediscovery-vps-docker\/","title":{"rendered":"C\u00f3mo autoalojar NoteDiscovery en un VPS con Docker"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>En resumen.<\/strong> NoteDiscovery es una app de notas de c\u00f3digo abierto y autoalojada que guarda las notas como archivos Markdown planos. Esta gu\u00eda la despliega en un VPS de Contabo con Docker Compose, detr\u00e1s de un proxy inverso Caddy con HTTPS autom\u00e1tico. Contratas un Cloud VPS 4 (4 n\u00facleos vCPU, 8 GB de RAM), descargas la imagen oficial ghcr.io\/gamosoft\/notediscovery, activas la contrase\u00f1a, conectas un asistente de IA por MCP y programas respaldos. Toma unos 20 minutos.<\/p>\n\n\n\n<h2 id=\"h-requisitos\" class=\"wp-block-heading\">Requisitos<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">NoteDiscovery es una base de conocimiento ligera y autoalojada, as\u00ed que corre sin problemas en un VPS peque\u00f1o. Antes de empezar, ten listo lo siguiente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un Contabo Cloud VPS 4 (4 n\u00facleos vCPU, 8 GB de RAM) o mayor, con Ubuntu 24.04 o posterior<\/li>\n\n\n\n<li>Docker y el plugin Docker Compose instalados en el servidor<\/li>\n\n\n\n<li>Un dominio con un registro A que apunte a la direcci\u00f3n IP de tu VPS<\/li>\n\n\n\n<li>Caddy para SSL autom\u00e1tico, o un proxy inverso existente si ya tienes uno en marcha<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Si vienes de una b\u00f3veda sincronizada en una app como Obsidian, los montajes autoalojados siguen la misma forma que esta gu\u00eda: un contenedor Docker, un volumen de datos y un proxy inverso al frente. La diferencia es que NoteDiscovery trae su propia interfaz web, as\u00ed que no hay un plugin de sincronizaci\u00f3n aparte que configurar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los 20 minutos indicados asumen que el VPS ya est\u00e1 aprovisionado y que el DNS ya apunta hacia \u00e9l. La propagaci\u00f3n de DNS puede sumar su propia espera seg\u00fan tu registrador, as\u00ed que arranca por ese paso si vas siguiendo la gu\u00eda en tiempo real. Acceso root solo lo necesitas para la configuraci\u00f3n inicial del servidor. Una vez instalado Docker, cada paso restante es una operaci\u00f3n de contenedor o una edici\u00f3n de un archivo de configuraci\u00f3n montado.<\/p>\n\n\n\n<h2 id=\"h-paso-1-aprovisiona-tu-vps-e-instala-docker\" class=\"wp-block-heading\">Paso 1: aprovisiona tu VPS e instala Docker<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El aprovisionamiento toma unos cinco minutos y es la \u00fanica parte de esta gu\u00eda que haces fuera de Docker. Lanza un Cloud VPS 4 desde el Contabo Customer Control Panel, elige Ubuntu 24.04 o posterior y agrega tu llave SSH durante la configuraci\u00f3n para saltarte por completo los inicios de sesi\u00f3n con contrase\u00f1a. Si todav\u00eda no tienes un par de llaves, genera uno localmente con <code>ssh-keygen -t ed25519<\/code> antes de abrir el formulario de pedido. El Customer Control Panel te deja pegar la llave p\u00fablica directamente en la pantalla de aprovisionamiento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando el servidor arranque, con\u00e9ctate y aseg\u00faralo antes de instalar nada. Las reglas de firewall de abajo abren solo lo que esta gu\u00eda realmente necesita: SSH para administraci\u00f3n y los puertos 80 y 443 para que Caddy sirva HTTP y HTTPS. Todo lo dem\u00e1s en el servidor queda inalcanzable desde fuera, y eso importa m\u00e1s aqu\u00ed que en una app web com\u00fan, porque tus notas viven en esa misma m\u00e1quina.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh root@your-server-ip\nufw allow OpenSSH\nufw allow 80\/tcp\nufw allow 443\/tcp\nufw enable<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Con el firewall activo, instala Docker y el plugin Compose:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -fsSL https:\/\/get.docker.com | sh\napt install docker-compose-plugin -y\ndocker --version\ndocker compose version<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Esta es la misma base que usa cualquier base de conocimiento autoalojada que corra en contenedores, y es exactamente lo que NoteDiscovery necesita antes de que arranque su propio contenedor: un firewall cerrado, Docker Engine actualizado y el plugin Compose para que un stack de varios contenedores quede a un solo comando de distancia. Confirma que ambos comandos de versi\u00f3n devuelvan salida antes de continuar.<\/p>\n\n\n\n<h2 id=\"h-paso-2-despliega-notediscovery-con-docker-compose\" class=\"wp-block-heading\">Paso 2: despliega NoteDiscovery con Docker Compose<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">NoteDiscovery se despliega como un solo contenedor, as\u00ed que todo el stack cabe en un archivo. Crea primero un directorio de proyecto y una carpeta de datos, porque la carpeta de datos tiene que existir antes de que el contenedor arranque:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p notediscovery\/data &amp;&amp; cd notediscovery<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s crea <code>docker-compose.yml<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>services:\n&nbsp; notediscovery:\n&nbsp;&nbsp;&nbsp; image: ghcr.io\/gamosoft\/notediscovery:latest\n&nbsp;&nbsp;&nbsp; container_name: notediscovery\n&nbsp;&nbsp;&nbsp; restart: unless-stopped\n&nbsp;&nbsp;&nbsp; ports:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - \"8000:8000\"\n&nbsp;&nbsp;&nbsp; volumes:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - .\/data:\/app\/data<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cada l\u00ednea hace un trabajo: <code>image <\/code>descarga la compilaci\u00f3n oficial directamente desde GitHub Container Registry, <code>restart: unless-stopped<\/code> regresa NoteDiscovery despu\u00e9s de un reinicio o una ca\u00edda, ports mapea el puerto 8000 del contenedor al mismo puerto del host, y esa \u00fanica l\u00ednea de volumen es lo que vuelve persistentes tus notas en lugar de que desaparezcan con el contenedor. No hace falta ning\u00fan servicio de base de datos, porque NoteDiscovery no tiene ninguna.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Levanta el stack:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose up -d\ndocker compose logs -f notediscovery<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">NoteDiscovery ya est\u00e1 escuchando en el puerto 8000 y tus notas viven en .\/data como archivos Markdown planos, no en una base de datos. Visita <code>http:\/\/your-server-ip:8000<\/code> y confirma que la interfaz carga antes de poner el proxy inverso al frente. Si el contenedor se cierra de inmediato, revisa que la carpeta <code>data <\/code>exista y tenga permisos de escritura. Un volumen vac\u00edo o ausente es la causa m\u00e1s com\u00fan de un primer arranque fallido.<\/p>\n\n\n\n<h2 id=\"h-paso-3-configura-el-proxy-inverso-caddy-con-https\" class=\"wp-block-heading\">Paso 3: configura el proxy inverso Caddy con HTTPS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Caddy se coloca frente a NoteDiscovery y maneja HTTPS de forma autom\u00e1tica, as\u00ed que este paso necesita un Caddyfile y nada m\u00e1s. Antes de instalar Caddy, confirma que el registro A de tu dominio apunta a la direcci\u00f3n IP del VPS. La solicitud autom\u00e1tica de certificado de Caddy falla en silencio si el dominio todav\u00eda no resuelve al servidor, as\u00ed que vale la pena revisar primero que un <code>dig notes.example.com<\/code> devuelva la IP de tu servidor. Instala Caddy en el host:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt install -y debian-keyring debian-archive-keyring apt-transport-https curl\ncurl -1sLf 'https:\/\/dl.cloudsmith.io\/public\/caddy\/stable\/gpg.key' | gpg --dearmor -o \/usr\/share\/keyrings\/caddy-stable-archive-keyring.gpg\ncurl -1sLf 'https:\/\/dl.cloudsmith.io\/public\/caddy\/stable\/debian.deb.txt' | tee \/etc\/apt\/sources.list.d\/caddy-stable.list\napt update &amp;&amp; apt install caddy -y<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s apunta el Caddyfile a tu dominio y al puerto del contenedor:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>notes.example.com {\n&nbsp;&nbsp;&nbsp; reverse_proxy localhost:8000\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Recarga Caddy y \u00e9l solicita un certificado a Let\u2019s Encrypt por su cuenta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl reload caddy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En unos segundos tu dominio sirve NoteDiscovery sobre HTTPS sin que toques ning\u00fan certificado. Es el mismo patr\u00f3n que usas para acceder a Obsidian desde el navegador y para una b\u00f3veda de Obsidian autoalojada movida a un dominio p\u00fablico: Caddy termina TLS y el contenedor de la app nunca necesita saber que hay cifrado de por medio.<\/p>\n\n\n\n<h2 id=\"h-paso-4-activa-la-contrasena\" class=\"wp-block-heading\">Paso 4: activa la contrase\u00f1a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La protecci\u00f3n con contrase\u00f1a viene desactivada de f\u00e1brica y la contrase\u00f1a predeterminada incluida es admin. Por eso, activarla, generar una llave secreta real y cambiar esa contrase\u00f1a es lo primero que toca hacer en cuanto HTTPS est\u00e9 funcionando.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Empieza generando una llave secreta, que cifra las cookies de sesi\u00f3n, desde dentro del contenedor en marcha:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker exec -it notediscovery python -c \"import secrets; print(secrets.token_hex(32))\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Guarda ese valor y despu\u00e9s descarga el archivo de configuraci\u00f3n predeterminado de NoteDiscovery para tener tu propia copia editable:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -o config.yaml https:\/\/raw.githubusercontent.com\/gamosoft\/notediscovery\/main\/config.yaml<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Edita el nuevo <code>config.yaml<\/code> y define:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>authentication:\n&nbsp; enabled: true\n&nbsp; password: \"your-strong-password-here\"\n&nbsp; secret_key: \"the-value-from-the-command-above\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Monta el archivo dentro del contenedor para que tus ediciones sobrevivan a los reinicios y a las actualizaciones de imagen. Agr\u00e9galo a <code>docker-compose.yml<\/code> junto al volumen de datos existente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&nbsp;&nbsp;&nbsp; volumes:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - .\/data:\/app\/data\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - .\/config.yaml:\/app\/config.yaml<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Recrea el contenedor para que tome el nuevo volumen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose up -d<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Recarga el sitio y NoteDiscovery pedir\u00e1 la contrase\u00f1a antes de mostrar cualquier nota. Saltarte este paso no es buena idea: la app escucha en todas las interfaces de red de forma predeterminada, as\u00ed que una instancia sin autenticaci\u00f3n detr\u00e1s de un dominio p\u00fablico queda al alcance de cualquiera que encuentre la URL. Elige una contrase\u00f1a con entrop\u00eda real, no una palabra corta con un n\u00famero al final, y nunca reutilices la llave secreta en otras aplicaciones. Juntas son lo \u00fanico que se interpone entre internet y toda tu b\u00f3veda.<\/p>\n\n\n\n<h2 id=\"h-paso-5-conecta-tu-asistente-de-ia-mcp\" class=\"wp-block-heading\">Paso 5: conecta tu asistente de IA (MCP)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">NoteDiscovery incluye un servidor MCP integrado, as\u00ed que conectar un asistente de IA es un fragmento de configuraci\u00f3n y no una instalaci\u00f3n aparte. Agrega esto a la configuraci\u00f3n de servidores MCP de tu asistente, sea Claude Desktop, Cursor u otro cliente compatible con MCP:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n&nbsp; \"mcpServers\": {\n&nbsp;&nbsp;&nbsp; \"notediscovery\": {\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"command\": \"docker\",\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"args\": &#91;\"run\", \"--rm\", \"-i\", \"-e\",\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"NOTEDISCOVERY_URL=https:\/\/notes.example.com\",\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"ghcr.io\/gamosoft\/notediscovery:latest\", \"python\", \"-m\",\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"mcp_server\"]\n&nbsp;&nbsp;&nbsp; }\n&nbsp; }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Reemplaza el valor de <code>NOTEDISCOVERY_URL<\/code> con tu propio dominio del Paso 3. Cuando el asistente recargue sus servidores MCP, podr\u00e1 buscar en tus notas, crear notas nuevas a partir de una instrucci\u00f3n, seguir etiquetas y enlaces internos por toda tu b\u00f3veda y a\u00f1adir texto a una nota existente, por ejemplo un diario personal. Todo eso sin salir de la ventana de chat. Una instrucci\u00f3n como \u201cencuentra todas mis notas sobre despliegue con Docker\u201d o \u201cagrega esta idea a la entrada de hoy en mi diario\u201d se resuelve con las mismas herramientas MCP que una persona ir\u00eda clicando en la interfaz web.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esta es la funci\u00f3n que m\u00e1s separa a NoteDiscovery de una base de conocimiento pensada solo para personas: las mismas notas quedan legibles para un asistente de IA a trav\u00e9s de un protocolo documentado, no le\u00eddas a la fuerza por una extensi\u00f3n de navegador. Si el cliente de tu asistente se autentica por HTTPS en vez de con un comando Docker local, ap\u00fantalo al dominio p\u00fablico del Paso 3 y no a la URL entre contenedores de arriba.<\/p>\n\n\n\n<h2 id=\"h-paso-6-respalda-tus-notas\" class=\"wp-block-heading\">Paso 6: respalda tus notas<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Las notas viven en <code>.\/data<\/code> como archivos Markdown planos, as\u00ed que respaldarlas es un trabajo de sincronizaci\u00f3n de archivos y no una exportaci\u00f3n de base de datos. La opci\u00f3n m\u00e1s simple es una sincronizaci\u00f3n programada hacia tu destino de almacenamiento:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt install rclone -y\nrclone config\n# create a remote named \"storage\" pointing at your storage location\nrclone sync \/root\/notediscovery\/data storage:notediscovery-backup<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Agrega una entrada diaria en cron para que la sincronizaci\u00f3n corra sin supervisi\u00f3n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>crontab -e\n# 0 3 * * * rclone sync \/root\/notediscovery\/data storage:notediscovery-backup<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Como toda la b\u00f3veda son archivos Markdown en disco, una base de conocimiento as\u00ed es f\u00e1cil de restaurar: copia la carpeta de datos respaldada a un VPS nuevo, apunta el mismo archivo de Docker Compose hacia ella y arranca el contenedor. Vale la pena ejecutar esa restauraci\u00f3n una vez de verdad, contra un VPS libre o una instalaci\u00f3n local de Docker, porque un respaldo cuya restauraci\u00f3n nunca probaste es apenas una suposici\u00f3n. Conserva al menos unos d\u00edas de historial en tu bucket de almacenamiento en lugar de sobrescribir una sola instant\u00e1nea, para que una sincronizaci\u00f3n mala o un borrado accidental no arrase con la \u00fanica copia que tienes.<\/p>\n\n\n\n<h2 id=\"h-solucion-de-problemas\" class=\"wp-block-heading\">Soluci\u00f3n de problemas<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Casi todo lo que puede salir mal en este montaje se remite a una de tres causas: un volumen faltante, una solicitud de certificado que corri\u00f3 antes de que el DNS estuviera listo, o un cambio de configuraci\u00f3n que solo vivi\u00f3 dentro del contenedor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>El contenedor se cierra de inmediato tras <code>docker compose up -d<\/code>.<\/strong> La causa m\u00e1s com\u00fan es una carpeta de datos ausente o sin permisos de escritura, porque NoteDiscovery espera que ya exista. Ejecuta otra vez <code>mkdir -p notediscovery\/data<\/code> del Paso 2, confirma que la carpeta pertenezca a tu usuario o a root, y levanta el stack una vez m\u00e1s con <code>docker compose up -d<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Caddy nunca obtiene certificado y el sitio se queda en HTTP.<\/strong> Casi siempre significa que el registro A del dominio todav\u00eda no apuntaba a la IP del VPS cuando Caddy hizo su primera solicitud. Confirma la resoluci\u00f3n con dig <code>notes.example.com<\/code> y recarga Caddy con <code>systemctl reload caddy<\/code> en cuanto el registro se haya propagado. No hace falta cambiar nada en el Caddyfile.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>El cambio de contrase\u00f1a o de llave secreta del Paso 4 no surte efecto.<\/strong> Un <code>docker compose restart<\/code> simple reutiliza el contenedor existente, as\u00ed que no tomar\u00e1 un volumen <code>config.yaml<\/code> que acabas de agregar a <code>docker-compose.yml<\/code>. Usa <code>docker compose up -d<\/code> en su lugar, que recrea el contenedor con el nuevo volumen montado.<\/p>\n\n\n\n<h2 id=\"h-faq-configuracion-de-notediscovery\" class=\"wp-block-heading\">FAQ: configuraci\u00f3n de NoteDiscovery<\/h2>\n\n\n\n<div class=\"schema-faq wp-block-yoast-faq-block\"><div class=\"schema-faq-section\" id=\"faq-question-1786701751902\"><strong class=\"schema-faq-question\">\u00bfC\u00f3mo migro de Obsidian a NoteDiscovery?<\/strong> <p class=\"schema-faq-answer\">Copia la carpeta de tu b\u00f3veda de Obsidian directamente al directorio de datos de NoteDiscovery, porque ambos guardan las notas como archivos Markdown planos con la misma estructura de carpetas. Una b\u00f3veda de Obsidian autoalojada no necesita conversi\u00f3n de formato: reinicia el contenedor despu\u00e9s de copiar y tus notas, carpetas y enlaces internos aparecen de inmediato en el explorador de archivos de NoteDiscovery, listos para editar o buscar.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1786701760271\"><strong class=\"schema-faq-question\">\u00bfNoteDiscovery corre en un VPS de 2 GB?<\/strong> <p class=\"schema-faq-answer\">S\u00ed, NoteDiscovery es lo bastante ligero para correr en un VPS de 2 GB con un solo usuario y una colecci\u00f3n de notas moderada, porque no tiene base de datos y su runtime ocupa poco. Las b\u00f3vedas grandes, varios usuarios simult\u00e1neos o un uso intenso de plugins se benefician de m\u00e1s RAM, y por eso esta gu\u00eda usa un Cloud VPS 4 con 8 GB como base de trabajo c\u00f3moda.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1786701768135\"><strong class=\"schema-faq-question\">\u00bfC\u00f3mo agrego plugins propios a NoteDiscovery?<\/strong> <p class=\"schema-faq-answer\">Monta una carpeta de plugins como volumen de Docker y coloca ah\u00ed tus archivos de plugin, siguiendo la estructura documentada en la gu\u00eda de plugins del proyecto. NoteDiscovery carga los plugins desde ese directorio montado al arrancar el contenedor, as\u00ed que reiniciar despu\u00e9s de agregar o actualizar un plugin basta para tomar el cambio sin reconstruir la imagen.<\/p> <\/div> <\/div>\n","protected":false},"excerpt":{"rendered":"<p>NoteDiscovery guarda tus notas como archivos Markdown en tu propio servidor. Esta gu\u00eda la despliega en un VPS de Contabo con Docker Compose, la protege con Caddy y contrase\u00f1a, conecta un asistente de IA por MCP y programa respaldos autom\u00e1ticos con rclone.<\/p>\n","protected":false},"author":63,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":"","_members_access_role":[],"_members_access_error":""},"categories":[1988],"tags":[],"ppma_author":[1492],"class_list":["post-33373","post","type-post","status-publish","format-standard","hentry","category-tutoriales"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Christopher Carter","author_link":"https:\/\/contabo.com\/blog\/es\/author\/christophercarter\/"},"uagb_comment_info":0,"uagb_excerpt":"NoteDiscovery guarda tus notas como archivos Markdown en tu propio servidor. Esta gu\u00eda la despliega en un VPS de Contabo con Docker Compose, la protege con Caddy y contrase\u00f1a, conecta un asistente de IA por MCP y programa respaldos autom\u00e1ticos con rclone.","authors":[{"term_id":1492,"user_id":63,"is_guest":0,"slug":"christophercarter","display_name":"Christopher Carter","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/63db81672a5ce4c1e8ee39753d00251d561b5b3a9967febf1c4f662024cef00f?s=96&d=mm&r=g","author_category":"","user_url":"","last_name":"Carter","first_name":"Christopher","job_title":"","description":""}],"_links":{"self":[{"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/posts\/33373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/users\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=33373"}],"version-history":[{"count":3,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/posts\/33373\/revisions"}],"predecessor-version":[{"id":33398,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/posts\/33373\/revisions\/33398"}],"wp:attachment":[{"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=33373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=33373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=33373"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=33373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}