[{"data":1,"prerenderedAt":201},["ShallowReactive",2],{"seo-verification":3,"blog-alojar-hedgedoc-en-un-vps-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-alojar-hedgedoc-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":140,"ctaBody":141,"ctaButton":142,"ctaUrl":143,"relatedPosts":144},268,"alojar-hedgedoc-en-un-vps",{"fr":12,"en":13,"ar":14,"es":10},"heberger-hedgedoc-vps","self-host-hedgedoc-on-vps-the-collaborative-markdown-editor","استضافة-hedgedoc-على-vps-محرر-markdown-التعاوني","Alojar HedgeDoc en un VPS: editor Markdown colaborativo","Despliegue HedgeDoc 1.11.x en su VPS en 15 minutos con Docker y Nginx. Edición Markdown colaborativa en tiempo real, sin Google Docs.",8,0,false,"2026-08-15T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},4,"Desarrollo","developpement","bg-warning\u002F10 text-warning","dev",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-hedgedoc-vps-poster.svg",{"categorySlug":34,"appSlug":35},"colaboracion-productividad","hedgedoc","Google Docs resulta práctico hasta el día en que su equipo prefiere escribir documentación técnica en Markdown, integrar bloques de código con resaltado de sintaxis o, sencillamente, evitar alojar sus actas de reunión y sus especificaciones en Google. HedgeDoc (antes CodiMD) es un editor Markdown colaborativo en tiempo real, de código abierto (AGPL-3.0), que se despliega en menos de quince minutos en un VPS con Docker Compose. Cada nota tiene una URL que se puede compartir, la edición es simultánea con varios cursores y sus datos permanecen en su infraestructura.",[38,42,51,70,73,77,80,131,134,137],{"type":39,"title":40,"body":41},"h2","¿Por qué HedgeDoc en lugar de Notion o Google Docs?","Notion y Google Docs tienen cada uno sus ventajas, pero ambos alojan sus datos en sus servidores, imponen sus formatos propietarios y pueden modificar sus tarifas o condiciones sin previo aviso. Para un equipo técnico que documenta arquitecturas, redacta documentación de API, prepara RFC o gestiona actas de reunión, HedgeDoc ofrece una alternativa radicalmente distinta:\n\n- **Markdown nativo** con renderizado en tiempo real en el editor y vista previa a pantalla dividida.\n- **Edición colaborativa** con varios cursores visibles de forma simultánea.\n- **Bloques de código** con resaltado de sintaxis para más de 200 lenguajes.\n- **Diagramas integrados**: Mermaid, PlantUML, Vega-lite y flowcharts directamente en la nota.\n- **Fórmulas matemáticas**: LaTeX mediante MathJax.\n- **Exportación**: PDF, Markdown y HTML con un clic desde la interfaz.\n- **Alojamiento en su VPS**: sus datos no salen de su infraestructura.",{"type":43,"title":44,"items":45},"ul","Requisitos previos antes de empezar",[46,47,48,49,50],"Un VPS con Ubuntu 22.04 o Debian 12 y **1 GB de RAM como mínimo** (512 MB pueden bastar para pruebas, pero se recomienda 1 GB para la colaboración simultánea).","**Docker Engine ≥ 24** y Docker Compose V2 instalados.","Un **nombre de dominio** apuntando a su VPS para configurar TLS (obligatorio en producción: HedgeDoc utiliza WebSockets, que requieren una conexión segura).","El puerto **3000** disponible (HedgeDoc escucha en ese puerto de forma predeterminada).","**Nginx** instalado para el reverse proxy (con soporte WebSocket: imprescindible).",{"type":52,"title":53,"steps":54},"steps","Instalación de HedgeDoc con Docker Compose",[55,58,61,64,67],{"title":56,"body":57},"Paso 1 — Crear la estructura del proyecto","```bash\nmkdir -p \u002Fopt\u002Fhedgedoc && cd \u002Fopt\u002Fhedgedoc\n```\n\nCree el archivo `docker-compose.yml`:\n\n```yaml\nversion: '3.8'\nservices:\n  database:\n    image: postgres:15-alpine\n    environment:\n      POSTGRES_USER: hedgedoc\n      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}\n      POSTGRES_DB: hedgedoc\n    volumes:\n      - db-data:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\n    restart: unless-stopped\n    healthcheck:\n      test: ['CMD-SHELL', 'pg_isready -U hedgedoc']\n      interval: 10s\n      timeout: 5s\n      retries: 5\n\n  app:\n    image: quay.io\u002Fhedgedoc\u002Fhedgedoc:1.11.1\n    environment:\n      CMD_DB_URL: postgres:\u002F\u002Fhedgedoc:${POSTGRES_PASSWORD}@database\u002Fhedgedoc\n      CMD_DOMAIN: ${CMD_DOMAIN}\n      CMD_PROTOCOL_USESSL: 'true'\n      CMD_SESSION_SECRET: ${CMD_SESSION_SECRET}\n      CMD_ALLOW_ANONYMOUS: 'false'\n      CMD_ALLOW_REGISTRATION: 'true'\n      CMD_ALLOW_FREEURL: 'true'\n    volumes:\n      - uploads:\u002Fhedgedoc\u002Fpublic\u002Fuploads\n    ports:\n      - '127.0.0.1:3000:3000'\n    depends_on:\n      database:\n        condition: service_healthy\n    restart: unless-stopped\n\nvolumes:\n  db-data:\n  uploads:\n```",{"title":59,"body":60},"Paso 2 — Crear el archivo de entorno","```bash\ncat > \u002Fopt\u002Fhedgedoc\u002F.env \u003C\u003C 'EOF'\nPOSTGRES_PASSWORD=CONTRASENA_SEGURA_AQUI\nCMD_DOMAIN=hedgedoc.sudominio.com\nCMD_SESSION_SECRET=UNA_CADENA_ALEATORIA_LARGA_Y_FIJA\nEOF\n```\n\n⚠️ **`CMD_SESSION_SECRET` debe ser un valor fijo**, generado una sola vez y que nunca cambie. Si lo modifica después del primer arranque, todas las sesiones existentes quedarán invalidadas. Genérelo con:\n\n```bash\nopenssl rand -base64 32\n```",{"title":62,"body":63},"Paso 3 — Levantar los contenedores","```bash\ndocker compose up -d\n```\n\nCompruebe que ambos contenedores están operativos:\n\n```bash\ndocker compose ps\ndocker compose logs app\n```\n\nHedgeDoc migrará automáticamente la base de datos PostgreSQL en el primer arranque. En cuanto los registros muestren `listening on port 3000`, la aplicación está lista.",{"title":65,"body":66},"Paso 4 — Configurar Nginx con soporte WebSocket","⚠️ La configuración de Nginx para HedgeDoc **debe incluir un bloque `\u002Fsocket.io\u002F`** con las cabeceras WebSocket adecuadas. Omitir ese bloque provoca fallos silenciosos de la colaboración en tiempo real: las notas se abren, pero los cambios de los demás usuarios no aparecen.\n\n```bash\napt install -y nginx certbot python3-certbot-nginx\n\ncat > \u002Fetc\u002Fnginx\u002Fsites-available\u002Fhedgedoc \u003C\u003C 'EOF'\nserver {\n    server_name hedgedoc.sudominio.com;\n\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:3000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n\n    location \u002Fsocket.io\u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:3000;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n    }\n}\nEOF\n\nln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Fhedgedoc \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F\ncertbot --nginx -d hedgedoc.sudominio.com\nnginx -t && systemctl reload nginx\n```",{"title":68,"body":69},"Paso 5 — Crear la primera cuenta de usuario","Abra su navegador en `https:\u002F\u002Fhedgedoc.sudominio.com`. En la página de inicio, haga clic en **Sign In** → **Register** para crear su primera cuenta de administrador.\n\nSi ha definido `CMD_ALLOW_REGISTRATION: 'false'`, puede crear la primera cuenta desde la CLI:\n\n```bash\ndocker compose exec app npm run manage_users -- --add su@email.com --password SuContrasena\n```\n\nUna vez conectado, haga clic en **New note** para crear su primera nota colaborativa.",{"type":39,"title":71,"body":72},"Funcionalidades que conviene descubrir","**Compartir una nota:** cada nota de HedgeDoc tiene una URL única. Haga clic en el botón de compartir para obtener la URL y elija el modo de acceso (solo lectura, comentarios, edición). Envíe la URL a sus colaboradores: pueden editar sin cuenta si usted lo autoriza.\n\n**Insertar un diagrama Mermaid:**\n\n```mermaid\ngraph LR\n    A[Cliente] --> B[API]\n    B --> C[Base de datos]\n    C --> D[Cache Redis]\n```\n\nHedgeDoc renderiza el diagrama en tiempo real en la vista previa.\n\n**Exportar la nota:** en el menú (icono ≡), elija **Export** para descargarla en Markdown, HTML o PDF. La exportación a PDF utiliza un navegador headless en el servidor: requiere que Chromium esté disponible, algo que la imagen Docker oficial ya incluye.\n\n**Modo presentación:** añada `---` entre las secciones para convertirlas en diapositivas. En el menú, elija **Slide Mode** para pasar a presentación a pantalla completa.",{"type":74,"title":75,"body":76},"tip","Bloque Socket.io ausente = colaboración rota en silencio","Es la trampa más frecuente con HedgeDoc detrás de Nginx. Síntoma: la interfaz se muestra con normalidad, usted puede escribir en la nota, pero las modificaciones de los demás usuarios no aparecen en tiempo real, sin ningún mensaje de error visible.\n\nCausa: la ruta `\u002Fsocket.io\u002F` necesita una **conexión WebSocket** (protocolo `ws:\u002F\u002F` o `wss:\u002F\u002F`). Sin el bloque de Nginx dedicado que envía las cabeceras `Upgrade: websocket` y `Connection: upgrade`, Nginx trata la petición como HTTP clásico y la conexión en tiempo real falla en silencio.\n\nComprobación rápida:\n\n```bash\n# Desde su equipo, compruebe que el WebSocket es accesible\ncurl -v -N -H \"Connection: Upgrade\" -H \"Upgrade: websocket\" \\\n  https:\u002F\u002Fhedgedoc.sudominio.com\u002Fsocket.io\u002F?transport=websocket\n```\n\nDebe ver `101 Switching Protocols` en la respuesta. Un `200` o un `400` indica que el bloque `\u002Fsocket.io\u002F` falta o está mal configurado.",{"type":74,"title":78,"body":79},"Proxy sin barra final = página en blanco o error 404","En la directiva `proxy_pass` de Nginx, la presencia o la ausencia de la barra final cambia el comportamiento:\n\n```nginx\n# CORRECTO — sin barra final (HedgeDoc gestiona sus propias rutas)\nproxy_pass http:\u002F\u002F127.0.0.1:3000;\n\n# INCORRECTO — la barra final hace que Nginx reescriba la ruta\nproxy_pass http:\u002F\u002F127.0.0.1:3000\u002F;\n```\n\nCon una barra final, una petición a `\u002Fs\u002Fmi-nota` se convierte en una petición a `\u002Fs\u002Fmi-nota` en un contexto distinto, lo que rompe las redirecciones y el enrutamiento interno de HedgeDoc. Resultado: página en blanco o error 404 en las notas. Omita siempre la barra final en `proxy_pass` cuando configure HedgeDoc.",{"type":81,"title":82,"headers":83,"rows":88},"comparison","HedgeDoc vs Notion vs Confluence",[84,85,86,87],"Criterio","HedgeDoc (self-hosted)","Notion","Confluence (Cloud)",[89,94,99,103,108,113,118,123,127],[90,91,92,93],"Precio","Gratis (coste del VPS)","Gratis hasta 10 miembros, ~10 $\u002Fmiembro\u002Fmes","~5.75 $\u002Fusuario\u002Fmes (mín. 10)",[95,96,97,98],"Formato","Markdown nativo","Bloques propietarios","Editor enriquecido (WYSIWYG)",[100,101,102,102],"Colaboración en tiempo real","Sí (WebSocket)","Sí",[104,105,106,107],"Diagramas nativos","Mermaid, PlantUML, Vega-lite","Limitado (mediante integraciones)","Mediante macros (Confluence)",[109,110,111,112],"Bloques de código","Más de 200 lenguajes con resaltado","Sí (limitado)","Sí (mediante plugin)",[114,115,116,117],"Alojamiento de los datos","Su VPS","Servidores de Notion (EE. UU.)","Servidores de Atlassian",[119,120,121,122],"Exportación a Markdown","Sí (nativa)","Parcial (importación\u002Fexportación)","No nativa",[124,125,102,126],"Fórmulas LaTeX","Sí (MathJax)","Mediante plugin",[128,129,130,126],"Modo presentación","Sí (integrado)","No",{"type":39,"title":132,"body":133},"Gestionar los usuarios y los permisos","HedgeDoc gestiona tres niveles de acceso por nota, definidos en el menú de cada nota:\n\n- **Freely**: cualquiera puede editar, sin cuenta.\n- **Editable**: solo los usuarios conectados pueden editar.\n- **Limited**: solo el propietario puede editar; los demás pueden comentar.\n- **Locked**: solo lectura para todos salvo el propietario.\n- **Private**: accesible únicamente para el propietario.\n\n**Desactivar el registro público:**\n\nSi su instancia es pública, un desconocido podría crear una cuenta. Para reservar el acceso a su equipo, defina `CMD_ALLOW_REGISTRATION: 'false'` en `.env` y vuelva a crear el contenedor (`docker compose up -d --force-recreate app`). Después, cree las cuentas desde la CLI.\n\n**Activar la autenticación OAuth (GitHub, GitLab…):**\n\nHedgeDoc admite OAuth2 para GitHub, GitLab, Google, Twitter y varios proveedores más. Configure las variables `CMD_GITHUB_CLIENTID` \u002F `CMD_GITHUB_CLIENTSECRET` en `.env` después de crear una OAuth App en GitHub.",{"type":39,"title":135,"body":136},"Copias de seguridad y actualizaciones","**Guardar los datos:**\n\n```bash\n# Copia de seguridad de PostgreSQL\ndocker compose exec -T database \\\n  pg_dump -U hedgedoc hedgedoc | gzip > \u002Fopt\u002Fhedgedoc\u002Fbackups\u002Fhedgedoc-$(date +%Y%m%d).sql.gz\n\n# Copia de seguridad de los archivos subidos (imágenes, adjuntos)\ntar czf \u002Fopt\u002Fhedgedoc\u002Fbackups\u002Fuploads-$(date +%Y%m%d).tar.gz \\\n  -C \u002Fopt\u002Fhedgedoc uploads-volume\n```\n\nAutomatícelo con un cron diario y sincronícelo hacia un almacenamiento remoto (rclone hacia S3 o SFTP).\n\n**Actualizar HedgeDoc:**\n\n```bash\ncd \u002Fopt\u002Fhedgedoc\ndocker compose pull app\ndocker compose up -d app\ndocker compose logs -f app\n```\n\nLas migraciones de base de datos se aplican automáticamente al arrancar la nueva versión. Revise los registros para confirmar que las migraciones se han realizado correctamente antes de retomar el uso normal. La imagen actual es `quay.io\u002Fhedgedoc\u002Fhedgedoc:1.11.1`.",{"type":39,"title":138,"body":139},"Resolver los problemas más habituales","**La interfaz se muestra pero la colaboración no funciona**\nCompruebe en primer lugar el bloque `\u002Fsocket.io\u002F` en Nginx (véase el recuadro dedicado más arriba).\n\n**Error 502 Bad Gateway después del arranque**\nHedgeDoc espera a que PostgreSQL esté listo gracias a `depends_on: condition: service_healthy`. Si el 502 persiste después de 60 segundos, compruebe que el contenedor `database` está realmente en estado `healthy`: `docker compose ps`. Si no lo está, inspeccione sus registros: `docker compose logs database`.\n\n**Las imágenes subidas desaparecen tras un reinicio**\nAsegúrese de que el volumen `uploads` está correctamente montado. Compruebe con `docker inspect hedgedoc-app-1 | grep Mounts` que el volumen es persistente (tipo `volume`, no `bind`).\n\n**Error al exportar a PDF**\nLa exportación a PDF necesita Chromium en modo headless. Si la imagen Docker oficial no lo incluye en la versión que utiliza, puede desactivar la exportación a PDF con `CMD_ALLOW_PDF_EXPORT: 'false'` en `.env`.","Un VPS para su stack de colaboración documental","HedgeDoc funciona sin problemas con 1 GB de RAM. Nuestros VPS parten de unos pocos euros al mes e incluyen snapshots diarios para proteger las notas de su equipo. Sus especificaciones técnicas, sus RFC y sus actas de reunión permanecen en su propia infraestructura.","Ver los planes para agencias","\u002Fmarketplace\u002Fcolaboracion-productividad\u002Fhedgedoc",[145,167,184],{"id":146,"slug":147,"slugs":148,"title":152,"excerpt":153,"readTime":154,"views":18,"isPinned":19,"publishedAt":155,"updatedAt":21,"category":156,"categories":162,"featuredImage":30,"bgImage":31,"posterImage":164,"relatedSolution":165},148,"como-autoalojar-docmost-en-un-vps",{"fr":149,"en":150,"ar":151,"es":147},"self-host-docmost-vps","how-to-self-host-docmost-on-a-vps","كيفية-استضافة-docmost-ذاتيا-على-vps","Cómo autoalojar Docmost en un VPS","Despliegue Docmost en su VPS: wiki de equipo autoalojado con colaboración en tiempo real. La alternativa open source a Notion y Confluence, en 15 minutos.",3,"2026-01-28T00:00:00+00:00",{"id":157,"name":158,"slug":159,"color":160,"icon":161},7,"Autoalojamiento","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[163],{"id":157,"name":158,"slug":159,"color":160,"icon":161},"\u002Fblog\u002Fcovers\u002Fself-host-docmost-vps-poster.svg",{"categorySlug":34,"appSlug":166},"docmost",{"id":168,"slug":169,"slugs":170,"title":174,"excerpt":175,"readTime":176,"views":18,"isPinned":19,"publishedAt":177,"updatedAt":21,"category":178,"categories":179,"featuredImage":30,"bgImage":31,"posterImage":181,"relatedSolution":182},183,"alojar-memos-en-un-vps",{"fr":171,"en":172,"ar":173,"es":169},"self-host-memos-vps","self-host-memos-on-a-vps-lightweight-notes-and-team-journal","استضافة-memos-على-vps-ملاحظات-شخصية-وسجل-للفريق","Alojar Memos en un VPS: notas personales y diario de equipo","Despliegue Memos en su VPS: notas privadas de código abierto — Markdown, tags, búsqueda de texto completo, API REST, SQLite, menos de 128 MB de RAM.",5,"2026-07-18T00:00:00+00:00",{"id":157,"name":158,"slug":159,"color":160,"icon":161},[180],{"id":157,"name":158,"slug":159,"color":160,"icon":161},"\u002Fblog\u002Fcovers\u002Fself-host-memos-vps-poster.svg",{"categorySlug":34,"appSlug":183},"memos",{"id":185,"slug":186,"slugs":187,"title":191,"excerpt":192,"readTime":23,"views":18,"isPinned":19,"publishedAt":193,"updatedAt":194,"category":195,"categories":196,"featuredImage":30,"bgImage":31,"posterImage":198,"relatedSolution":199},139,"stack-dev-docker-en-vps",{"fr":188,"en":189,"ar":190,"es":186},"stack-dev-docker-vps","docker-dev-stack-on-a-vps-an-environment-ready-for-coding","حزمة-تطوير-docker-على-خادم-vps-بيئة-جاهزة-للبرمجة","Stack Dev Docker en VPS: entorno listo para programar","Monte un stack dev Docker en un VPS: Compose, volúmenes, puertos, copias de seguridad y acceso seguro para prototipar rápido.","2026-02-06T00:00:00+00:00","2026-09-07T19:17:12+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[197],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fstack-dev-docker-vps-poster.svg",{"categorySlug":27,"appSlug":200},"docker-dev-stack",1789664998920]