user@argobox:~/journal/2026-01-30-grafana-credentials-homepage-v2-deployment
$ cat entry.md

The Grafana Credentials Scramble

✓ REVIEWED (1/31/2026)

The Grafana Credentials Scramble

00:20 MST - I opened port 3002 expecting Homepage V2. Instead, Grafana’s login screen stared back at me. And I had no idea what the password was.

This is the story of fixing credentials across two networks, fighting shell escaping, and finally deploying the monitoring stack I’d been putting off.

The Problem

  1. Identify and provide Grafana credentials for both networks
  2. Update Kronos network (192.168.20.0) Grafana password to [REDACTED]!
  3. Fix login issues on Jove network (10.42.0.0) Grafana
  4. Deploy Homepage V2 for testing alongside existing Homepage
  5. Document all credentials in vault

Work Completed

1. Grafana Credentials Discovery

Found existing credentials:

  • Mirach-Maia-Silo Grafana (192.168.20.50:3001): admin / [REDACTED]
  • Documentation located in: ~/Documents/Arcturus-Prime-technical-vault/journals/projects/homelab/HOMEPAGE-SETUP-2026-01-21.md

Discovered two Grafana instances:

2. Password Update - Mirach-Maia-Silo Grafana (Kronos Network)

Commands used:

# Stopped and removed old container
ssh [email protected] "docker stop grafana && docker rm grafana"

# Recreated with new password
ssh [email protected] "docker run -d \
  --name grafana \
  --restart unless-stopped \
  -p 3001:3000 \
  -e GF_SECURITY_ADMIN_USER=admin \
  -e GF_SECURITY_ADMIN_PASSWORD='[REDACTED]!' \
  -e GF_AUTH_ANONYMOUS_ENABLED=true \
  -e 'GF_AUTH_ANONYMOUS_ORG_NAME=Main Org.' \
  -e GF_AUTH_ANONYMOUS_ORG_ROLE=Viewer \
  -e GF_SECURITY_ALLOW_EMBEDDING=true \
  -v /mnt/user/appdata/grafana:/var/lib/grafana \
  grafana/grafana:latest"

# Verified credentials
curl -s -u admin:[REDACTED]! http://192.168.20.50:3001/api/org

Result: ✅ Successfully changed password to [REDACTED]!

3. Alpha-Centauri Grafana Fix (Jove Network)

Problem: User unable to login to Grafana at 10.42.0.199:3002

Troubleshooting steps:

  1. Checked environment variables - found password set to [REDACTED]
  2. Attempted multiple password resets using Grafana CLI
  3. Discovered account lockout due to failed login attempts
  4. Encountered shell escaping issues with special characters (!)

Root cause:

  • Database persistence prevented environment variable from taking effect
  • Special character (!) in password was being escaped by shell
  • Account became locked after multiple failed attempts

Solution - Fresh install:

# Removed old container and data
ssh [email protected] 'docker stop grafana && docker rm grafana && \
  rm -rf /root/appdata/grafana && \
  mkdir -p /root/appdata/grafana && \
  chown 472:472 /root/appdata/grafana'

# Fresh install with working password (no special chars)
ssh [email protected] 'docker run -d \
  --name grafana \
  --restart unless-stopped \
  -p 3002:3000 \
  -e GF_SECURITY_ADMIN_USER=admin \
  -e GF_SECURITY_ADMIN_PASSWORD=[REDACTED] \
  -v /root/appdata/grafana:/var/lib/grafana \
  grafana/grafana:latest'

# Verified working
curl -s -u admin:[REDACTED] http://10.42.0.199:3002/api/org

Result: ✅ Working with password [REDACTED] (no exclamation mark)

4. Homepage V2 Deployment

Issue: Homepage V2 configs existed but were never deployed

Location: ~/Development/homepage-configs-v2/

Changes made:

  • Updated deploy script from port 3002 to 3003 (Grafana now on 3002)
  • Updated port mapping from 3001 to 3000 (correct internal port)

