Tutorial

Autoalojamiento

Alojar Homepage en su propio VPS

Homepage es un panel de control autoalojado que centraliza todos sus servicios, widgets y enlaces favoritos en una sola página. Desplegarlo en su propio VPS le da una página de inicio totalmente personalizable, accesible desde cualquier navegador, sin depender de un servicio externo. Esta guía cubre la instalación completa con Docker, la configuración avanzada de widgets, la seguridad y la copia de seguridad.

8 min de lectura5 pasos
Contenido· Por qué alojar Homepage en su VPS1/8
  1. 01Por qué alojar Homepage en su VPS
  2. 02Los beneficios concretos de un Homepage autoalojado
  3. 03Requisitos técnicos
  4. 04Desplegar Homepage con Docker en 5 pasos
  5. 05Configurar los widgets de servicios
  6. 06Proteger el acceso a su dashboard
  7. 07Copias de seguridad y restauración de la configuración
  8. 08Instalar Homepage desde el Marketplace de ServOrbit

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 homepage si 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

  1. Preparar la estructura de carpetas

    Conéctese por SSH a su VPS y cree las carpetas:

    mkdir -p ~/homepage/config
    cd ~/homepage

    Los archivos services.yaml, widgets.yaml, settings.yaml y bookmarks.yaml se generarán automáticamente en el primer arranque dentro de esta carpeta config/. También puede crearlos vacíos de antemano para controlar su contenido desde el inicio.

  2. Escribir el docker-compose.yml

    Cree ~/homepage/docker-compose.yml con 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.com

    Note 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.

  3. Arrancar el contenedor

    Inicie Homepage en segundo plano y compruebe los logs:

    docker compose up -d
    docker compose logs -f

    Homepage escucha por defecto en el puerto 3000. Pruébelo localmente antes de abrir el reverse proxy:

    curl http://localhost:3000

    Si la respuesta es un documento HTML, el contenedor funciona.

  4. 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=letsencrypt

    En ambos casos, verifique que su DNS apunte a la IP del VPS antes de intentar el challenge ACME.

  5. Personalizar servicios y widgets

    Edite config/services.yaml para agrupar sus aplicaciones:

    - Herramientas:
        - Portainer:
            href: https://portainer.sudominio.com
            description: Gestión de contenedores
            icon: portainer.png

    Añ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 con docker 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/config

Restauració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.

Instalar Homepage en un clic

Despliegue Homepage en un VPS Cloud de ServOrbit con una plantilla Docker preconfigurada. SSD, Docker listo para usar y ancho de banda generoso para servir su página de inicio.