[{"data":1,"prerenderedAt":186},["ShallowReactive",2],{"seo-verification":3,"blog-alojar-linkwarden-en-un-vps-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-alojar-linkwarden-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":130,"ctaBody":131,"ctaButton":132,"ctaUrl":133,"relatedPosts":134},251,"alojar-linkwarden-en-un-vps",{"fr":12,"en":13,"ar":14,"es":10},"heberger-linkwarden-vps","self-host-linkwarden-on-a-vps-team-bookmark-management","استضافة-linkwarden-على-vps-إدارة-الإشارات-المرجعية-للفريق","Alojar Linkwarden en VPS: gestión de marcadores de equipo","Despliegue Linkwarden en su VPS: centralice la vigilancia tecnológica de la agencia con colecciones compartidas, permisos por equipo y extensión multiusuario.",8,0,false,"2026-08-13T00:00:00+00:00","2026-09-08T22:00:01+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-linkwarden-vps-poster.svg",{"categorySlug":34,"appSlug":35},"colaboracion-productividad","linkwarden","Linkwarden es un gestor de marcadores colaborativo de código abierto bajo licencia AGPL-3.0, concebido para los equipos que comparten una vigilancia activa. Organiza los enlaces en colecciones, permite permisos precisos por miembro y ofrece una extensión de navegador que cada persona puede usar. Esta guía explica cómo desplegarlo en un VPS con acceso root, configurar el reverse proxy y entregar a su agencia un entorno listo para usar.",[38,42,53,56,84,88,91,124,127],{"type":39,"title":40,"body":41},"h2","Por qué alojar Linkwarden uno mismo","La objeción más habitual es la carga operativa: un servicio más que actualizar, respaldar y asegurar — mejor quedarse en un SaaS. Es legítima, pero parte de una premisa inexacta: una herramienta bien contenedorizada como Linkwarden no exige más mantenimiento que una imagen Docker estándar. La actualización se reduce a descargar la nueva imagen y reiniciar el servicio. La copia de seguridad afecta a un único volumen de base de datos. El TLS lo gestiona un reverse proxy ya presente en el VPS.\n\nLo que sí resuelve el autoalojamiento es la dependencia de un SaaS cuyas condiciones de acceso pueden cambiar de un día para otro. Varios equipos han perdido el acceso a una vigilancia compartida tras el cierre o la compra de una herramienta de terceros. En su VPS, los datos pertenecen a su organización, las colecciones siguen accesibles sea cual sea el contexto comercial del proveedor, y usted controla la política de retención.",{"type":43,"title":44,"items":45},"ul","Lo que Linkwarden aporta a una agencia",[46,47,48,49,50,51,52],"**Colecciones compartidas** — cada proyecto o cliente dispone de su propia colección, accesible al equipo implicado sin exponer las demás carpetas.","**Permisos por miembro** — los permisos se gestionan a nivel de colección: lector, colaborador o gestor, según el rol de cada uno.","**Anotaciones comunes** — los miembros de una colección pueden dejar notas en cada enlace, lo que evita duplicar búsquedas y capitaliza la vigilancia.","**Extensión de navegador multiusuario** — cada colaborador instala la extensión en su navegador y guarda directamente en la colección de destino, sin abrir la interfaz web.","**Archivado de las páginas** — Linkwarden conserva una copia local de las páginas guardadas, lo que evita perder un recurso desaparecido de la web.","**API REST** — los enlaces se integran en otras herramientas internas mediante la API, sin depender de una interfaz gráfica.","**Control total de los datos** — ningún análisis del comportamiento, ninguna sindicación externa de los marcadores hacia terceros.",{"type":39,"title":54,"body":55},"Requisitos previos antes de la instalación","Un VPS con **2 vCPU y 2 GB de RAM** basta para una agencia de 5 a 15 personas con un uso normal: las colecciones cargan rápido y el archivado de las páginas se ejecuta en segundo plano sin afectar a la navegación. Por debajo de 1 GB de RAM, el proceso Node.js de Next.js puede ser eliminado por el OOM killer bajo carga.\n\nPrevea **de 10 a 20 GB de almacenamiento** según el volumen de páginas archivadas: cada captura de pantalla y cada copia de página pesa entre 100 KB y 2 MB. Un VPS `{{vps.power.name}}` con SSD se adapta a esta carga.\n\nEn cuanto a la red, el puerto **443 debe estar abierto** y un nombre de dominio debe apuntar a la IP del VPS antes de generar el certificado TLS. Linkwarden requiere **Docker y Docker Compose**, disponibles en todas las distribuciones Linux principales. Se necesita una base de datos PostgreSQL — está incluida en el archivo Compose oficial.",{"type":57,"title":58,"steps":59},"steps","Despliegue paso a paso",[60,63,66,69,72,75,78,81],{"title":61,"body":62},"Preparar el directorio de trabajo","Conéctese por SSH a su VPS como root o mediante un usuario con sudo, y cree la carpeta que albergará los archivos de configuración:\n\n```bash\nmkdir -p \u002Fopt\u002Flinkwarden && cd \u002Fopt\u002Flinkwarden\n```",{"title":64,"body":65},"Crear el archivo Compose","Cree un archivo `docker-compose.yml` con el contenido siguiente. Los valores entre ángulos deben sustituirse antes de arrancar:\n\n```yaml\nservices:\n  postgres:\n    image: postgres:16-alpine\n    restart: unless-stopped\n    environment:\n      POSTGRES_DB: linkwarden\n      POSTGRES_USER: linkwarden\n      POSTGRES_PASSWORD: \u003Ccontrasena-db>\n    volumes:\n      - postgres_data:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\n\n  linkwarden:\n    image: ghcr.io\u002Flinkwarden\u002Flinkwarden:latest\n    restart: unless-stopped\n    depends_on:\n      - postgres\n    environment:\n      DATABASE_URL: postgresql:\u002F\u002Flinkwarden:\u003Ccontrasena-db>@postgres:5432\u002Flinkwarden\n      NEXTAUTH_SECRET: \u003Ccadena-aleatoria-32-caracteres>\n      NEXTAUTH_URL: https:\u002F\u002Fsu-dominio.com\n    volumes:\n      - linkwarden_data:\u002Fdata\u002Fdata\n    ports:\n      - \"127.0.0.1:3000:3000\"\n\nvolumes:\n  postgres_data:\n  linkwarden_data:\n```\n\nPara generar el valor de `NEXTAUTH_SECRET`, ejecute en el servidor: `openssl rand -base64 32`.",{"title":67,"body":68},"Configurar la variable NEXTAUTH_URL con cuidado","La variable `NEXTAUTH_URL` debe corresponder exactamente a la URL pública de su instancia, protocolo incluido. Si su instancia está detrás de un reverse proxy TLS, el valor debe empezar por `https:\u002F\u002F` y no por `http:\u002F\u002F`.\n\nUn `NEXTAUTH_URL` mal formado produce el error siguiente en la primera carga de la interfaz: `Error: NEXTAUTH_URL is not configured. Please set NEXTAUTH_URL in your .env`. Si el valor está en `http:\u002F\u002F` mientras el proxy sirve HTTPS, la sesión no se crea y la página de inicio de sesión se recarga en bucle sin ningún mensaje de error visible.",{"title":70,"body":71},"Iniciar los contenedores","Desde `\u002Fopt\u002Flinkwarden`, ejecute:\n\n```bash\ndocker compose up -d\n```\n\nSe descargan las imágenes y PostgreSQL arranca en primer lugar. Linkwarden espera a que la base esté lista antes de inicializar el esquema. Compruebe que los dos contenedores están en estado `running` con `docker compose ps`.",{"title":73,"body":74},"Configurar el reverse proxy (nginx)","Linkwarden escucha en `127.0.0.1:3000`. Añada un bloque de servidor nginx para proxificar el tráfico HTTPS:\n\n```nginx\nserver {\n    listen 443 ssl;\n    server_name su-dominio.com;\n\n    ssl_certificate     \u002Fetc\u002Fletsencrypt\u002Flive\u002Fsu-dominio.com\u002Ffullchain.pem;\n    ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fsu-dominio.com\u002Fprivkey.pem;\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```\n\nRecargue nginx con `nginx -t && systemctl reload nginx`.",{"title":76,"body":77},"Generar el certificado TLS","Si aún no lo ha hecho, genere un certificado Let's Encrypt con Certbot:\n\n```bash\ncertbot --nginx -d su-dominio.com\n```\n\nCertbot modifica automáticamente el bloque nginx para añadir las rutas del certificado y la redirección de HTTP hacia HTTPS. La renovación es automática mediante el timer de systemd que instala el paquete.",{"title":79,"body":80},"Crear la primera cuenta de administrador","Abra `https:\u002F\u002Fsu-dominio.com` en un navegador. Linkwarden propone crear la primera cuenta en el primer acceso. Esa cuenta se convierte en la administradora de la instancia. Después, invite a cada colaborador desde el panel **Configuración → Miembros** indicando su dirección de correo electrónico.",{"title":82,"body":83},"Distribuir la extensión de navegador","La extensión de Linkwarden está disponible en Chrome Web Store y en Firefox Add-ons. En la primera configuración, cada miembro indica la URL de la instancia (`https:\u002F\u002Fsu-dominio.com`) y genera un token de API desde **Configuración → Tokens de acceso**. Los marcadores guardados desde la extensión llegan directamente a la colección elegida por el usuario.",{"type":85,"title":86,"body":87},"tip","Endurecimiento tras la instalación","Restrinja el acceso directo al puerto 3000 desde el exterior — solo debe responder en la interfaz local: compruebe que la línea `ports` de su Compose apunta a `127.0.0.1:3000:3000` y no a `0.0.0.0:3000:3000`.\n\nActive las actualizaciones automáticas de la imagen con Watchtower o programe un `docker compose pull && docker compose up -d` semanal en un cron.\n\nRespalde el volumen `postgres_data` con un dump diario: `docker compose exec postgres pg_dump -U linkwarden linkwarden > \u002Fopt\u002Fbackups\u002Flinkwarden-$(date +%F).sql`. Conserve los dumps fuera del servidor (S3, almacenamiento remoto) para resistir un fallo de disco.",{"type":39,"title":89,"body":90},"Linkwarden o Karakeep: dos usos distintos","Karakeep (antes Hoarder) y Linkwarden se citan a menudo juntos en las comparativas de gestores de marcadores self-hosted, pero no responden a la misma necesidad.\n\nKarakeep se centra en la captura inteligente: extrae y resume automáticamente el contenido de las páginas gracias a un modelo de lenguaje local o remoto. Es una herramienta pensada para un uso individual, donde el valor viene de la IA que ordena y clasifica. No expone la noción de colección compartida ni la gestión de permisos por miembro.\n\nLinkwarden está pensado para la colaboración: la noción central es la **colección compartida**, accesible a varios miembros con permisos diferenciados. Las anotaciones son comunes, no personales. La extensión de navegador se conecta a la instancia de la organización, no a una cuenta personal. Para una agencia que quiere centralizar la vigilancia de sus equipos de proyecto, Linkwarden es la herramienta adecuada. Para quien busca una biblioteca personal enriquecida por la IA, Karakeep responde mejor.",{"type":92,"title":93,"headers":94,"rows":98},"comparison","Linkwarden vs Karakeep — tabla comparativa",[95,96,97],"Criterio","Linkwarden","Karakeep",[99,103,107,111,114,117,121],[100,101,102],"Uso principal","Vigilancia colaborativa de equipo","Captura personal asistida por IA",[104,105,106],"Colecciones compartidas","Sí, con permisos por miembro","No (uso individual)",[108,109,110],"Anotaciones comunes","Sí","No",[112,109,113],"Extensión de navegador multiusuario","Sí (cuenta única)",[115,110,116],"Resumen del contenido con IA","Sí (modelo local o API)",[118,119,120],"Recursos mínimos","2 vCPU \u002F 2 GB RAM","2 vCPU \u002F 4 GB RAM (modelo local)",[122,123,123],"Licencia","AGPL-3.0",{"type":39,"title":125,"body":126},"Resolución de problemas: errores comunes en la instalación","**La página de inicio de sesión se recarga en bucle sin mensaje de error.**\nCausa probable: `NEXTAUTH_URL` está definido en `http:\u002F\u002F` mientras el reverse proxy sirve HTTPS. NextAuth genera una cookie segura que el navegador se niega a reenviar por una conexión no cifrada. Corrija el valor en el Compose y reinicie con `docker compose up -d --force-recreate`.\n\n**La interfaz se muestra pero las imágenes de las colecciones no cargan.**\nLa ruta del volumen `linkwarden_data` no está montada correctamente. Compruebe que el volumen está declarado en la sección `volumes` del archivo Compose y que ningún montaje bind anterior haya dejado la carpeta vacía.\n\n**Error `ECONNREFUSED` en los logs de Linkwarden al arrancar.**\nLinkwarden arranca antes de que PostgreSQL esté listo para aceptar conexiones. Añada un `healthcheck` al servicio `postgres` y una condición `depends_on: postgres: condition: service_healthy` al servicio `linkwarden` para imponer el orden.\n\n**La extensión de navegador muestra «Imposible contactar con el servidor».**\nCompruebe que la URL introducida en los parámetros de la extensión no lleva barra final (`https:\u002F\u002Fsu-dominio.com` y no `https:\u002F\u002Fsu-dominio.com\u002F`). Algunas versiones de la extensión son sensibles a este detalle.\n\n**El archivado de las páginas no funciona.**\nEl proceso de archivado invoca a Chromium en modo headless desde el contenedor. En los VPS con menos de 1,5 GB de RAM, el proceso termina antes de la captura. Aumente los recursos del VPS o desactive el archivado automático en **Configuración → Archivado** si la RAM está limitada.",{"type":39,"title":128,"body":129},"El paso siguiente: centralizar todos los servicios de la agencia","Una agencia que autoaloja su vigilancia con Linkwarden ya ha cruzado la línea: gestiona sus propios datos, sus propias actualizaciones, sus propias copias de seguridad. Es la postura de un equipo que sabe qué hace funcionar.\n\nEl siguiente paso lógico es centralizar también los dominios, alojamientos y VPS de sus clientes en un espacio de revendedor bajo su propia marca — sin multiplicar las interfaces ni perder la visibilidad sobre las renovaciones. Es exactamente lo que permite la oferta para agencias de ServOrbit.\n\nSi desea profundizar en el autoalojamiento de herramientas de equipo, los artículos sobre **Outline** (wiki colaborativo) y la automatización de servidores con **Ansible** completan esta guía.","Centralice también los servicios de sus clientes","La agencia que autoaloja sus herramientas internas ya domina su infraestructura. El siguiente paso es gestionar los dominios, alojamientos y VPS de sus clientes bajo su propia marca, en un único espacio de revendedor.","Instalar Linkwarden en VPS","\u002Fmarketplace\u002Fcolaboracion-productividad\u002Flinkwarden",[135,151,171],{"id":136,"slug":137,"slugs":138,"title":142,"excerpt":143,"readTime":144,"views":18,"isPinned":19,"publishedAt":145,"updatedAt":146,"category":147,"categories":148,"featuredImage":30,"bgImage":31,"posterImage":150,"relatedSolution":30},80,"alojar-outline-en-un-vps",{"fr":139,"en":140,"ar":141,"es":137},"heberger-outline","host-outline-on-your-own-vps","استضافة-outline-على-خادم-vps-الخاص-بك","Alojar Outline en su propio VPS","Despliegue Outline en su VPS Cloud: base de conocimiento colaborativa autoalojada con Docker, PostgreSQL, Redis y SSL. Guía completa.",3,"2026-04-01T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[149],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-outline-poster.svg",{"id":152,"slug":153,"slugs":154,"title":158,"excerpt":159,"readTime":160,"views":161,"isPinned":19,"publishedAt":162,"updatedAt":146,"category":163,"categories":168,"featuredImage":30,"bgImage":31,"posterImage":170,"relatedSolution":30},212,"woodpecker-ci-forgejo-pipeline-cicd-vps",{"fr":155,"en":156,"ar":157,"es":153},"woodpecker-ci-pipeline-vps-forgejo","woodpecker-ci-and-forgejo-cicd-pipeline-on-a-vps","woodpecker-ci-وforgejo-خط-أنابيب-cicd-على-خادم-vps","Woodpecker CI y Forgejo: pipeline CI\u002FCD en un VPS","Despliega Woodpecker CI v3 con Forgejo en tu VPS: configuración Docker Compose, pipelines YAML, secretos, runners multi-arquitectura y depuración OAuth.",11,1,"2026-08-02T00:00:00+00:00",{"id":164,"name":165,"slug":166,"color":167,"icon":166},2,"Automatización","automatisation","bg-brand-action\u002F10 text-brand-action",[169],{"id":164,"name":165,"slug":166,"color":167,"icon":166},"\u002Fblog\u002Fcovers\u002Fwoodpecker-ci-pipeline-vps-forgejo-poster.svg",{"id":172,"slug":173,"slugs":174,"title":178,"excerpt":179,"readTime":180,"views":161,"isPinned":19,"publishedAt":181,"updatedAt":146,"category":182,"categories":183,"featuredImage":30,"bgImage":31,"posterImage":185,"relatedSolution":30},236,"automatizar-servidores-vps-con-ansible",{"fr":175,"en":176,"ar":177,"es":173},"ansible-automatiser-serveurs-vps","automating-vps-server-management-with-ansible","أتمتة-إدارة-خوادم-vps-باستخدام-ansible","Automatizar la gestión de servidores VPS con Ansible","Automatice la gestión de una flota de servidores VPS con Ansible: inventario, playbooks, roles y Vault para una infraestructura reproducible.",10,"2026-08-08T00:00:00+00:00",{"id":164,"name":165,"slug":166,"color":167,"icon":166},[184],{"id":164,"name":165,"slug":166,"color":167,"icon":166},"\u002Fblog\u002Fcovers\u002Fansible-automatiser-serveurs-vps-poster.svg",1789664999830]