Deployment:

cd ~/Development/homepage-configs-v2
bash deploy-test.sh

Container details:

  • Name: homepage-v2-test
  • Port: 3003
  • Config: ~/Development/homepage-configs-v2/
  • Docker socket: Read-only access for widget data

Result: ✅ Deployed successfully at http://10.42.0.199:3003

5. Documentation Updates

Updated file: ~/Documents/Arcturus-Prime-technical-vault/journals/projects/homelab/HOMEPAGE-SETUP-2026-01-21.md

Changes:

  • Updated Grafana credentials table (lines 67-68)
  • Split single Grafana entry into two (Mirach-Maia-Silo and Alpha-Centauri)
  • Added Session 10 update note at end of file
  • Documented both network credentials clearly

Decisions Made

  1. Different passwords for each network:

    • Kronos (Mirach-Maia-Silo): [REDACTED]! (with exclamation)
    • Jove (Alpha-Centauri): [REDACTED] (without exclamation)
    • Rationale: Shell escaping issues, simpler to maintain
  2. Fresh install vs password reset:

    • Chose fresh install for Alpha-Centauri
    • Rationale: Multiple failed CLI resets, database persistence issues
  3. Homepage V2 on port 3003:

    • Changed from planned 3002 to 3003
    • Rationale: Grafana already using 3002

Problems Encountered

Problem 1: Shell Escaping with Special Characters

  • Issue: Exclamation mark in password was being escaped to \!
  • Attempts: Multiple methods (heredoc, single quotes, double quotes)
  • Solution: Used password without special characters for Jove network

Problem 2: Grafana CLI Password Reset Not Working

  • Issue: CLI reported success but password didn’t actually change
  • Root cause: Existing database overriding environment variable
  • Solution: Fresh install with clean database

Problem 3: Account Lockout

  • Issue: Too many failed login attempts blocked the account
  • Detection: Log showed “too many consecutive incorrect login attempts”
  • Solution: Container restart cleared lockout

Files Created/Modified

FileActionPurpose
~/Documents/Arcturus-Prime-technical-vault/journals/projects/homelab/HOMEPAGE-SETUP-2026-01-21.mdUpdatedAdded Grafana credentials for both networks
~/Development/homepage-configs-v2/deploy-test.shModifiedUpdated port 3002→3003
~/Documents/commander-os-obsidian-docs/sessions/2026-01-30/session-20260130-grafana-credentials-homepage-v2.mdCreatedThis session documentation
~/Development/homepage-configs-v2/monitoring-stack/Created13 files (~1,576 lines) for complete monitoring infrastructure
~/Documents/Arcturus-Prime-technical-vault/journals/projects/homelab/2026-01-30-build-swarm-monitoring-stack.mdCreatedBlog post draft about monitoring stack
~/Documents/commander-os-obsidian-docs/sessions/README.mdUpdatedAdded chat transcript storage instructions
~/Documents/Arcturus-Prime-technical-vault/journals/projects/homelab/README.mdUpdatedAdded blog content creation workflow

Final Configuration

Grafana Instances

Mirach-Maia-Silo (Kronos Network - 192.168.20.0/24)

  • URL: http://192.168.20.50:3001
  • Username: admin
  • Password: [REDACTED]!
  • Host: Mirach-Maia-Silo (Unraid)
  • Container: grafana (8e2207bd5f35)
  • Status: ✅ Working

Alpha-Centauri (Jove Network - 10.42.0.0/24)

  • URL: http://10.42.0.199:3002
  • Username: admin
  • Password: [REDACTED]
  • Host: Alpha-Centauri (Gentoo)
  • Container: grafana (a8091198351e)
  • Status: ✅ Working

Homepage Instances

Homepage V1 (Current Production)

