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:
@@ -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`.
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user