searxng: the healthcheck passed '--tries' and '--spider' as separate argv entries, so wget consumed '--spider' as the value of '--tries'. Spider mode never engaged and every 30s probe downloaded the response to disk; the container's working directory had accumulated 295,287 healthz.N files since April, and the directory scan to pick the next free filename is what intermittently blew the 10s timeout and flapped the dashboard card to UNHEALTHY. Restored '--tries=1'. The junk was in the writable layer, so the recreate cleared it. Now healthy, fails=0, 200 in 0.16s. seafile: none of the three services declared a restart policy, so Docker defaulted them to 'no'. The daemon stopped all three within 200ms on 2026-05-06 and nothing brought them back — a three-month outage whose only trace was an EXITED card. Exit 255 is what a container ignoring SIGTERM reports when the daemon stops it, not a crash. Added restart: unless-stopped. Stack is back up; mysql gates on its healthcheck as designed and seahub started without the race. 302 -> login page. Both stacks were running unmanaged on ana-docker and are now tracked here. homepage: AI tab reordered by clickability per operator — chat frontends, ComfyUI and the control plane on top; vLLM /docs seats and TTS endpoints below. Corrects the previous commit's UNRESOLVED tab-bar section: it was warm-up time after a recreate, not a defect.
188 lines
5.9 KiB
YAML
188 lines
5.9 KiB
YAML
---
|
|
# https://gethomepage.dev/latest/configs/settings
|
|
title: ... all my base ...
|
|
theme: dark
|
|
color: slate
|
|
background:
|
|
image: https://w.wallhaven.cc/full/p9/wallhaven-p9gr2p.jpg
|
|
blur: sm
|
|
opacity: 20
|
|
headerStyle: boxedWidgets
|
|
|
|
providers:
|
|
openweathermap: openweathermapapikey
|
|
weatherapi: weatherapiapikey
|
|
|
|
quicklaunch:
|
|
searchDescriptions: true
|
|
hideInternetSearch: true
|
|
showSearchSuggestions: true
|
|
hideVisitURL: true
|
|
|
|
showStats: false
|
|
statusStyle: ""
|
|
|
|
# Force all cards in a row to match the tallest card's height. Without
|
|
# this, widget-bearing cards (Plex stats, Traefik metrics) stand taller
|
|
# than plain link cards and the grid looks ragged.
|
|
useEqualHeights: true
|
|
|
|
# Function-first layout, four-tab split:
|
|
# Main - daily-use apps, media, bookmarks, monitoring
|
|
# AI - the inference fleet, grouped by role (see below)
|
|
# Infrastructure - hardware, hypervisors, BMCs (per site)
|
|
# Toolchain - backend services running but rarely clicked
|
|
#
|
|
# The AI tab splits the fleet by function so a 20+ service list reads as
|
|
# sorted groups instead of one endless column. Group membership is set by
|
|
# the homepage.group=AI - <role> label on each service's compose file:
|
|
# AI - Inference LLM seats you call (gen, char-rp, char-rp-reasoning, summarizer)
|
|
# AI - Eval & Retrieval judges, reward, rerank, embed, image-quality
|
|
# AI - Gateways & Chat routing gateway, control plane, chat frontends
|
|
# AI - Speech (TTS) text-to-speech engines
|
|
# AI - Audio Tools speech-to-text + audio dataset tooling
|
|
# AI - Image & Media image/video generation + pipelines
|
|
# AI - Dormant stopped stacks (rollback seats, retired auditions)
|
|
#
|
|
# AI TAB ORDER IS BY CLICKABILITY, NOT BY IMPORTANCE (operator, 2026-08-18).
|
|
# Groups render in the order they appear in this block, so the top of the tab
|
|
# is prime real estate and it should hold the things you actually open in a
|
|
# browser — chat frontends, ComfyUI, the control plane. Most of the model
|
|
# seats below them are vLLM API endpoints whose href is a `/docs` page: they
|
|
# are worth SEEING (status at a glance) but not worth reaching for, so they
|
|
# sink. Order is therefore:
|
|
# interactive UIs -> mixed -> API-only seats -> dormant
|
|
# If you add an AI group, place it by asking "would I click this?", not by
|
|
# how central the service is to the fleet.
|
|
#
|
|
# COLUMN COUNTS ARE NOT A STYLE CHOICE — they are the member count.
|
|
# `columns: N` lays the group out N-per-row and leaves the remainder of the
|
|
# last row as dead space. A 1-member group at columns:4 renders one card and
|
|
# three empty cells, which is what made this dashboard look ragged before
|
|
# 2026-08-18. Rule: set columns to the member count, or to the divisor that
|
|
# leaves the smallest remainder. Re-check when a group gains or loses a
|
|
# service — `GET /api/services` prints the live per-group counts.
|
|
#
|
|
# EVERY GROUP NEEDS A `tab:` — including bookmark groups. A group with no tab
|
|
# assignment renders on ALL FOUR TABS. That is how UltraSeedbox ended up
|
|
# repeated at the bottom of every tab (fixed 2026-08-18); it is Homepage
|
|
# behaviour, not a bug, and it will happen again to the next group added
|
|
# without a tab.
|
|
layout:
|
|
Notes:
|
|
icon: mdi-note-text-outline
|
|
tab: Main
|
|
style: row
|
|
columns: 1
|
|
News:
|
|
icon: mdi-rss
|
|
tab: Main
|
|
style: row
|
|
columns: 2
|
|
Monitoring:
|
|
icon: mdi-chart-line
|
|
tab: Main
|
|
style: row
|
|
columns: 4
|
|
Apps:
|
|
icon: mdi-apps
|
|
tab: Main
|
|
style: row
|
|
columns: 4
|
|
# 2 wide, not 3 — Plex and Jellyfin carry stat-block widgets that get
|
|
# squeezed to unreadable at 4-across, and 4 members / 3 columns orphaned
|
|
# Jellyfin onto a row of its own.
|
|
Media:
|
|
icon: mdi-play-box-multiple
|
|
tab: Main
|
|
style: row
|
|
columns: 2
|
|
Games:
|
|
icon: mdi-gamepad-square
|
|
tab: Main
|
|
style: row
|
|
columns: 1
|
|
# Bookmarks. Listed here for the tab pin above all else — without it this
|
|
# group appears on every tab. `style: row` also turns the eight entries
|
|
# from full-width stacked bars into a compact grid.
|
|
UltraSeedbox:
|
|
icon: mdi-download-network
|
|
tab: Main
|
|
style: row
|
|
columns: 4
|
|
# --- AI tab: ordered interactive -> API-only -> dormant (see note above) ---
|
|
# Things you open: chat frontends, the control plane, the LiteLLM UI.
|
|
AI - Gateways & Chat:
|
|
icon: mdi-router-network
|
|
tab: AI
|
|
style: row
|
|
columns: 4
|
|
# ComfyUI is a full node editor and Arbo has a real UI — both get clicked.
|
|
AI - Image & Media:
|
|
icon: mdi-image-multiple
|
|
tab: AI
|
|
style: row
|
|
columns: 2
|
|
# Mixed: YT Voice Clipper has an audition console, Parakeet is an API.
|
|
AI - Audio Tools:
|
|
icon: mdi-waveform
|
|
tab: AI
|
|
style: row
|
|
columns: 2
|
|
# Below here: model seats whose href is a vLLM `/docs` page. Status at a
|
|
# glance is the whole value; you consume these through the gateway, not by
|
|
# clicking them.
|
|
AI - Inference:
|
|
icon: mdi-brain
|
|
tab: AI
|
|
style: row
|
|
columns: 4
|
|
AI - Eval & Retrieval:
|
|
icon: mdi-scale-balance
|
|
tab: AI
|
|
style: row
|
|
columns: 5
|
|
AI - Speech (TTS):
|
|
icon: mdi-account-voice
|
|
tab: AI
|
|
style: row
|
|
columns: 4
|
|
# Stopped stacks kept for rollback / superseded seats / retired auditions.
|
|
# They stay 'created' (not running) via `docker compose up --no-start`, so
|
|
# they show here as offline cards and revive with `docker compose start`.
|
|
AI - Dormant:
|
|
icon: mdi-sleep
|
|
tab: AI
|
|
style: row
|
|
columns: 4
|
|
Infra - ANA:
|
|
icon: si-proxmox
|
|
tab: Infrastructure
|
|
style: row
|
|
columns: 4
|
|
Infra - NH3:
|
|
icon: si-proxmox
|
|
tab: Infrastructure
|
|
style: row
|
|
columns: 3
|
|
Infra - IRV:
|
|
icon: mdi-brain
|
|
tab: Infrastructure
|
|
style: row
|
|
columns: 2
|
|
Infra - ESH:
|
|
icon: si-proxmox
|
|
tab: Infrastructure
|
|
style: row
|
|
columns: 4
|
|
Service Networking:
|
|
icon: mdi-transit-connection-variant
|
|
tab: Toolchain
|
|
style: row
|
|
columns: 4
|
|
Toolchain:
|
|
icon: mdi-toolbox
|
|
tab: Toolchain
|
|
style: row
|
|
columns: 4
|