[{"data":1,"prerenderedAt":198},["ShallowReactive",2],{"seo-verification":3,"blog-centralizar-autenticacion-con-authentik-en-vps-ma-es":6,"promo-bar-likely":197},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-centralizar-autenticacion-con-authentik-en-vps-ma-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":17,"isPinned":18,"noindex":18,"publishedAt":19,"updatedAt":20,"category":21,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":35,"sections":36,"ctaTitle":136,"ctaBody":137,"ctaButton":138,"ctaUrl":139,"relatedPosts":140},111,"centralizar-autenticacion-con-authentik-en-vps",{"fr":12,"en":13,"ar":14,"es":10},"sso-authentik-vps","centralizing-authentication-with-authentik-on-vps","مركزة-المصادقة-باستخدام-authentik-على-خادم-vps","Centralizar la autenticación con Authentik en VPS","Centralice la autenticación de todas sus apps con Authentik autoalojado en un VPS: SSO, MFA y forward auth con Docker Compose.",9,false,"2026-03-01T00:00:00+00:00","2026-10-31T01:54:10+00:00",{"id":22,"name":23,"slug":24,"color":25,"icon":26},8,"Seguridad y monitorización","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[28],{"id":22,"name":23,"slug":24,"color":25,"icon":26},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fsso-authentik-vps-poster.svg",{"categorySlug":33,"appSlug":34},"securite","authentik","Gestionar una contraseña por aplicación no escala en una agencia ni en un homelab serio. Authentik es un proveedor de identidad open source que centraliza el SSO, el MFA y la gestión de los usuarios. Desplegado en su VPS, se convierte en el punto de autenticación único de todo su ecosistema autoalojado.",[37,41,51,54,63,85,88,103,106,115,118,121,124,133],{"type":38,"title":39,"body":40},"h2","Por qué centralizar la autenticación en su VPS","Cuando acumula herramientas autoalojadas (Grafana, Nextcloud, Gitea, un dashboard interno), cada una aporta su propia base de usuarios y su propia política de contraseñas. Es una pesadilla de mantener y una superficie de ataque multiplicada. Authentik lo resuelve haciendo de proveedor de identidad (IdP): admite OAuth2\u002FOIDC, SAML, LDAP y, sobre todo, el forward auth, que permite proteger cualquier aplicación detrás de un reverse proxy, incluso aquellas sin ninguna noción de login. El autoalojamiento en un VPS garantiza que sus credenciales nunca pasen por un servicio de terceros y que usted siga controlando el árbol de usuarios y las políticas MFA.",{"type":42,"title":43,"items":44},"ul","Lo que gana con Authentik",[45,46,47,48,49,50],"Un único conjunto de credenciales para todas sus aplicaciones, con cierre de sesión centralizado.","MFA (TOTP, WebAuthn\u002Fllaves FIDO2, códigos de respaldo) aplicado de forma uniforme mediante políticas.","Forward auth para proteger apps \"sin login\", imposible con un IdP clásico.","Flows totalmente personalizables (registro, recuperación, captcha, condiciones de acceso).","Conectores OAuth2\u002FOIDC, SAML y LDAP para integrar tanto apps modernas como heredadas.","Aprovisionamiento y revocación de accesos inmediatos cuando un colaborador se va.",{"type":38,"title":52,"body":53},"Requisitos con cifras antes de empezar","La documentación oficial de Authentik pide como mínimo 2 núcleos de CPU y 2 GB de RAM, con Docker Compose v2 (o Podman). En un VPS real recomendamos 2 vCPU y 4 GB de RAM: el servidor, el worker y PostgreSQL comparten la misma máquina, y con 2 GB no queda margen en cuanto se suma un pico de conexiones o un outpost. Prevea también unos veinte gigabytes de disco libre para imágenes, base de datos y algunas copias locales (estimación orientativa, no una cifra oficial). Authentik es una guía proporcionada sobre una plantilla VPS: ServOrbit no la soporta, usted conserva su administración.",{"type":42,"title":55,"items":56},"Lista de control antes del primer docker compose up",[57,58,59,60,61,62],"Un VPS Linux de 64 bits con Docker Engine y el plugin Compose v2: 2 vCPU y 4 GB de RAM recomendados, 2 núcleos y 2 GB como mínimo oficial estricto.","Un subdominio dedicado, por ejemplo `auth.example.com`, con un registro A (y AAAA si tiene IPv6) hacia la IP del VPS.","Los puertos 80 y 443 abiertos hacia el reverse proxy; los puertos 9000 y 9443 del contenedor server nunca expuestos públicamente.","Un reverse proxy (nginx, Caddy o Traefik) capaz de obtener un certificado de Let's Encrypt.","Una forma de recuperar la cuenta de administrador si pierde su segundo factor: códigos de respaldo guardados en un gestor de contraseñas.","Un lugar de copia de seguridad fuera del VPS.",{"type":64,"title":65,"steps":66},"steps","Desplegar Authentik con Docker Compose",[67,70,73,76,79,82],{"title":68,"body":69},"Crear la carpeta y obtener el compose oficial","Cree una carpeta dedicada (`mkdir -p \u002Fopt\u002Fauthentik && cd \u002Fopt\u002Fauthentik`) y descargue el archivo de referencia con `wget https:\u002F\u002Fdocs.goauthentik.io\u002Fcompose.yml`. El archivo actual declara tres servicios: `postgresql`, `server` y `worker`. Referencia la versión disponible en el momento de la descarga, así que hay que volver a descargarlo en cada actualización.",{"title":71,"body":72},"Generar los secretos en el archivo .env","Ejecute `echo \"PG_PASS=$(openssl rand -base64 36 | tr -d '\\n')\" >> .env` y luego `echo \"AUTHENTIK_SECRET_KEY=$(openssl rand -base64 60 | tr -d '\\n')\" >> .env`. La documentación indica que las contraseñas de PostgreSQL de más de 99 caracteres no son compatibles. Proteja el archivo (`chmod 600 .env`), no lo versione nunca y no reutilice jamás una clave de ejemplo.",{"title":74,"body":75},"Vincular los puertos solo a localhost","Por defecto, el compose publica 9000 (HTTP) y 9443 (HTTPS) en todas las interfaces. Añada a `.env` las líneas `COMPOSE_PORT_HTTP=127.0.0.1:9000` y `COMPOSE_PORT_HTTPS=127.0.0.1:9443`: solo su reverse proxy local podrá alcanzarlos y el tráfico público pasará obligatoriamente por HTTPS.",{"title":77,"body":78},"Arrancar la stack","Ejecute `docker compose pull` y luego `docker compose up -d`. Compruebe con `docker compose ps` que los tres contenedores están arrancados y que `postgresql` está `healthy`, y siga la inicialización con `docker compose logs -f server`. Las migraciones de la base pueden tardar unos minutos en el primer arranque.",{"title":80,"body":81},"Finalizar la instalación mediante \u002Fif\u002Fflow\u002Finitial-setup\u002F","En el primer arranque, vaya a `https:\u002F\u002Fauth.example.com\u002Fif\u002Fflow\u002Finitial-setup\u002F` para definir la contraseña de la cuenta `akadmin`. Es su superadministrador: protéjalo de inmediato con MFA y cree después una cuenta de administrador nominativa para el uso diario.",{"title":83,"body":84},"Crear un provider y una aplicación","En el admin, cree un Provider (OIDC para una app moderna, o Proxy para forward auth) y después la Application asociada. Para OIDC, recupere el `client_id` \u002F `client_secret` y la URL `.well-known\u002Fopenid-configuration` para pegarlos en la app cliente.",{"type":38,"title":86,"body":87},"Reverse proxy y TLS","Authentik debe servirse obligatoriamente por HTTPS para que funcionen las cookies de sesión y WebAuthn. Con nginx, el vhost de `auth.example.com` hace un `proxy_pass http:\u002F\u002F127.0.0.1:9000;` y transmite las cabeceras `Host`, `X-Forwarded-For` y `X-Forwarded-Proto`, además de `Upgrade` y `Connection` para los WebSockets. El certificado se obtiene con `certbot --nginx -d auth.example.com`; Caddy y Traefik lo hacen automáticamente. Si el dominio pasa por Cloudflare en modo proxificado, ajuste el modo SSL\u002FTLS de la zona a Full (strict): en Flexible, nginx redirige HTTP a HTTPS y se produce un bucle de redirección infinito.",{"type":64,"title":89,"steps":90},"Proteger una aplicación con forward auth en nginx",[91,94,97,100],{"title":92,"body":93},"Crear el Proxy Provider","Cree un Proxy Provider en modo forward auth para una sola aplicación, con la URL pública de la app (`https:\u002F\u002Fapp.example.com`) como External host. Asócielo a una Application y luego al outpost integrado en la sección Outposts.",{"title":95,"body":96},"Conectar auth_request en el vhost de la app","En `location \u002F`, añada `auth_request \u002Foutpost.goauthentik.io\u002Fauth\u002Fnginx;` y luego `error_page 401 = @goauthentik_proxy_signin;`. Copie también las cookies del outpost con `auth_request_set $auth_cookie $upstream_http_set_cookie;` y `add_header Set-Cookie $auth_cookie;`. Copie el bloque completo de la página de nginx de la documentación correspondiente a su versión.",{"title":98,"body":99},"Exponer la ruta del outpost sin autenticación","Añada una `location \u002Foutpost.goauthentik.io` que haga un `proxy_pass` a `http:\u002F\u002F127.0.0.1:9000`, con `Host` fijado al host original, `X-Original-URL` a la URL completa, `proxy_pass_request_body off;` y un `Content-Length` vacío. Esta ruta debe seguir accesible sin login; de lo contrario la redirección nunca funciona.",{"title":101,"body":102},"Gestionar la redirección y las cabeceras grandes","Declare una `location @goauthentik_proxy_signin` marcada como `internal` que devuelva un 302 hacia `\u002Foutpost.goauthentik.io\u002Fstart?rd=` seguido de la URL de origen. Si ve el error \"upstream sent too big header\", añada `proxy_buffers 8 16k;` y `proxy_buffer_size 32k;`. Las identidades llegan después a la app en las cabeceras `X-authentik-username`, `X-authentik-groups` y `X-authentik-email`.",{"type":38,"title":104,"body":105},"Copia de seguridad y restauración de Authentik","La base de datos PostgreSQL es la parte más importante de una copia: contiene usuarios, políticas, flows y configuración. Con los nombres por defecto del compose (usuario y base `authentik`), un volcado se hace con `docker compose exec -T postgresql pg_dump -U authentik -d authentik -Fc > \u002Fvar\u002Fbackups\u002Fauthentik-$(date +%F).dump`. Para restaurar, detenga primero los contenedores de la aplicación con `docker compose stop server worker`, luego ejecute `docker compose exec -T postgresql pg_restore -U authentik -d authentik --clean --if-exists \u003C archivo.dump` y reinicie. El orden recomendado por la documentación es: base primero, verificación, directorios estáticos y después arranque. Una copia nunca restaurada es solo una hipótesis: pruebe en una máquina desechable.",{"type":42,"title":107,"items":108},"Qué respaldar",[109,110,111,112,113,114],"La base PostgreSQL: indispensable, sin ella Authentik no puede volver a ponerse en marcha.","El directorio `.\u002Fdata` (iconos, fondos de flows, archivos subidos, informes CSV), salvo que use almacenamiento S3.","El directorio `.\u002Fcerts` si se apoya en certificados del sistema de archivos; los certificados ya importados están en la base.","El directorio `.\u002Fcustom-templates` si ha cambiado la apariencia, y los blueprints personalizados si los hay.","El archivo `.env` (clave secreta y contraseña de PostgreSQL), cifrado y guardado fuera del VPS.","Una copia de los volcados en un almacenamiento remoto, nunca solo en la máquina que aloja la base.",{"type":38,"title":116,"body":117},"Actualizar sin romper el SSO","Authentik no admite volver atrás: respalde la base antes de cada actualización y lea las notas de versión del destino. Actualice de forma secuencial, pasando por el último parche de cada versión mayor.menor sin saltarse ninguna. Vuelva a descargar el compose (`wget -O compose.yml https:\u002F\u002Fdocs.goauthentik.io\u002Fcompose.yml`), luego `docker compose pull` y `docker compose up -d`. Actualice todos los outposts a la vez: su versión debe coincidir con la del servidor. Después compruebe la versión en Dashboards > Overview; si no ha cambiado y los logs contienen `migration inconsistency`, restaure la copia y suba versión por versión.",{"type":38,"title":119,"body":120},"Redis ya no forma parte de la stack","Muchos tutoriales antiguos, incluida la primera versión de este artículo, describen una stack de cuatro contenedores con Redis. Las notas de la versión 2025.10 indican que Authentik ya no usa Redis en absoluto: la caché, el outpost integrado y los WebSockets pasaron a PostgreSQL, y las tareas ya lo habían hecho en la 2025.8. El compose actual solo contiene `postgresql`, `server` y `worker`. Dos consecuencias: cuente con un 50 % más de conexiones a PostgreSQL aproximadamente y, si su PostgreSQL exige TLS, Authentik requiere TLS 1.3 o la extensión Extended Master Secret. Elimine los ajustes de Redis que queden en su configuración.",{"type":38,"title":122,"body":123},"Solución de problemas: bucle de reinicio con AUTHENTIK_POSTGRESQL__USE_POOL","Síntoma reportado en la issue 14320 de goauthentik\u002Fauthentik, abierta en mayo de 2025 sobre la versión 2025.4.0: con `AUTHENTIK_POSTGRESQL__USE_POOL=true`, el servidor se reinicia en bucle, con errores SSL como \"decryption failed or bad record mac\" o \"SSL SYSCALL error: EOF detected\", y después un worker de gunicorn que sale con código 3 (\"Worker failed to boot\"). La 2025.4.1, publicada en mayo de 2025, desactivó la opción por precaución, al no haber encontrado la causa. Estado real de la issue leída el 30 de octubre de 2026: sigue abierta, etiquetada como bug confirmado, sin PR de corrección vinculada, con un hito 2026.11.0 marcado como Required desde el 23 de octubre de 2026. Hipótesis de un mantenedor: el contexto SSL asíncrono compartido entre hilos, aunque no es thread-safe. Pista reportada, no oficial: un usuario indicó en septiembre de 2026 que `AUTHENTIK_WEB__WORKERS=1` y `AUTHENTIK_WEB__THREADS=1` eliminaban el problema; según las pruebas de un mantenedor, 1 worker y 1 hilo funcionan, y 2 o más workers lo reproducen. No es una corrección ni una garantía, y limita la capacidad de la interfaz. Lo más seguro es no activar el pool (elimine la variable de `.env`) y releer la issue antes de cualquier actualización.",{"type":42,"title":125,"items":126},"Otras averías frecuentes",[127,128,129,130,131,132],"Bucle de redirección tras Cloudflare: el modo SSL\u002FTLS de la zona está en Flexible; pase a Full (strict) y compruebe que se transmite `X-Forwarded-Proto`.","WebAuthn o cookies rechazados: la interfaz se sirve por HTTP o bajo otro nombre de host; imponga HTTPS en el dominio exacto de Authentik.","Error 502 en la app protegida: busque \"upstream sent too big header\" en los logs de nginx y aumente `proxy_buffer_size`.","`server` y `worker` no arrancan: `postgresql` no está `healthy`; lea `docker compose logs postgresql` y recuerde que `PG_PASS` y `AUTHENTIK_SECRET_KEY` son obligatorios.","Outpost inalcanzable tras una actualización: su versión ya no coincide con la del servidor; actualícelo.","Contenedores terminados sin mensaje: con 2 GB de RAM actúa el OOM killer; compruébelo con `dmesg | grep -i oom` y pase a 4 GB.",{"type":134,"body":135},"tip","Active un Outpost integrado y aproveche los \"property mappings\" para inyectar cabeceras (`X-authentik-username`, `X-authentik-groups`) hacia sus aplicaciones con forward auth: muchas apps (Grafana, por ejemplo) saben leer estas cabeceras para aprovisionar usuarios y asignar roles automáticamente. Así obtiene no solo SSO, sino también un mapeo de grupos a roles totalmente automatizado, sin configuración manual en cada herramienta.","Centralice sus accesos en su propio VPS","El VPS Cloud de ServOrbit con plantilla Docker preconfigurada ofrece la RAM y el almacenamiento necesarios para la stack Authentik (servidor, worker, PostgreSQL, Redis), lista para recibir sus aplicaciones.","Desplegar mi VPS Authentik","\u002Fvps-cloud",[141,160,179],{"id":142,"slug":143,"slugs":144,"title":148,"excerpt":149,"readTime":22,"views":150,"isPinned":18,"noindex":18,"publishedAt":151,"updatedAt":152,"category":153,"categories":154,"featuredImage":29,"bgImage":30,"posterImage":156,"relatedSolution":157},105,"supervisar-vps-con-uptime-kuma",{"fr":145,"en":146,"ar":147,"es":143},"superviser-vps-uptime-kuma","monitoring-your-vps-with-uptime-kuma","مراقبة-خادمك-الافتراضي-vps-باستخدام-uptime-kuma","Supervisar su VPS con Uptime Kuma","Despliegue Uptime Kuma en su VPS para supervisar sus sitios y servicios en self-hosted, con alertas y página de estado pública.",0,"2026-03-07T00:00:00+00:00","2026-11-09T20:55:19+00:00",{"id":22,"name":23,"slug":24,"color":25,"icon":26},[155],{"id":22,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fsuperviser-vps-uptime-kuma-poster.svg",{"categorySlug":158,"appSlug":159},"monitorizacion-observabilidad","uptime-kuma",{"id":161,"slug":162,"slugs":163,"title":167,"excerpt":168,"readTime":169,"views":170,"isPinned":18,"noindex":18,"publishedAt":171,"updatedAt":172,"category":173,"categories":174,"featuredImage":29,"bgImage":30,"posterImage":176,"relatedSolution":177},106,"monitorizacion-vps-grafana-prometheus",{"fr":164,"en":165,"ar":166,"es":162},"monitoring-vps-grafana-prometheus","vps-monitoring-with-grafana-and-prometheus","مراقبة-الخادم-الافتراضي-vps-باستخدام-grafana-و-prometheus","Monitorización de VPS con Grafana y Prometheus","Despliegue Prometheus 3.x, Grafana 13.x, Node Exporter y Alertmanager en su VPS con Docker Compose. Paneles, alertas y bastionado.",11,1,"2026-03-06T00:00:00+00:00","2026-10-05T14:05:27+00:00",{"id":22,"name":23,"slug":24,"color":25,"icon":26},[175],{"id":22,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fmonitoring-vps-grafana-prometheus-poster.svg",{"categorySlug":158,"appSlug":178},"grafana",{"id":180,"slug":181,"slugs":182,"title":186,"excerpt":187,"readTime":188,"views":170,"isPinned":18,"noindex":18,"publishedAt":189,"updatedAt":190,"category":191,"categories":192,"featuredImage":29,"bgImage":30,"posterImage":194,"relatedSolution":195},107,"monitorizar-vps-en-tiempo-real-con-netdata",{"fr":183,"en":184,"ar":185,"es":181},"monitorer-vps-netdata","monitor-your-vps-in-real-time-with-netdata","راقب-خادمك-الافتراضي-vps-في-الوقت-الفعلي-باستخدام-netdata","Monitorizar su VPS en tiempo real con Netdata","Instale Netdata en su VPS para una monitorización en tiempo real por segundo: miles de métricas, cero configuración y alertas incluidas.",3,"2026-03-05T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":22,"name":23,"slug":24,"color":25,"icon":26},[193],{"id":22,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fmonitorer-vps-netdata-poster.svg",{"categorySlug":158,"appSlug":196},"netdata",true,1794270563705]