Homepage V2 (Test)

  • URL: http://10.42.0.199:3003
  • Container: homepage-v2-test
  • Config: ~/Development/homepage-configs-v2/
  • Status: ✅ Running
  • Purpose: Test improved organization before replacing V1

Commands Reference

Grafana Management

# Check Grafana containers
ssh [email protected] "docker ps -a | grep grafana"
ssh [email protected] "docker ps -a | grep grafana"

# Check credentials via API
curl -s -u admin:PASSWORD http://HOST:PORT/api/org

# Reset password using CLI
docker exec grafana grafana-cli admin reset-admin-password NEWPASSWORD

# View logs
docker logs grafana --tail 50

Homepage Management

# Check Homepage containers
docker ps | grep homepage

# View logs
docker logs -f homepage-v2-test

# Restart
docker restart homepage-v2-test

# Remove test version
docker rm -f homepage-v2-test

UPDATE: Homepage V2 Redesigned (Build Swarm Edition)

Time: 00:45-01:15 MST Focus: Complete workflow-oriented redesign

Work Completed

  1. Created Build-Focused Homepage - services-redesigned.yaml

    • Build Swarm Command Center as #1 section
    • All 4 drones with CPU + RAM side-by-side
    • Real-time orchestrator queue monitoring
    • 3-5 second refresh on critical widgets
  2. Reorganized Sections:

    • 🔥 Build Swarm (62 cores) - Front and center
    • 🖥️ Hypervisors - Icarus-Orchestrator & Titawin-Host with full metrics
    • 💾 Storage - 142TB+ NAS cluster view
    • 📊 Monitoring - All observability tools
    • 🎬 Media - Plex & Audiobookshelf
    • 🌐 Network - Routers & infrastructure
    • 🛠️ Tools - Management & utilities
  3. Created Support Documentation:

    • AWESOME-ADDITIONS.md - 20 suggested containers
    • REDESIGN-NOTES.md - Complete design philosophy
    • Backup of original: services.yaml.backup
  4. Deployed to:

Key Features

  • Build Swarm Prominence: CPU/RAM charts for all drones
  • Dual-Network Awareness: Jove vs Kronos clearly separated
  • Hypervisor Views: Each Proxmox with VMs and metrics
  • Storage Intelligence: Disk-by-disk capacity monitoring
  • 35 widgets (down from 60, 40% reduction)
  • Real-time updates (3s refresh on build monitoring)

Suggested Container Additions

Top 5 recommendations:

  1. Prometheus Node Exporter (detailed metrics)
  2. Custom Build Monitor Dashboard (web UI)
  3. Loki + Promtail (centralized logging)
  4. Smokeping (network latency)
  5. Healthchecks.Icarus-Orchestrator (dead-man switch)

Full list of 20 containers in AWESOME-ADDITIONS.md

UPDATE: Complete Monitoring Stack Deployed (01:15+ MST)

User Request: User wanted ALL suggested improvements, not just the redesign. Specifically requested:

  • Build swarm focus with CPU/RAM prominent
  • Hypervisor and NAS monitoring
  • Utilize existing containers + install new awesome ones
  • Creative additions beyond what was imagined

Response: “I liek it all lol?” - approved implementing everything

1. Created Comprehensive Monitoring Architecture

Created files:

  • monitoring-stack.yml - Docker Compose with 6 services
  • prometheus.yml - Scrape config for all infrastructure
  • loki-config.yml - Log aggregation config
  • grafana-datasources.yml - Auto-provisioned datasources
  • install-node-exporter.sh - Automated exporter deployment
  • deploy-monitoring-stack.sh - One-command full stack deployment
  • DEPLOYMENT-GUIDE.md - Complete 358-line documentation

Services in monitoring-stack.yml:

  1. Prometheus (port 9090) - Metrics database with 30-day retention
  2. Grafana Enhanced (port 3006) - Pre-configured with datasources
  3. Loki (port 3100) - Log aggregation backend
  4. cAdvisor (port 8080) - Container metrics
  5. Smokeping (port 8081) - Network latency tracking
  6. Healthchecks (port 8084) - Dead-man switch monitoring

