docs: ops portal and backup-restore documentation (2026-07-20)

This commit is contained in:
root
2026-07-20 17:10:04 -04:00
parent bec08ce3f5
commit 2d3228e263
5 changed files with 204 additions and 0 deletions
+39
View File
@@ -0,0 +1,39 @@
# Ops Portal Changelog
## 2026-07-20 — Major audit and fix session
### Fixed
- **`/api/health` returning 404:** Caddy `handle_path` was stripping the path → changed to `handle`, port corrected to 8090
- **`/api/servers` returning null:** Server list now returns all 5 servers with live ping health
- **Server IPs stale:** app1-bu updated to 5.161.225.131, legacy entries removed
- **Page titles inconsistent:** All 11 pages standardized to "X — IT Pro Partner Ops" format
- **Missing nav icons:** All 11 nav items now have SVG icons
- **FleetTracker360 missing from nav:** Added to navigation with car icon
- **Backups page no data:** `s3_buckets``s3_backups` key fix
- **FleetTracker360 page no nav:** Added ops.css, app.js, utils.js includes
- **Network page dark sidebar:** Replaced with standard top nav bar
- **Cache-busting broken:** All JS/CSS references now versioned with timestamps
- **Mobile nav broken:** `.nav-links.open` CSS rule missing → hamburger menu now toggles properly on iOS/Android
- **Auth guard race condition:** IIFE scripts replaced with DOMContentLoaded event listeners — pages now load data when user is authenticated
- **Cost page broken:** Missing `loadData` function → defined and wired
- **Dependency diagram 404:** File copied to static dir, link corrected
- **Logs page mangled title:** Triple-nested `<title>` tags from sed accident → cleaned
- **Config page scripts directory:** Now populates directory listing when clicked
- **Services page:** Server column added showing "Core (152.53.192.33)"
- **Dashboard auto-refresh on tab focus:** Visibility API handler added
- **Critical service protection:** hermes, caddy, ops-portal restarts blocked via API
### Removed
- Duplicate server entries: "app1 (AI Stack)" and "Docker Box (legacy)"
- Server count: 7 → 5 clean entries
### Changed
- Admin credentials: germaine/itpp2026! → ippadmin/LoveMyBoys.1520!
- JWT_SECRET made persistent in /root/.hermes/.env to survive restarts
- Collector timeout: 20s → 90s to handle 94K-file S3 bucket scanning
## Jul 17, 2026 — Initial deployment
- Ops portal deployed on Core as FastAPI app
- Caddy reverse proxy configured
- 10 HTML pages created
- Ops collector built for S3, system health, server status
+55
View File
@@ -0,0 +1,55 @@
# Ops Portal — ops.itpropartner.com
## Architecture
- **Server:** Core (152.53.192.33, netcup RS 2000)
- **Backend:** FastAPI at `/opt/ops-portal/server.py` (port 8090)
- **Proxy:** Caddy → reverse_proxy to 127.0.0.1:8090
- **Static files:** `/opt/ops-portal/static/` — 11 HTML pages, ops.css, app.js, utils.js
- **Auth:** JWT via `POST /api/auth/login`, token in localStorage
- **Data:** `/var/www/ops/data/ops-status.json` (5-min collector refresh)
- **Collector:** `/root/.hermes/scripts/ops-data-collector.py` — Wazuh, Bitdefender, S3, UISP, system health
- **Systemd:** `ops-portal.service`, env from `/root/.hermes/.env`
- **Credentials:** ippadmin / LoveMyBoys.1520!
## Pages (11 total)
| Page | Path | Description |
|------|------|-------------|
| Dashboard | / | System health, widgets, audit log |
| Services | /services.html | Systemd service control, audit log, server column |
| Servers | /servers.html | 5 servers with ping health |
| Network | /network.html | UISP data (44 sites, 90 devices), DNS zones |
| Backups | /backups.html | S3 bucket status (6 buckets) |
| FleetTracker | /fleettracker360.html | Traccar device tracking |
| Cron Jobs | /cron.html | Hermes cron jobs with expandable scripts |
| Config | /config.html | Active configs, /root/.hermes/scripts/ listing |
| Logs | /logs.html | Aggregated log viewer |
| Audit | /audit.html | Full audit trail |
| Costs | /cost.html | API cost tracking by model |
## API Endpoints
| Method | Path | Auth | Description |
|--------|------|------|-------------|
| POST | /api/auth/login | No | JWT authentication |
| GET | /api/health | No | Health check, DB status |
| GET | /api/status | JWT | Full dashboard data (17 sections) |
| GET | /api/servers | JWT | Server list with IPs |
| GET | /api/servers/health | JWT | Ping health (all 7 LIVE) |
| GET | /api/audit-log?limit=N | JWT | Audit trail entries |
| GET | /api/ft360/status | JWT | FleetTracker device data |
## Critical Services (API restart blocked)
hermes, hermes-assistant, hermes-browser, caddy, ops-portal, mysql-tunnel
## Dashboard Widgets
- System Health — Core metrics (jobs, disk, memory, S3, APIs)
- Wazuh Security — agent count, alerts
- Bitdefender GravityZone — 9 managed endpoints
- Alerts and Notifications — DR issues, backup failures, cron errors
- Quick Actions — Restart Ops Portal
## Recovery
```
systemctl restart ops-portal
systemctl reload caddy
python3 /root/.hermes/scripts/ops-data-collector.py
```