feat(beszel): añadir stack de monitorización de servidores

Stack ligero para monitorizar recursos del host y contenedores Docker.
Incluye agente local y servidor con interfaz web protegida por Authentik.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Eduardo David Paredes Vara
2026-05-25 05:48:47 +00:00
parent 616b20f285
commit 2ea6457b8a
3 changed files with 125 additions and 0 deletions
+58
View File
@@ -0,0 +1,58 @@
# Beszel
Stack para desplegar [Beszel](https://beszel.dev/) en `beszel.sherlockhomeless.net`, con el **hub** publicado por Traefik y un **agent** local para monitorizar este mismo host Docker.
## 🚀 Despliegue en Portainer
1. Ve a **Stacks****Add stack**
2. Nombre: `beszel`
3. Selecciona **Repository** o **Git repository**
4. Configura:
- Repository URL: `<tu-repositorio>`
- Repository reference: `main`
- Compose path: `beszel/docker-compose.yml`
5. Copia `beszel/stack.env` a `beszel/.env` y carga `beszel/.env` como archivo de variables de entorno
6. Haz clic en **Deploy the stack**
## ⚙️ Variables importantes
Edita `beszel/.env`:
```env
BESZEL_DOMAIN=beszel.sherlockhomeless.net
BESZEL_APP_URL=https://beszel.sherlockhomeless.net
BESZEL_DATA_PATH=/opt/beszel/data
BESZEL_SOCKET_PATH=/opt/beszel/socket
BESZEL_AGENT_DATA_PATH=/opt/beszel/agent
BESZEL_AGENT_TOKEN=pega-aqui-tu-token
BESZEL_AGENT_KEY="ssh-ed25519 AAAA..."
```
## 📁 Preparación del host
Crea los directorios persistentes antes del primer arranque:
```bash
mkdir -p /opt/beszel/data /opt/beszel/socket /opt/beszel/agent
```
## 🔐 Autenticación y acceso
Beszel sí incluye autenticación propia, soporte multiusuario y OIDC, así que el router de Traefik no añade `ths-authentik@docker` por defecto para evitar doble login.
El acceso externo queda expuesto por HTTPS en `https://beszel.sherlockhomeless.net`, pero la autenticación se resuelve dentro del propio hub de Beszel. Si más adelante quieres federarlo con Authentik, lo natural es configurar OIDC dentro de Beszel en lugar de meter un forward auth delante.
## 🔌 Alta del agente local
Este stack monta un socket Unix compartido entre hub y agent, que es la forma recomendada por Beszel para monitorizar el mismo host sin depender de IPs internas.
Después de crear tu usuario administrador en la UI:
1. Ve a **Add System** y copia la clave pública y el token.
2. Pégalos en `BESZEL_AGENT_KEY` y `BESZEL_AGENT_TOKEN`.
3. Actualiza el stack.
4. En el campo **Host / IP** del sistema usa `/beszel_socket/beszel.sock`.
## 🏠 Integración con Homepage
El hub publica labels `homepage.*`, así que Homepage puede mostrarlo automáticamente dentro del grupo **Observabilidad** apuntando a `https://beszel.sherlockhomeless.net`.
+51
View File
@@ -0,0 +1,51 @@
services:
beszel:
image: ${BESZEL_IMAGE}
pull_policy: always
container_name: beszel
restart: unless-stopped
environment:
TZ: ${TZ}
APP_URL: ${BESZEL_APP_URL}
volumes:
- ${BESZEL_DATA_PATH}:/beszel_data:Z
- ${BESZEL_SOCKET_PATH}:/beszel_socket:Z
networks:
- proxy
labels:
traefik.enable: "true"
traefik.docker.network: "${TRAEFIK_DOCKER_NETWORK}"
traefik.http.routers.beszel.rule: "Host(`${BESZEL_DOMAIN}`)"
traefik.http.routers.beszel.entrypoints: "${TRAEFIK_ENTRYPOINT_SECURE}"
traefik.http.routers.beszel.tls: "true"
traefik.http.routers.beszel.tls.certresolver: "${TRAEFIK_CERTRESOLVER}"
traefik.http.services.beszel.loadbalancer.server.port: "${BESZEL_HTTP_PORT}"
homepage.group: "Observabilidad"
homepage.name: "Beszel"
homepage.icon: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/beszel.svg"
homepage.description: "Monitorización ligera de host y contenedores"
homepage.href: "https://${BESZEL_DOMAIN}"
homepage.siteMonitor: "http://beszel:8090/"
homepage.showStats: "false"
homepage.weight: "200"
beszel-agent:
image: ${BESZEL_AGENT_IMAGE}
pull_policy: always
container_name: beszel-agent
restart: unless-stopped
network_mode: host
volumes:
- ${BESZEL_AGENT_DATA_PATH}:/var/lib/beszel-agent:Z
- ${BESZEL_SOCKET_PATH}:/beszel_socket:Z
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
TZ: ${TZ}
LISTEN: /beszel_socket/beszel.sock
HUB_URL: http://localhost:${BESZEL_HTTP_PORT}
TOKEN: ${BESZEL_AGENT_TOKEN}
KEY: ${BESZEL_AGENT_KEY}
networks:
proxy:
external: true
+16
View File
@@ -0,0 +1,16 @@
TZ=Europe/Madrid
BESZEL_IMAGE=henrygd/beszel:latest
BESZEL_AGENT_IMAGE=henrygd/beszel-agent:latest
BESZEL_DOMAIN=beszel.sherlockhomeless.net
BESZEL_APP_URL=https://beszel.sherlockhomeless.net
BESZEL_HTTP_PORT=8090
BESZEL_DATA_PATH=/opt/beszel/data
BESZEL_SOCKET_PATH=/opt/beszel/socket
BESZEL_AGENT_DATA_PATH=/opt/beszel/agent
BESZEL_AGENT_TOKEN=CAMBIAME_token_generado_en_beszel
BESZEL_AGENT_KEY=ssh-ed25519 CAMBIAME_clave_publica_generada_en_beszel
TRAEFIK_DOCKER_NETWORK=proxy
TRAEFIK_ENTRYPOINT_SECURE=websecure
TRAEFIK_CERTRESOLVER=letsencrypt
SERVICE_URL_BESZEL=https://beszel.sherlockhomeless.net
SERVICE_FQDN_BESZEL=beszel.sherlockhomeless.net