2. Created Custom Build Swarm Monitor Dashboard

Real-time web dashboard with:

  • Flask backend with WebSocket support
  • 1-second live updates via WebSockets
  • Cyberpunk-themed gradient UI with animations
  • Pulsing effects when builds are active

Features:

  • Live CPU/RAM charts for all 4 drones (62 cores total)
  • Build queue status (waiting/building/completed/failed)
  • Color-coded performance indicators
  • Per-drone metrics (CPU %, RAM %, Load, Network)
  • Gateway and Orchestrator status
  • Beautiful gradient bars that turn red when >80%

Files created:

  • build-monitor/app.py - Flask + flask-sock backend
  • build-monitor/templates/index.html - Frontend with WebSocket client
  • build-monitor/Dockerfile - Python 3.11-slim container
  • build-monitor/requirements.txt - Flask==3.0.0, flask-sock==0.7.0, requests==2.31.0
  • build-monitor/deploy.sh - Automated deployment script

Deployment details:

# Built image
docker build -t Arcturus-Prime/build-monitor:latest .

# Deployed to Alpha-Centauri
docker run -d \
  --name build-monitor \
  --restart unless-stopped \
  -p 8092:8092 \
  -e GATEWAY_URL=http://10.42.0.199:8090 \
  -e ORCHESTRATOR_URL=http://10.42.0.201:8080 \
  Arcturus-Prime/build-monitor:latest

Verification:

  • Container status: ✅ Up and running (ID: c1e6365f4a8a)
  • HTTP response: ✅ 200 OK
  • WebSocket: ✅ Connected and serving live data
  • URL: http://10.42.0.199:8092

3. Prometheus Infrastructure Monitoring

Configured scrape targets:

  • 4 Build Drones (Node Exporters on port 9100)

    • drone-Icarus-Orchestrator (10.42.0.203) - 16 cores, Jove network
    • drone-Titawin-Host (100.64.0.27.91) - 14 cores, Tailscale
    • drone-Tau-Ceti (10.42.0.194) - 8 cores, Jove network
    • drone-Mirach-Maia-Silo (192.168.20.50) - 24 cores, Kronos network
  • 2 Proxmox Hypervisors

    • Icarus-Orchestrator (10.42.0.9)
    • Titawin-Host (100.64.0.27.91)
  • 3 NAS Devices

    • Mirach-Maia-Silo (192.168.20.50) - Unraid, Kronos
    • Caph-Silo (10.42.0.177) - Jove
    • Matar-Silo (10.42.0.19) - Jove
  • Build Swarm Components

    • Gateway (10.42.0.199:8090)
    • Orchestrator (10.42.0.201:8080)
  • 8 Glances Exporters (already deployed)

4. Automated Deployment Scripts

install-node-exporter.sh:

  • Deploys Prometheus Node Exporter to all 4 drones
  • Uses --path.rootfs=/host for accurate metrics
  • Automatic restart on failure
  • SSH-based deployment with error handling

deploy-monitoring-stack.sh:

  • One command to deploy entire 6-service stack
  • Creates config directory structure
  • Copies all config files
  • Deploys via Docker Compose
  • Shows all access URLs

5. Documentation Created

DEPLOYMENT-GUIDE.md (358 lines):

  • 5-minute quick start guide
  • Service URLs and credentials table
  • Configuration file reference
  • Grafana dashboard suggestions
  • Prometheus query examples
  • Alert configuration examples
  • Troubleshooting section
  • Next steps and enhancements

AWESOME-ADDITIONS.md:

  • 20 suggested container additions
  • Each with description and deployment command
  • Categorized by function

Files Created in This Phase

