feat(homepage): añadir stack de dashboard del homelab

Dashboard centralizado con widgets de estado de servicios, integración
con Docker para mostrar contenedores y acceso SSO vía Authentik.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Eduardo David Paredes Vara
2026-05-25 05:49:12 +00:00
parent 49a4cfd510
commit 26898ac1fe
3 changed files with 83 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
# Homepage
Stack para desplegar [Homepage](https://gethomepage.dev/) detrás de Traefik como dashboard principal en `www.sherlockhomeless.net`.
## 🚀 Despliegue en Portainer
1. Ve a **Stacks** → **Add stack**
2. Nombre: `homepage`
3. Selecciona **Repository** o **Git repository**
4. Configura:
- Repository URL: `<tu-repositorio>`
- Repository reference: `main`
- Compose path: `homepage/docker-compose.yml`
5. Copia `homepage/stack.env` a `homepage/.env` y carga `homepage/.env` como archivo de variables de entorno
6. Haz clic en **Deploy the stack**
## ⚙️ Variables importantes
Edita `homepage/.env`:
```env
HOMEPAGE_DOMAIN=www.sherlockhomeless.net
HOMEPAGE_ALLOWED_HOSTS=www.sherlockhomeless.net
HOMEPAGE_CONFIG_PATH=/opt/homepage/config
TRAEFIK_AUTH_MIDDLEWARE=ths-authentik@docker
```
## 📁 Configuración
Crea el directorio de configuración en el host antes del primer arranque:
```bash
mkdir -p /opt/homepage/config
```
Homepage leerá su configuración desde `/opt/homepage/config` y expondrá la UI interna en el puerto `3000`, publicado externamente a través de Traefik y protegido con Authentik mediante `ths-authentik@docker`.
+36
View File
@@ -0,0 +1,36 @@
services:
homepage:
image: ${HOMEPAGE_IMAGE}
pull_policy: always
container_name: homepage
restart: unless-stopped
environment:
TZ: ${TZ}
HOMEPAGE_ALLOWED_HOSTS: ${HOMEPAGE_ALLOWED_HOSTS}
volumes:
- ${HOMEPAGE_CONFIG_PATH}:/app/config:Z
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- proxy
labels:
traefik.enable: "true"
traefik.docker.network: "${TRAEFIK_DOCKER_NETWORK}"
traefik.http.routers.homepage.rule: "Host(`${HOMEPAGE_DOMAIN}`)"
traefik.http.routers.homepage.entrypoints: "${TRAEFIK_ENTRYPOINT_SECURE}"
traefik.http.routers.homepage.tls: "true"
traefik.http.routers.homepage.tls.certresolver: "${TRAEFIK_CERTRESOLVER}"
traefik.http.routers.homepage.middlewares: "crowdsec-bouncer@file,${TRAEFIK_AUTH_MIDDLEWARE}"
traefik.http.routers.homepage-www-redirect.rule: "Host(`sherlockhomeless.net`)"
traefik.http.routers.homepage-www-redirect.entrypoints: "${TRAEFIK_ENTRYPOINT_SECURE}"
traefik.http.routers.homepage-www-redirect.tls: "true"
traefik.http.routers.homepage-www-redirect.tls.certresolver: "${TRAEFIK_CERTRESOLVER}"
traefik.http.routers.homepage-www-redirect.middlewares: "homepage-apex-to-www"
traefik.http.routers.homepage-www-redirect.service: "noop@internal"
traefik.http.middlewares.homepage-apex-to-www.redirectregex.permanent: "true"
traefik.http.middlewares.homepage-apex-to-www.redirectregex.regex: "^https://sherlockhomeless\\.net(:443)?/?(.*)"
traefik.http.middlewares.homepage-apex-to-www.redirectregex.replacement: "https://www.sherlockhomeless.net/$${2}"
traefik.http.services.homepage.loadbalancer.server.port: "3000"
networks:
proxy:
external: true
+11
View File
@@ -0,0 +1,11 @@
TZ=Europe/Madrid
HOMEPAGE_IMAGE=ghcr.io/gethomepage/homepage:latest
HOMEPAGE_DOMAIN=app.example.com
HOMEPAGE_ALLOWED_HOSTS=app.example.com
HOMEPAGE_CONFIG_PATH=/opt/homepage/config
TRAEFIK_DOCKER_NETWORK=proxy
TRAEFIK_ENTRYPOINT_SECURE=websecure
TRAEFIK_CERTRESOLVER=letsencrypt
TRAEFIK_AUTH_MIDDLEWARE=ths-authentik@docker
SERVICE_URL_HOMEPAGE=https://app.example.com
SERVICE_FQDN_HOMEPAGE=app.example.com