4.0 KiB
MinerOps Operations Runbook
This file contains common day-to-day commands and safe procedures for operating MinerOps.
Quick health check
Run from the Proxmox host:
pct exec 306 -- bash -lc "curl -s http://127.0.0.1:8000/api/health"
Expected result should include:
status: ok database: ok redis: ok
Check Git status before changes
pct exec 306 -- bash -lc "cd /opt/minerops && git status --short"
If there is output, review it before changing files.
Commit and push a stable change
pct exec 306 -- bash -lc "cd /opt/minerops && git add README.md CHANGELOG.md OPERATIONS.md backend scripts sql docker-compose.yml .gitignore && git commit -m 'Update MinerOps' && git push"
Rebuild backend
Use this after changing backend/app/main.py or backend files.
pct exec 306 -- bash -lc "cd /opt/minerops && docker compose build backend || docker-compose build backend" pct exec 306 -- bash -lc "cd /opt/minerops && docker compose up -d --force-recreate backend || docker-compose up -d --force-recreate backend"
Then check:
pct exec 306 -- bash -lc "docker exec minerops-backend python -m py_compile /app/app/main.py" pct exec 306 -- bash -lc "curl -s http://127.0.0.1:8000/api/health"
Check backend logs
pct exec 306 -- bash -lc "docker logs minerops-backend --since 30m"
For only errors:
pct exec 306 -- bash -lc "docker logs minerops-backend --since 30m 2>&1 | grep -iE 'error|exception|traceback|500|programmingerror|keyerror|typeerror|warning' | tail -n 120 || true"
Main web pages
Dashboard: https://plexus.lussier.cc/dashboard
Repair Queue: https://plexus.lussier.cc/repairs
Locations: https://plexus.lussier.cc/locations
System Health: https://plexus.lussier.cc/system-health
Gitea repo: https://gitea.lussier.cc/lussierj/minerops
Repair workflow
- Open /repairs.
- Search by MAC, IP, model, serial, or error.
- Add a repair note.
- Select part used and quantity if applicable.
- Set repair status.
- Use History to review, edit, or delete repair entries.
- Mark Ready to Shelf when repaired.
- Use Move to Shelf.
- Pick an open shelf position on /locations.
Retention check
Open /system-health and review the Retention section.
Also run:
pct exec 306 -- bash -lc "tail -n 120 /opt/minerops/logs/status-retention.log || true"
Check recent retention runs:
pct exec 306 -- bash -lc "docker exec -i minerops-postgres psql -U minerops -d minerops -c "SELECT mode, raw_status_rows_before, raw_status_rows_eligible_delete, raw_status_rows_deleted, hourly_rollup_rows_after, daily_rollup_rows_after, started_at, finished_at FROM minerops_retention_runs ORDER BY started_at DESC LIMIT 5;""
Retention is currently dry-run only. Do not switch to delete/apply mode until the dry-run has been reviewed.
Roll back to last Git version
Check current status first:
pct exec 306 -- bash -lc "cd /opt/minerops && git status --short"
To discard uncommitted file changes:
pct exec 306 -- bash -lc "cd /opt/minerops && git restore ."
To reset to the last committed version:
pct exec 306 -- bash -lc "cd /opt/minerops && git reset --hard HEAD"
Then rebuild backend if backend files were involved.
Important safety rules
- Do not commit .env files.
- Do not commit database dumps.
- Do not commit backups.
- Do not commit logs.
- Do not commit imports.
- Check Git status before and after every patch.
- Commit and push after every stable working change.
- Use /system-health after major changes.
Linux read-only miner scanner
A standalone Linux scanner is included at:
scripts/linux-miner-scanner.py
Run it from a Linux machine that can reach the miner networks. CT 306 may not have routes to the miner VLANs, so run this on the correct network.
Example:
python3 scripts/linux-miner-scanner.py --cidr 10.30.0.0/22 --cidr 10.80.0.0/22 --csv miner-scan.csv --json miner-scan.json
Single miner test:
python3 scripts/linux-miner-scanner.py --ip 10.30.0.138
Port check only:
python3 scripts/linux-miner-scanner.py --cidr 10.30.0.0/22 --no-query
This scanner is read-only. It checks legacy port 4028 and API3 port 4433.