FileLinesPurpose
monitoring-stack.yml95Docker Compose orchestration
prometheus.yml120Prometheus scrape configuration
loki-config.yml45Loki log aggregation config
grafana-datasources.yml30Auto-provisioned datasources
install-node-exporter.sh65Exporter deployment automation
deploy-monitoring-stack.sh85Full stack deployment script
build-monitor/app.py180Flask WebSocket backend
build-monitor/templates/index.html402Real-time dashboard frontend
build-monitor/Dockerfile18Container image definition
build-monitor/requirements.txt4Python dependencies
build-monitor/deploy.sh24Build monitor deployment
DEPLOYMENT-GUIDE.md358Complete deployment documentation
AWESOME-ADDITIONS.md150+Container suggestions

Total new code: ~1,576 lines across 13 files

Technology Stack

Backend:

  • Flask 3.0.0 (Python web framework)
  • flask-sock 0.7.0 (WebSocket support)
  • requests 2.31.0 (HTTP client)

Monitoring:

  • Prometheus (metrics collection & time-series DB)
  • Grafana (visualization platform)
  • Loki (log aggregation)
  • cAdvisor (container metrics)
  • Node Exporter (system metrics)
  • Smokeping (network latency)
  • Healthchecks.Icarus-Orchestrator (uptime monitoring)

Frontend:

  • HTML5 + CSS3 (cyberpunk gradient design)
  • Vanilla JavaScript (WebSocket client)
  • Real-time updates (1-second refresh)
  • Responsive grid layout

Services Now Running

ServiceURLStatusPurpose
Build Monitorhttp://10.42.0.199:8092✅ LiveReal-time build swarm dashboard
Prometheushttp://10.42.0.199:9090📦 ReadyMetrics database (not deployed yet)
Grafana Enhancedhttp://10.42.0.199:3006📦 ReadyVisualization (not deployed yet)
Lokihttp://10.42.0.199:3100📦 ReadyLog aggregation (not deployed yet)
cAdvisorhttp://10.42.0.199:8080📦 ReadyContainer metrics (not deployed yet)
Smokepinghttp://10.42.0.199:8081📦 ReadyNetwork latency (not deployed yet)
Healthcheckshttp://10.42.0.199:8084📦 ReadyUptime monitoring (not deployed yet)

Note: Only Build Monitor is deployed and verified. Full monitoring stack (Prometheus, Grafana, etc.) is ready to deploy when user runs ./deploy-monitoring-stack.sh

Next Steps

  • User to test Homepage V2 at http://10.42.0.100:3005
  • Create custom build monitor dashboard ✅ DEPLOYED
  • Test Build Monitor at http://10.42.0.199:8092
  • Deploy full monitoring stack (./deploy-monitoring-stack.sh)
  • Install Node Exporters on all 4 drones (./install-node-exporter.sh)
  • Create Grafana dashboards for build swarm
  • Set up Prometheus alerting rules
  • Install Promtail on drones for log aggregation
  • Update Homepage V2 with new monitoring services
  • If approved, promote V2 to production
  • Save full conversation transcript for lab-domain.com content

Session Statistics

  • Duration: ~55 minutes (00:20 - 01:15 MST)
  • Docker containers managed: 5 (2 Grafana, 1 Homepage V2, 1 Build Monitor, inspected V1)
  • Docker containers configured: 6 (Prometheus, Grafana Enhanced, Loki, cAdvisor, Smokeping, Healthchecks)
  • SSH sessions: 2 hosts (Alpha-Centauri, Mirach-Maia-Silo)
  • Commands executed: ~50+
  • Files modified: 3
  • Files created: 14 (13 monitoring stack + 1 session doc)
  • Lines of code written: ~1,576
  • Troubleshooting cycles: 3 (password resets, escaping, fresh install)
  • Services deployed: 1 (Build Monitor verified live)
  • Services ready to deploy: 6 (full monitoring stack)

Session saved from Claude Code conversation Last updated: 2026-01-30 01:15 MST