root 9361b9c4c1 Make restore-from-standby actually work, not just look wired
Two gaps found testing this live from the standby:

1. restore.html's "Restore on This Server" was checked by default
   regardless of RUNNING_ON_MAIN_SERVER — on the standby that option is
   nonsensical (no local cluster/kubectl at all) and restore_start()
   would have just tried and failed confusingly. Now: that radio is
   disabled with an explanatory note when not on the main server,
   "External Machine" is checked instead and pre-filled with the tunnel
   details (localhost:2224, contabo-key) so restoring from the standby
   just targets the real main server without the user having to know
   any of that. Added a matching server-side guard in restore_start()
   for target=='local' + not RUNNING_ON_MAIN_SERVER (defense in depth —
   the UI already prevents it, this catches a direct API call too).
   Also fixed refreshSystemMetrics() in platform.js, which would have
   overwritten the disabled option's label with the (now-correct, see
   previous commit) main-server hostname — looking like a working local
   target when it isn't.

2. sync-standby-platform.sh only ever mirrored platform/ — but
   restore_start() references /root/CloudOps/backup/restore-k8s-apps.sh
   as a fixed absolute path to scp to the remote target, and that
   directory never existed on the VM at all. Every restore attempt from
   the standby failed immediately with "restore-k8s-apps.sh not found",
   regardless of target. Now mirrors /root/CloudOps/backup/ too.

Verified end-to-end for real: triggered a restore of frappe/erpnext from
the standby's actual web UI (target=remote, localhost:2224) — connected
over the tunnel, copied the backup archive + script to the main server,
ran restore-k8s-apps.sh there, scaled the deployment down/up, restored
the DB. Confirmed after: 740 tables in the DB, /api/method/ping
responding on the live pod. Not a dry run — a real restore, actually
initiated from the standby machine.
2026-08-21 13:55:43 +02:00

CloudOps - Infrastructure Management & Disaster Recovery Platform

Overview

This repository contains the complete infrastructure code for Navitrends' backup and disaster recovery platform.

Components

  • Platform: Flask web application for backup/restore management
  • Scripts: Backup, restore, and sync scripts
  • Docker Compose: Configuration for all 5 applications

Applications Managed

  • Nextcloud (File sharing)
  • Odoo (ERP/CRM)
  • Frappe/ERPNext
  • Mautic (Marketing automation)
  • n8n (Workflow automation)

Servers

  • Main Server: 173.249.20.244
  • Backup VM: 192.168.152.128
Description
Cloud Infrastructure Management & Disaster Recovery Platform
Readme 40 MiB
Languages
PHP 66.6%
JavaScript 15.8%
Twig 8.6%
CSS 4.4%
Less 2.1%
Other 2.4%