Por qué alojar Homepage en su VPS
Homepage (gethomepage.dev) es un dashboard escrito en Next.js, concebido para ser la página de inicio de su infraestructura. A diferencia de las soluciones SaaS de tipo start page, todo permanece bajo su control: la configuración vive en simples archivos YAML, los widgets consultan sus propios servicios (Proxmox, qBittorrent, Sonarr, Pi-hole…) y ningún dato pasa por una nube externa. Alojarlo en un VPS lo hace accesible desde cualquier parte y cualquier navegador.
Es también el punto de entrada ideal para pilotar una stack Docker en crecimiento: un solo archivo services.yaml basta para cartografiar decenas de contenedores. Conforme su infraestructura gana en complejidad — múltiples aplicaciones, múltiples subdominios, servicios en varios VPS — Homepage se convierte en el único cockpit desde el que comprueba el estado de cada uno de un vistazo, sin abrir cinco pestañas.
Los beneficios concretos de un Homepage autoalojado
- Configuración en YAML versionable en Git: reconstruya su dashboard idéntico en segundos tras una reinstalación.
- Widgets nativos para más de 100 servicios (Docker, Proxmox, Plex, Grafana, AdGuard, Pi-hole, Portainer…) con estadísticas en tiempo real.
- Detección automática de los contenedores Docker mediante etiquetas, sin escribir las URL a mano.
- Huella de memoria ligera, adecuada para un VPS pequeño que ya ejecuta otros contenedores.
- Sin telemetría ni dependencia de la nube: su página de inicio sigue siendo 100% privada, incluso ante una interrupción de red.
- Personalización total del tema, fondos de pantalla, barra de búsqueda y grupos de servicios.
- Configuración declarativa: un cambio en los YAML se comprueba recargando la página, y basta un
docker compose restart homepagesi no aparece.
Requisitos técnicos
Homepage es muy ligero. Un VPS con 1 vCPU y 512 MB de RAM es suficiente en la práctica, incluso sumando otros contenedores. Cuente con unos 300 MB de espacio en disco para la imagen y la configuración. Necesitará:
- Docker y Docker Compose v2 instalados (verifique con docker compose version).
- Un nombre de dominio o subdominio apuntando a la IP pública del VPS, por ejemplo home.sudominio.com.
- Un reverse proxy — Caddy o Traefik — para gestionar el HTTPS y el certificado Let's Encrypt.
- El socket Docker /var/run/docker.sock montado en solo lectura si quiere usar los widgets Docker y el descubrimiento automático — o, más seguro, un proxy de socket (vea la sección de seguridad).
Si parte de un VPS limpio, instale Docker según la documentación oficial, luego active el arranque automático con systemctl enable --now docker.
Desplegar Homepage con Docker en 5 pasos
Preparar la estructura de carpetas
Conéctese por SSH a su VPS y cree las carpetas:
mkdir -p ~/homepage/config cd ~/homepageLos archivos
services.yaml,widgets.yaml,settings.yamlybookmarks.yamlse generarán automáticamente en el primer arranque dentro de esta carpetaconfig/. También puede crearlos vacíos de antemano para controlar su contenido desde el inicio.Escribir el docker-compose.yml
Cree
~/homepage/docker-compose.ymlcon el siguiente contenido:services: homepage: image: ghcr.io/gethomepage/homepage:latest container_name: homepage restart: unless-stopped ports: - 127.0.0.1:3000:3000 volumes: - ./config:/app/config - /var/run/docker.sock:/var/run/docker.sock:ro environment: - HOMEPAGE_ALLOWED_HOSTS=home.sudominio.comNote el binding
127.0.0.1:3000:3000: el puerto solo es accesible desde el loopback local, nunca expuesto directamente en la IP pública. El reverse proxy es la única puerta de entrada.Arrancar el contenedor
Inicie Homepage en segundo plano y compruebe los logs:
docker compose up -d docker compose logs -fHomepage escucha por defecto en el puerto
3000. Pruébelo localmente antes de abrir el reverse proxy:curl http://localhost:3000Si la respuesta es un documento HTML, el contenedor funciona.
Conectar el reverse proxy y el SSL
Con Caddy — añada a su
Caddyfile:home.sudominio.com { reverse_proxy localhost:3000 }Caddy genera y renueva el certificado Let's Encrypt automáticamente. Recargue:
systemctl reload caddy.Con Traefik — añada etiquetas al servicio en
docker-compose.yml:labels: - traefik.enable=true - traefik.http.routers.homepage.rule=Host(`home.sudominio.com`) - traefik.http.routers.homepage.entrypoints=websecure - traefik.http.routers.homepage.tls.certresolver=letsencryptEn ambos casos, verifique que su DNS apunte a la IP del VPS antes de intentar el challenge ACME.
Personalizar servicios y widgets
Edite
config/services.yamlpara agrupar sus aplicaciones:- Herramientas: - Portainer: href: https://portainer.sudominio.com description: Gestión de contenedores icon: portainer.pngAñada widgets de recursos del sistema en
config/widgets.yaml:- resources: cpu: true memory: true disk: /Recargue la página en el navegador tras cada cambio; si un cambio no aparece (sobre todo en
settings.yaml), reinicie el contenedor condocker compose restart homepage.
Configurar los widgets de servicios
Los widgets son el valor añadido de Homepage sobre una simple lista de enlaces. Cada widget consulta la API de su servicio objetivo y muestra métricas en tiempo real directamente en la tarjeta.
Para activar un widget, añada un bloque widget bajo la declaración del servicio en services.yaml. Ejemplo con Portainer:
- Portainer:
href: https://portainer.sudominio.com
widget:
type: portainer
url: https://portainer.sudominio.com
env: 1
key: {{HOMEPAGE_VAR_PORTAINER_KEY}}Las claves de API nunca deben escribirse en texto plano en services.yaml si ese archivo está versionado en un repositorio público. Páselas al contenedor como variables de entorno con el prefijo HOMEPAGE_VAR_, por ejemplo desde un archivo .env cargado con env_file: .env en el docker-compose.yml, y referéncielas con la notación {{HOMEPAGE_VAR_PORTAINER_KEY}} en el YAML: Homepage sustituye cada {{HOMEPAGE_VAR_…}} por el valor de la variable.
Otros widgets muy utilizados: Proxmox (CPU, RAM, almacenamiento del clúster), Pi-hole (peticiones bloqueadas, clientes activos), Sonarr / Radarr (descargas en curso), Grafana (paneles embebidos), Uptime Kuma (estado de cada monitor). La lista completa está en la documentación oficial de gethomepage.dev.
Active el descubrimiento automático añadiendo las etiquetas homepage.group, homepage.name, homepage.href y homepage.icon directamente en sus otros contenedores Docker. Homepage los detecta a través de la instancia Docker declarada en config/docker.yaml y los añade al dashboard sin tocar services.yaml. Combinado con un archivo .env para guardar las claves de API de los widgets (nunca en claro en el YAML versionado), obtiene un dashboard que se actualiza solo con cada nuevo despliegue: ponga las etiquetas una vez, Homepage las lee continuamente.
Proteger el acceso a su dashboard
Un dashboard que lista todos sus servicios es un objetivo atractivo. Dos medidas básicas son necesarias antes de exponer Homepage en Internet.
Restringir el acceso por IP o autenticación. Si Homepage es solo para usted, la solución más sencilla es permitir solo su dirección IP en la configuración del reverse proxy. Con Caddy:
home.sudominio.com {
@allowed remote_ip 203.0.113.42
handle @allowed {
reverse_proxy localhost:3000
}
respond 403
}Si accede al dashboard desde varias redes, prefiera la autenticación HTTP básica o un middleware de autenticación como Authelia o Authentik delante de Homepage. Desde la v2.0, Homepage ofrece también su propia puerta de autenticación, por contraseña u OIDC (HOMEPAGE_AUTH_ENABLED=true).
No entregue el socket Docker en bruto. El :ro del montaje /var/run/docker.sock:/var/run/docker.sock:ro solo protege el archivo: la API de Docker sigue plenamente accesible a través de él, y un contenedor comprometido puede crear nuevos contenedores con volúmenes arbitrarios en el host. La documentación de Homepage recomienda un proxy de socket (docker-socket-proxy) que solo permita lecturas: CONTAINERS=1 y POST=0, puerto enlazado a 127.0.0.1, y luego host: dockerproxy y port: 2375 en config/docker.yaml.
Actualice la imagen con regularidad. Use docker compose pull && docker compose up -d para actualizar Homepage en cuanto haya una nueva imagen disponible. Puede automatizar esto con una tarea cron. Watchtower, recomendado durante mucho tiempo para ello, ya no se mantiene: su repositorio de GitHub está archivado.
Copias de seguridad y restauración de la configuración
Toda la configuración de Homepage vive en la carpeta config/: es el único directorio que hay que respaldar. Sin base de datos, sin estado persistente fuera de estos archivos YAML.
Versionar en Git. El método más fiable es inicializar un repositorio Git en ~/homepage/config/ y hacer commit tras cada cambio. Si su configuración contiene claves de API (incluso mediante variables), añada un .gitignore para excluir el archivo .env y versionar solo los YAML.
Copia de seguridad incremental en almacenamiento de objetos. Con restic y un bucket compatible con S3 (Garage, MinIO, Backblaze B2), programe una copia de seguridad diaria desde un cron:
restic -r s3:s3.example.com/mi-bucket/homepage backup ~/homepage/configRestauración. En caso de pérdida del VPS, recree el contenedor, restaure la carpeta config/ desde la copia de seguridad y ejecute docker compose up -d. Homepage estará operativo en menos de un minuto — una de las ventajas concretas de una configuración 100% declarativa en YAML.
Instalar Homepage desde el Marketplace de ServOrbit
Si prefiere no configurar Docker manualmente, el Marketplace de ServOrbit ofrece Homepage como instalación guiada. Unos pocos clics desde su panel de cliente aprovisionan un VPS con Homepage listo para usar: imagen oficial, puerto enlazado en loopback y volumen de configuración persistente.
El template no instala reverse proxy: declare su subdominio, conecte Caddy o Traefik como se describe más arriba para el HTTPS y restrinja HOMEPAGE_ALLOWED_HOSTS a ese subdominio, ya que la receta lo entrega abierto a todos los hosts (*). Después, personalice los archivos YAML en config/.
Encuentre la ficha completa, los requisitos mínimos y el botón de instalación en la página dedicada del Marketplace.