Por qué alojar Homepage en su VPS
Homepage (gethomepage.dev) es un dashboard estático 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, ya que la página se sirve casi por completo en estático.
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 mínima: menos de 128 MB de RAM, ideal en 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.
- Recarga en caliente de la configuración: no es necesario reiniciar el contenedor tras modificar los archivos YAML.
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.
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: /Homepage relee la configuración en caliente: recargue simplemente la página en el navegador tras cada cambio, sin reiniciar el contenedor.
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: su-token-apiLas claves de API nunca deben escribirse en texto plano en services.yaml si ese archivo está versionado en un repositorio público. Cree un archivo .env junto al docker-compose.yml y referencie los secretos con la notación {{PORTAINER_KEY}} en el YAML — Homepage resuelve estas variables al arrancar.
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 del socket montado 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.
No exponga el socket Docker en modo escritura. El montaje /var/run/docker.sock:/var/run/docker.sock:ro en solo lectura es suficiente para Homepage. Nunca conceda escritura: un contenedor comprometido con acceso de escritura al socket puede crear nuevos contenedores con volúmenes arbitrarios en el host.
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 Watchtower configurado para vigilar únicamente el contenedor homepage.
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 HOMEPAGE_ALLOWED_HOSTS preconfigurado.
El template también incluye Caddy preinstalado con la configuración de reverse proxy mínima, de modo que su dashboard es accesible por HTTPS en cuanto termina el aprovisionamiento. Solo le queda declarar su subdominio y personalizar 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.