d32d9fb44b
Phase 2 (Monitoring & Health): - Central job scheduler replacing ad-hoc goroutines (internal/scheduler) - CPU usage collector via /proc/stat background sampling (internal/system/cpu_linux.go) - Temperature reading from /sys/class/thermal + /host/sys (Docker mount) - Load average from /proc/loadavg - Healthchecks.io-compatible HTTP pinger (internal/monitor/pinger.go) - System health checks: disk, memory, CPU, temp, Docker, protected containers (internal/monitor/healthcheck.go) Phase 3 (Backups): - Database auto-discovery via docker ps + docker inspect (internal/backup/dbdump.go) - Database dumping via docker exec (pg_dump / mariadb-dump) with atomic writes - Restic backup integration with auto-password generation (internal/backup/restic.go) - Backup orchestrator: DB dumps + restic snapshots + weekly prune (internal/backup/backup.go) - Manual backup trigger via dashboard button and POST /api/backup/run Dashboard UI: - CPU usage bar with load average display - Temperature with colored indicator dot - Backup status card with last run time, DB count, repo stats - "Mentés most" button for manual backup trigger Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
131 lines
3.9 KiB
Plaintext
131 lines
3.9 KiB
Plaintext
# =============================================================================
|
|
# Felhom Controller Configuration
|
|
# =============================================================================
|
|
# Location: /opt/docker/felhom-controller/controller.yaml
|
|
#
|
|
# This file contains ONLY infrastructure and customer identity config.
|
|
# Application-specific configuration (passwords, paths, etc.) is handled
|
|
# interactively during first deployment via the dashboard UI and stored
|
|
# per-app in /opt/docker/stacks/<app>/app.yaml
|
|
#
|
|
# Environment variable overrides: FELHOM_<SECTION>_<KEY>
|
|
# (e.g., FELHOM_CUSTOMER_DOMAIN=example.hu)
|
|
# =============================================================================
|
|
|
|
# --- Customer identity ---
|
|
customer:
|
|
id: "demo-felhom" # Unique customer identifier
|
|
name: "Demo Ügyfél" # Display name (shown on dashboard)
|
|
domain: "demo-felhom.eu" # Base domain for all services
|
|
email: "" # Customer notification email (optional)
|
|
telegram_chat_id: "" # Telegram notifications (optional, future)
|
|
|
|
# --- Infrastructure secrets ---
|
|
infrastructure:
|
|
cf_tunnel_token: "" # Cloudflare Tunnel token
|
|
cf_api_token: "" # Cloudflare API token (DNS-01 challenge)
|
|
|
|
# --- Paths (system-level only) ---
|
|
paths:
|
|
stacks_dir: "/opt/docker/stacks" # Where compose files live
|
|
data_dir: "/opt/docker/felhom-controller/data"
|
|
backup_dir: "/srv/backups"
|
|
db_dump_dir: "/srv/backups/db-dumps"
|
|
hdd_path: "" # Optional: HDD mount path (e.g., /mnt/hdd)
|
|
|
|
# --- System ---
|
|
system:
|
|
reserved_memory_mb: 384 # Memory reserved for OS (excluded from app budget)
|
|
|
|
# --- Web UI ---
|
|
web:
|
|
listen: ":8080"
|
|
# Bcrypt hash. Empty = first-visit setup prompt.
|
|
password_hash: ""
|
|
session_secret: "" # Auto-generated on first start
|
|
|
|
# --- Git synchronization ---
|
|
git:
|
|
repo_url: "https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git"
|
|
branch: "main"
|
|
sync_interval: "15m"
|
|
username: ""
|
|
token: ""
|
|
|
|
# --- Stack management ---
|
|
stacks:
|
|
protected:
|
|
- "traefik"
|
|
- "cloudflared"
|
|
- "felhom-controller"
|
|
- "filebrowser"
|
|
update_window: "03:00-05:00"
|
|
compose_command: ""
|
|
|
|
# --- Backup ---
|
|
backup:
|
|
enabled: true
|
|
restic_repo: "/srv/backups/restic-repo"
|
|
restic_password_file: "/opt/docker/felhom-controller/data/restic-password"
|
|
db_dump_schedule: "02:30"
|
|
restic_schedule: "03:00"
|
|
retention:
|
|
keep_daily: 7
|
|
keep_weekly: 4
|
|
keep_monthly: 6
|
|
prune_schedule: "weekly"
|
|
|
|
# --- Monitoring ---
|
|
monitoring:
|
|
enabled: true
|
|
healthchecks_base: "https://status.felhom.eu"
|
|
ping_uuids:
|
|
db_dump: "CHANGEME-uuid-for-db-dump"
|
|
backup: "CHANGEME-uuid-for-backup"
|
|
system_health: "CHANGEME-uuid-for-system-health"
|
|
system_health_interval: "5m"
|
|
health_check_schedule: "06:00"
|
|
thresholds:
|
|
disk_warn_percent: 80
|
|
disk_crit_percent: 90
|
|
backup_max_age_hours: 36
|
|
cpu_warn_percent: 90
|
|
memory_warn_percent: 85
|
|
temperature_warn_celsius: 75
|
|
|
|
# --- Self-update ---
|
|
self_update:
|
|
enabled: true
|
|
check_interval: "6h"
|
|
image: "gitea.dooplex.hu/admin/felhom-controller"
|
|
auto_update: false
|
|
health_timeout_seconds: 60
|
|
|
|
# --- Notifications ---
|
|
notifications:
|
|
customer_events:
|
|
- "disk_warning"
|
|
- "backup_failed"
|
|
- "update_available"
|
|
- "security_update"
|
|
operator_events:
|
|
- "disk_critical"
|
|
- "backup_failed"
|
|
- "self_update_failed"
|
|
- "container_unhealthy"
|
|
|
|
# --- Logging ---
|
|
logging:
|
|
level: "info"
|
|
file: ""
|
|
max_size_mb: 10
|
|
max_files: 3
|
|
|
|
# --- Assets ---
|
|
assets:
|
|
# App logos, screenshots, and descriptions are baked into the container
|
|
# image at build time (from the felhom.eu website assets).
|
|
# Served locally at /static/assets/ — no external dependency.
|
|
# The source URL is only used during image build, not at runtime.
|
|
source_url: "https://felhom.eu"
|