[{"data":1,"prerenderedAt":126},["ShallowReactive",2],{"seo-verification":3,"blog-alojar-paperless-ngx-en-un-vps-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-alojar-paperless-ngx-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":35,"sections":36,"ctaTitle":68,"ctaBody":69,"ctaButton":70,"ctaUrl":71,"relatedPosts":72},85,"alojar-paperless-ngx-en-un-vps",{"fr":12,"en":13,"ar":14,"es":10},"heberger-paperless-ngx","host-paperless-ngx-on-your-own-vps","استضافة-paperless-ngx-على-خادمك-الافتراضي-الخاص-vps","Alojar Paperless-ngx en un VPS: guía completa 2026","Instala Paperless-ngx en un VPS: Docker Compose, OCR multilingüe, migración 2.x→3.x, incompatibilidad Redis\u002FValkey y copia de seguridad automática.",17,0,false,"2026-03-27T00:00:00+00:00","2026-09-08T02:42:11+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-paperless-ngx-poster.svg",{"categorySlug":25,"appSlug":34},"paperless-ngx","Paperless-ngx transforma tus documentos escaneados en un archivo con búsqueda. Esta guía cubre la instalación, la configuración de OCR, los problemas habituales de fechas y tiempos de espera, y el procedimiento de migración de la rama 2.x a la serie 3.x con sus incompatibilidades conocidas.",[37,41,44,47,50,53,56,59,62,65],{"type":38,"title":39,"body":40},"h2","Por qué Paperless-ngx para tu GED self-hosted","Paperless-ngx es la bifurcación comunitaria más activa de Paperless — un sistema de gestión electrónica de documentos (GED) que indexa tus PDF e imágenes escaneadas, extrae el texto mediante OCR y te permite encontrarlos por palabra clave, fecha, corresponsal o etiqueta.\n\nFrente a las alternativas (Mayan EDMS, OpenDocMan), Paperless-ngx destaca por su facilidad de instalación (Docker Compose en menos de 10 minutos), su interfaz web reactiva escrita en Angular y el soporte de OCR multilingüe mediante Tesseract.\n\nEl proyecto lo mantiene su comunidad y publica versiones con regularidad — comprueba la versión actual en la página de releases de GitHub antes de instalar.\n\n**Casos de uso típicos:**\n- Archivo de facturas de proveedores para una microempresa o una pyme\n- Expediente médico personal o familiar (recetas, analíticas, informes)\n- Gestión de los documentos de una asociación o de una comunidad de propietarios\n- Archivo de contratos y arrendamientos para una agencia inmobiliaria",{"type":38,"title":42,"body":43},"Requisitos previos y elección del VPS","Paperless-ngx consume más recursos de lo que parece, sobre todo al importar. El procesamiento OCR de un PDF de varias páginas carga intensamente la CPU — es la principal fuente de tiempos de espera agotados en las configuraciones pequeñas.\n\n**Configuración mínima recomendada:**\n- CPU: 2 vCPU (el OCR es monohilo por tarea, pero varias tareas pueden ejecutarse en paralelo)\n- RAM: 2 GB mínimo; 4 GB para un uso cómodo\n- Almacenamiento: SSD, 20 GB mínimo para la aplicación + prevé el espacio de tus documentos\n- SO: Debian 12 o Ubuntu 22.04\u002F24.04\n\n**Lo que provoca timeouts en los VPS pequeños:** los PDF escaneados a alta resolución (300+ DPI) o con muchas páginas (50+) pueden superar el `PAPERLESS_WORKER_TIMEOUT` predeterminado (1.800 segundos). La sección dedicada más abajo cubre la resolución.",{"type":38,"title":45,"body":46},"Instalación con Docker Compose","La instalación oficial recomendada usa Docker Compose con tres servicios: `webserver` (la aplicación), `broker` (la cola de tareas) y `db` (la base de datos PostgreSQL).\n\n⚠️ **Descarga los tres archivos, no solo el `docker-compose.yml`.** El compose oficial declara `env_file: docker-compose.env`: los ajustes del contenedor se leen de **ese** archivo. El `.env` del directorio solo fija `COMPOSE_PROJECT_NAME=paperless` — es lo que da a los volúmenes su prefijo `paperless_`, y Docker Compose lo usa para sustituir variables, **no** lo inyecta en los contenedores. Escribir ahí tus `PAPERLESS_*` es el error silencioso más caro de esta página: el contenedor arranca, la interfaz responde, y ninguno de tus ajustes se aplica.\n\n```bash\n# Directorio de trabajo\nmkdir -p \u002Fopt\u002Fpaperless && cd \u002Fopt\u002Fpaperless\n\n# Los TRES archivos oficiales\nBASE=https:\u002F\u002Fraw.githubusercontent.com\u002Fpaperless-ngx\u002Fpaperless-ngx\u002Fmain\u002Fdocker\u002Fcompose\ncurl -fsSL $BASE\u002Fdocker-compose.postgres.yml -o docker-compose.yml\ncurl -fsSL $BASE\u002Fdocker-compose.env          -o docker-compose.env\ncurl -fsSL $BASE\u002F.env                        -o .env\n\n# Genera la clave ANTES de escribir nada: un heredoc ENTRECOMILLADO (\u003C\u003C'EOF') no\n# sustituye nada, la línea se escribiría literalmente y el «secreto» sería público.\nSECRET_KEY=$(openssl rand -hex 32)\n\n# La plantilla trae PAPERLESS_SECRET_KEY=change-me: se reemplaza, no se duplica.\nsed -i \"s|^PAPERLESS_SECRET_KEY=.*|PAPERLESS_SECRET_KEY=$SECRET_KEY|\" docker-compose.env\n\n# El resto de los ajustes van al MISMO archivo (heredoc sin comillas: $VAR se sustituye)\ncat >> docker-compose.env \u003C\u003CEOF\nPAPERLESS_URL=https:\u002F\u002Fpaperless.your-domain.com\nPAPERLESS_TIME_ZONE=Europe\u002FMadrid\nPAPERLESS_OCR_LANGUAGE=fra+eng+ara\nPAPERLESS_OCR_LANGUAGES=fra ara\nEOF\n\ndocker compose pull\ndocker compose up -d\n\n# Cuenta de administrador\ndocker compose exec webserver createsuperuser\n```\n\n`PAPERLESS_DBENGINE`, `PAPERLESS_DBHOST` y `PAPERLESS_REDIS` ya vienen en el bloque `environment:` del compose oficial: no los repitas en `docker-compose.env`. Si escribes tu propio compose, `PAPERLESS_DBENGINE=postgresql` es **obligatorio** desde la versión 3 (ver la sección de migración).\n\nLa interfaz es accesible en el puerto 8000 tras unos 60 segundos de arranque. Configura luego tu reverse proxy (nginx o Traefik) para exponer el servicio con TLS.",{"type":38,"title":48,"body":49},"Configuración de OCR multilingüe","El OCR es el núcleo de Paperless-ngx. Su configuración determina la calidad de la indexación y la capacidad de volver a encontrar tus documentos.\n\n**Idiomas Tesseract disponibles:** el parámetro `PAPERLESS_OCR_LANGUAGE` acepta códigos de idioma Tesseract separados por `+`. Para un fondo documental francés, árabe e inglés:\n\n```bash\nPAPERLESS_OCR_LANGUAGE=fra+ara+eng   # idiomas usados en el OCR\nPAPERLESS_OCR_LANGUAGES=fra ara      # paquetes Tesseract a INSTALAR (separados por espacios)\n```\n\n⚠️ **Ambas variables son necesarias, y es la trampa más cara de esta página.** `PAPERLESS_OCR_LANGUAGE` vale `eng` por defecto y solo *elige* el idioma; para cualquier idioma que no venga en la imagen, la documentación obliga a rellenar **también** `PAPERLESS_OCR_LANGUAGES` (lista separada por **espacios**, no por `+`) en los despliegues Docker. Sin ella, el OCR vuelve silenciosamente al inglés: tus documentos quedan indexados, pero el texto francés y árabe es ilegible — y nada en la interfaz lo señala.\n\nLa imagen trae ya inglés, alemán, italiano, español y francés; solo lo demás hay que instalarlo. Ten presente además que Tesseract consume bastante más CPU con varios idiomas activados: declara únicamente lo que realmente escaneas.\n\n**Modo OCR:** `PAPERLESS_OCR_MODE` controla cuándo se aplica el OCR. Existen cuatro valores — y `skip`, que se lee a menudo, **no** es uno de ellos:\n- `auto` (**predeterminado**): Paperless mira con `pdftotext` si el PDF ya lleva texto; si hay suficiente, se salta el OCR para ese documento, y si no, se ejecuta con normalidad. Es la opción más segura sobre un fondo mixto\n- `redo`: vuelve a pasar el OCR por todas las páginas e intenta sustituir las capas de texto existentes — útil cuando el escáner produjo un OCR mediocre. Puede fallar en algunos documentos (formularios); en ese caso se conserva el texto de origen\n- `force`: rasteriza el documento, convierte el texto en imagen y coloca el OCR encima. Funciona en todas partes, pero el archivo engorda y el texto se ve menos nítido al ampliar\n- `off`: nunca invoca el OCR; en los PDF el texto se extrae solo con `pdftotext`, y las imágenes salen sin texto\n\nPara la mayoría de los usos, deja `auto`: evita reprocesar los PDF nativos (contratos, facturas generadas por un programa) sin que tengas que ajustar nada.",{"type":38,"title":51,"body":52},"Gestión de fechas de documentos: el problema y la solución","La detección automática de fechas es una de las funciones más potentes de Paperless-ngx — y de las más frustrantes cuando no funciona. Por defecto, Paperless-ngx intenta detectar la fecha del documento en su contenido textual y en su nombre de archivo. Varias razones pueden llevar a una fecha incorrecta o ausente.\n\n**Problema 1: la fecha tiene un formato no reconocido.** Paperless-ngx detecta los formatos habituales (`DD\u002FMM\u002FYYYY`, `YYYY-MM-DD`, etc.) pero puede fallar con formatos ambiguos (`08\u002F09\u002F2025`: ¿8 de septiembre o 9 de agosto?).\n\n**Solución:** comprobar — y no «configurar» — el orden de lectura. `PAPERLESS_DATE_ORDER` **ya vale `DMY`** por defecto, es decir día, mes, año: ponerlo explícitamente no cambia nada y no resuelve ninguna ambigüedad. Este ajuste solo sirve para **apartarse** de él, por ejemplo con un fondo de documentos estadounidenses:\n```bash\nPAPERLESS_DATE_ORDER=MDY  # MM\u002FDD\u002FYYYY — ponlo SOLO si tus documentos están fechados así\n```\nCon un fondo mixto ningún orden global puede ser correcto: es el nombrado de los archivos (problema 3) lo que decide.\n\n**Problema 2: el documento tiene varias fechas y se elige la incorrecta.** Por ejemplo, una factura que menciona la fecha del servicio Y la fecha de emisión — Paperless-ngx toma la primera que encuentra.\n\n**Solución:** usar el campo de fecha manual de la interfaz web para corregir los documentos mal fechados, o configurar reglas de coincidencia (`Matching rules`) que asignen una fecha a partir del nombre del archivo.\n\n**Problema 3: se usa la fecha de creación del archivo en su lugar.** Cuando no se encuentra ninguna fecha en el contenido, Paperless-ngx recurre a la fecha de modificación del archivo — algo que puede ser muy engañoso con documentos antiguos escaneados hace poco.\n\n**Solución:** nombrar los archivos de importación con la fecha del documento (`YYYY-MM-DD_nombre-documento.pdf`) — Paperless-ngx detecta ese formato en el nombre del archivo antes de analizar el contenido.",{"type":38,"title":54,"body":55},"Resolución de tiempos de espera en VPS de entrada","En un VPS con 1 o 2 vCPU, el procesamiento OCR de documentos voluminosos puede superar el tiempo de espera predeterminado y dejar el documento en estado «pendiente de procesar» indefinidamente.\n\n**Diagnóstico:** revisa los logs del worker:\n```bash\ndocker compose logs celery --tail=50\n```\nLas líneas `SoftTimeLimitExceeded` confirman un timeout.\n\n**Resolución — cuatro palancas:**\n\n**1. Aumentar el tiempo de espera de las tareas:**\n```bash\nPAPERLESS_WORKER_TIMEOUT=3600  # 1 hora (predeterminado: 1800 s)\n```\n⚠️ El nombre exacto importa: `PAPERLESS_WORKER_TIMEOUT`. Un ajuste mal escrito no lo rechaza Paperless — se **ignora en silencio**, y los timeouts continúan exactamente igual que antes, lo que se lee erróneamente como «el arreglo no funcionó».\n\n**2. Reducir la resolución de importación.** Si escaneas tú mismo los documentos, 200 DPI bastan para un OCR de calidad — 300 DPI duplican el tiempo de procesamiento sin mejora perceptible en texto estándar.\n\n**3. Limitar el procesamiento paralelo:**\n```bash\nPAPERLESS_TASK_WORKERS=1        # tareas en paralelo (predeterminado: 1)\nPAPERLESS_THREADS_PER_WORKER=1  # páginas procesadas en paralelo dentro de UN documento\n```\nSi no se define, `PAPERLESS_THREADS_PER_WORKER` vale `max(floor(n_núcleos \u002F PAPERLESS_TASK_WORKERS), 1)`. La regla upstream que no hay que cruzar: el **producto** `TASK_WORKERS × THREADS_PER_WORKER` no debe superar el número de núcleos, o la instancia se vuelve extremadamente lenta. Muchos workers = muchos documentos en paralelo; muchos hilos = un documento grande procesado más rápido.\nEn un VPS de 2 vCPU, procesar dos documentos a la vez puede provocar timeouts que el mismo volumen tratado en secuencia evitaría.\n\n**4. Optimizar el preprocesado de PDF:**\n```bash\nPAPERLESS_OCR_USER_ARGS={\"optimize\": 1, \"pdfa-image-compression\": \"jpeg\"}\n```\nEsto comprime las imágenes de los PDF antes del procesamiento, reduciendo la carga de memoria y de CPU.",{"type":38,"title":57,"body":58},"Actualizar de 2.x a 3.x","La serie 3.x de Paperless-ngx introduce cambios estructurales que hacen obligatoria la migración en el lugar, y añade condiciones previas que no existían en la rama 2.x.\n\n**Requisito previo que se olvida:** la actualización a la v3 **solo está admitida desde la 2.20.15**. Si corres una versión anterior, actualiza primero a 2.20.15 y solo después salta a la 3.x. Cambiar directamente la etiqueta de la imagen de una 2.14 a una 3.x no es un camino soportado.\n\nLa exportación\u002Fimportación entre versiones (`document_exporter` seguido de `document_importer` en una instancia nueva) **no está soportada**: un export contiene una imagen exacta de la base de datos y no se importa en otra versión. En la práctica, `document_importer` avisa (`Version mismatch: Currently 3.1.x, importing 2.20.15. Continuing, but import may fail.`) y luego falla con `KeyError: 'show_on_dashboard'`, un campo renombrado en la serie 3.x. La única vía segura es dejar que las migraciones se apliquen sobre la base existente.\n\n**Procedimiento recomendado:**\n\n1. Haz una copia de seguridad completa antes de nada (ver la sección dedicada más abajo).\n2. Detén los servicios: `docker compose down`.\n3. Revisa en `docker-compose.env` y en tu `docker-compose.yml` los tres ajustes que la v3 vuelve obligatorios o cambia (abajo).\n4. Apunta la imagen del `docker-compose.yml` a la versión 3.x objetivo y relanza: `docker compose up -d` — las migraciones de Django se aplican solas al arrancar el `webserver`.\n5. Monitoriza los logs: `docker compose logs webserver --tail=100` — una migración que falla muestra el error y bloquea el arranque.\n\n**`PAPERLESS_SECRET_KEY` pasa a ser obligatoria.** Antes existía una clave interna por defecto; en la v3 hay que declararla. Reutilizar el valor anterior conserva las sesiones y los tokens firmados; poner uno nuevo los invalida todos.\n\n**`PAPERLESS_DBENGINE` pasa a ser obligatoria con PostgreSQL o MariaDB.** En la v2 el motor se deducía de la presencia de `PAPERLESS_DBHOST`; en la v3 hay que declararlo, y el valor por defecto es `sqlite`. Los valores aceptados son `sqlite`, `postgresql` y `mariadb` — nada más:\n```yaml\n# v2 (PostgreSQL deducido de PAPERLESS_DBHOST)\nPAPERLESS_DBHOST: db\n# v3 (el motor debe ser explícito)\nPAPERLESS_DBENGINE: postgresql\nPAPERLESS_DBHOST: db\n```\n\n**`PAPERLESS_OCR_MODE=skip` desaparece.** Los valores `skip` y `skip_noarchive` se han eliminado, y una variable eliminada no se honra en silencio: se registra un aviso al arrancar. Conservar el comportamiento de la v2 exige repartir la intención entre dos ajustes ahora independientes:\n```bash\n# v2: saltar el OCR si ya hay texto, pero archivar siempre\nPAPERLESS_OCR_MODE=skip\n# v3: equivalente\nPAPERLESS_OCR_MODE=auto\nPAPERLESS_ARCHIVE_FILE_GENERATION=always\n```\n\n**Incompatibilidad Redis → Valkey.** Desde la v3 el compose oficial trae **Valkey** como broker (`valkey\u002Fvalkey:9-alpine`), no Redis: no es una elección tuya, es lo que te llevas si reemplazas tu compose por la plantilla del proyecto. Si tu volumen de broker lo creó una versión reciente de Redis, Valkey se niega a cargarlo y el contenedor entra en bucle de reinicio con `Can't handle RDB format version 15` (o `13`, según el origen), mientras el `webserver` se queda esperando al broker. La solución es **eliminar el volumen del broker** antes de cambiar: solo contiene tareas en cola, ningún dato persistente crítico.\n```bash\ndocker compose down\ndocker volume rm paperless_redisdata   # el prefijo viene de COMPOSE_PROJECT_NAME\ndocker compose up -d\n```\n\n**El índice de búsqueda se reconstruye solo.** La v3 sustituye Whoosh por Tantivy y el formato es incompatible: el índice se regenera desde cero en el primer arranque (el contenedor ejecuta `document_index reindex --if-needed` en cada inicio), lo que explica un primer arranque más lento. Si tras la actualización la consumición falla con `Schema error: 'An index exists but the schema does not match.'`, fuerza una reconstrucción limpia con `docker compose exec webserver document_index reindex --recreate`. Ojo también con la sintaxis de búsqueda: `note:` pasa a `notes.note:` y `custom_field:` a `custom_fields.value:` — las vistas guardadas con prefijo explícito se migran solas, pero una búsqueda sin prefijo que antes encontraba una nota ya no lo hará.\n\n**Dos cambios de comportamiento que sorprenden.** El historial de tareas se borra durante la actualización, y la v3 ya **no rechaza los duplicados** por defecto: si dependías de ese rechazo, reactívalo con `PAPERLESS_CONSUMER_DELETE_DUPLICATES=true`. Y detrás de un reverse proxy, el control de tasa del login cambió de forma de determinar la IP del cliente: si el inicio de sesión devuelve `403 Forbidden` tras la actualización, declara la cadena con `PAPERLESS_TRUSTED_PROXIES` y, si hace falta, `PAPERLESS_ALLAUTH_TRUSTED_PROXY_COUNT`.\n\n**Sobre MariaDB.** Sigue soportada (`PAPERLESS_DBENGINE=mariadb`), aunque el proyecto recomienda PostgreSQL. Los fallos de migración en Debian 12 que circulan por los foros venían de instalaciones **bare-metal** donde se descomprimió la nueva versión encima de la anterior: los archivos de migración obsoletos que quedan en disco provocan un `NodeNotFoundError` en `manage.py migrate`. El remedio es borrar el árbol de fuentes anterior (`src\u002F`, `static\u002F`) antes de desplegar, no tocar el motor de base de datos — y en un despliegue Docker como el de esta guía, ese escenario no se da.\n\n**Correo tras la actualización.** El comando para forzar la recogida de correo es `mail_fetcher`, sin argumentos; procesa todas las cuentas y reglas configuradas:\n```bash\ndocker compose exec webserver mail_fetcher\n```\nSi un flujo de correo deja de producir documentos después de actualizar, mira primero el error de la tarea en la interfaz: los casos reportados apuntaban al índice de búsqueda (`Schema error`, arriba), no a las credenciales. Comprueba después que la cuenta conserva sus permisos IMAP; si usas un token OAuth, marca la casilla que indica que la contraseña es en realidad un token.",{"type":60,"body":61},"tip","Antes de cualquier actualización importante, prueba el procedimiento en una copia de tu entorno. Con Docker Compose, basta con copiar tu directorio `\u002Fopt\u002Fpaperless` a un segundo VPS, apuntar un subdominio de prueba y aplicar allí la actualización. Después puedes validar que tus documentos, etiquetas y corresponsales están intactos antes de intervenir en producción.",{"type":38,"title":63,"body":64},"Copia de seguridad automática de Paperless-ngx","Paperless-ngx gestiona dos tipos de datos críticos: la base de datos PostgreSQL (metadatos, etiquetas, corresponsales, reglas) y los archivos de documentos. Hay que respaldar los dos — uno sin el otro no restaura nada útil.\n\n**Script de copia de seguridad diaria:**\n```bash\n#!\u002Fbin\u002Fbash\nBACKUP_DIR=\"\u002Fbackups\u002Fpaperless\u002F$(date +%Y%m%d)\"\nmkdir -p \"$BACKUP_DIR\"\n\n# Volcado PostgreSQL\ndocker compose exec -T db pg_dump -U paperless paperless \\\n  | gzip > \"$BACKUP_DIR\u002Fdb.sql.gz\"\n\n# Exportación nativa de Paperless (incluye configuración y documentos)\ndocker compose exec -T webserver document_exporter ..\u002Fexport\ntar -czf \"$BACKUP_DIR\u002Fexport.tar.gz\" \u002Fopt\u002Fpaperless\u002Fexport\u002F\n\n# Rotación — conservar 14 días\nfind \u002Fbackups\u002Fpaperless -maxdepth 1 -type d -mtime +14 -exec rm -rf {} +\n\necho \"Copia de seguridad terminada: $BACKUP_DIR\"\n```\n\nPrograma este script en cron (`0 3 * * *` para las 3 de la madrugada) y verifica que las copias llegan a un almacenamiento externo al VPS (rsync hacia un bucket S3 o hacia otro servidor). El `-T` detrás de `exec` evita el error «the input device is not a TTY» cuando el script corre sin terminal.",{"type":38,"title":66,"body":67},"Actualizaciones y mantenimiento","Paperless-ngx publica versiones con regularidad. La actualización es sencilla con Docker Compose:\n\n```bash\n# Traer la nueva imagen\ndocker compose pull\n\n# Reiniciar los servicios (las migraciones de base de datos se aplican automáticamente)\ndocker compose up -d\n\n# Comprobar que todo está bien\ndocker compose logs webserver --tail=20\n```\n\n**Antes de cada actualización importante:** lee el CHANGELOG en GitHub — las versiones mayores (v2.x → v3.x) pueden exigir pasos de migración adicionales, y a veces una versión intermedia obligatoria. La sección anterior detalla las incompatibilidades conocidas de la serie 3.x.\n\n**Monitorización:** Paperless-ngx **no** expone un endpoint `\u002Fmetrics` propio. Lo que existe es **Flower**, el monitor de tareas de Celery, que se activa definiendo `PAPERLESS_ENABLE_FLOWER`; es Flower quien exporta métricas aprovechables por Prometheus, además de mostrar las tareas en curso, en cola y terminadas. Es el sitio correcto para detectar un procesamiento que se detiene en silencio — el síntoma exacto de un timeout de OCR.","Digitaliza e indexa todos tus documentos","El VPS Cloud de ServOrbit ofrece la CPU, el almacenamiento y el entorno Docker listos para Paperless-ngx, su OCR Tesseract, PostgreSQL y Redis. Convierte tus pilas de papel en un archivo con búsqueda, con copia de seguridad y bajo tu control.","Desplegar Paperless-ngx en un VPS Cloud","\u002Fvps-cloud",[73,91,108],{"id":74,"slug":75,"slugs":76,"title":80,"excerpt":81,"readTime":82,"views":18,"isPinned":19,"publishedAt":83,"updatedAt":84,"category":85,"categories":86,"featuredImage":30,"bgImage":31,"posterImage":88,"relatedSolution":89},71,"alojar-nextcloud-en-su-propio-vps",{"fr":77,"en":78,"ar":79,"es":75},"heberger-nextcloud","hosting-nextcloud-on-your-own-vps","استضافة-nextcloud-على-خادمك-الـvps-الخاص","Alojar Nextcloud en VPS: guía completa NC 34 y seguridad","Despliegue Nextcloud 34.0.2 en su VPS con Docker y Redis. Guía completa: apps ausentes en NC 34.0.0, restricción PostgreSQL oc_filecache_extended y CVE de 2FA.",11,"2026-04-10T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[87],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-nextcloud-poster.svg",{"categorySlug":25,"appSlug":90},"nextcloud",{"id":92,"slug":93,"slugs":94,"title":98,"excerpt":99,"readTime":100,"views":18,"isPinned":19,"publishedAt":101,"updatedAt":84,"category":102,"categories":103,"featuredImage":30,"bgImage":31,"posterImage":105,"relatedSolution":106},72,"alojar-ghost-en-un-vps",{"fr":95,"en":96,"ar":97,"es":93},"heberger-ghost","hosting-ghost-on-your-own-vps","استضافة-ghost-على-خادمك-الـvps-الخاص","Alojar Ghost en un VPS: guía completa 2026","Despliegue Ghost v6 en su VPS con Caddy, MySQL, Ghost CLI y Stripe Tax: instalación, reverse proxy TLS, actualización y errores de arranque frecuentes.",8,"2026-04-09T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[104],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-ghost-poster.svg",{"categorySlug":25,"appSlug":107},"ghost",{"id":109,"slug":110,"slugs":111,"title":115,"excerpt":116,"readTime":117,"views":18,"isPinned":19,"publishedAt":118,"updatedAt":119,"category":120,"categories":121,"featuredImage":30,"bgImage":31,"posterImage":123,"relatedSolution":124},73,"alojar-wordpress-en-un-vps",{"fr":112,"en":113,"ar":114,"es":110},"heberger-wordpress","host-wordpress-on-your-own-vps","استضافة-wordpress-على-خادم-vps-الخاص-بك","Alojar WordPress en su propio VPS","Aloje WordPress en su VPS para un rendimiento y un control máximos: Docker, MariaDB, caché, reverse proxy y SSL.",3,"2026-04-08T00:00:00+00:00","2026-09-08T22:00:02+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[122],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-wordpress-poster.svg",{"categorySlug":25,"appSlug":125},"wordpress",1789665003066]