migrate: update all references from DO server to PVE1 JARVIS VM

- config.php: JARVIS_IP → 10.48.200.211, HA_URL → direct LAN 10.48.200.97
- facts_collector/stats_cache: Proxmox API → direct 10.48.200.90 (not DDNS)
- chat.php: system context updated to reflect PVE1/nginx instead of DO/OLS
- do_server.php: display IP → 10.48.200.211 (reads /proc for JARVIS VM stats)
- jarvis-app.js: service labels nginx/mariadb instead of lshttpd
- jarvis-overlays.js: network map JARVIS node IP → 10.48.200.211
- index.html: DO SERVER labels → JARVIS VM, cache bust v=20260618a
- jarvis-agents.js: agent install URL uses window.location.origin

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-18 02:25:36 +00:00
parent ca66152f45
commit 38ab8d2977
8 changed files with 18 additions and 18 deletions
+3 -3
View File
@@ -2302,7 +2302,7 @@ if (!$reply) {
$sec = (int) file_get_contents('/proc/uptime');
$uptime = intdiv($sec, 86400) . 'd ' . intdiv($sec % 86400, 3600) . 'h';
$load = explode(' ', file_get_contents('/proc/loadavg'));
$systemContext .= "Jarvis server (165.22.1.228 DO): Memory {$memPct}%, Uptime {$uptime}, Load {$load[0]}.\n";
$systemContext .= "Jarvis server (10.48.200.211 PVE1): Memory {$memPct}%, Uptime {$uptime}, Load {$load[0]}.\n";
} catch (Exception $e) {}
$alerts = JarvisDB::query(
@@ -2317,12 +2317,12 @@ if (!$reply) {
$systemPrompt = "You are JARVIS — Just A Rather Very Intelligent System — the AI of {$userName} (address him as \"{$userAddr}\"). You manage his home network, servers, Proxmox VMs, websites, and Home Assistant smart home. Your personality: formal, efficient, British butler — like the AI in Iron Man. Be concise. Use technical precision.
Infrastructure:
- Jarvis Server: 165.22.1.228 (DigitalOcean, CyberPanel/OLS, Ubuntu 24.04)
- Jarvis Server: 10.48.200.211 (PVE1, nginx/PHP-FPM, Ubuntu 24.04)
- Ollama AI VM: 10.48.200.95 (local LLM server, llama3.1:8b + 70b)
- Proxmox Host: 10.48.200.90 (manages all VMs)
- Home Assistant: 10.48.200.97:8123
- FusionPBX: 134.209.72.226 / fusion.orbishosting.com (production DO server), Yealink T48S: 10.48.200.43
- Digital Ocean: 165.22.1.228 (tomsjavajive.com, epictravelexpeditions.com, tomtomgames.com, parkerslingshotrentals.com, orbishosting.com)
- Digital Ocean: 165.22.1.228 (website hosting — tomsjavajive.com, epictravelexpeditions.com, tomtomgames.com, parkerslingshotrentals.com, orbishosting.com)
- Network: 10.48.200.0/24, FortiGate firewall
Live data:
+1 -1
View File
@@ -60,7 +60,7 @@ $uptimeDays = intdiv($uptime, 86400);
$uptimeHrs = intdiv($uptime % 86400, 3600);
echo json_encode([
"ip" => DO_SERVER_IP,
"ip" => "10.48.200.211", // JARVIS VM (PVE1)
"reachable" => true,
"cpu_pct" => getCpuPct(),
"memory" => [
+2 -2
View File
@@ -100,7 +100,7 @@ function collect_all(): array {
$results['proxmox'] = 'skipped (fresh)';
} else try {
if (defined('PROXMOX_TOKEN_ID') && PROXMOX_TOKEN_ID) {
$base = 'https://orbisne.fortiddns.com:' . PROXMOX_PORT . '/api2/json';
$base = 'https://10.48.200.90:' . PROXMOX_PORT . '/api2/json';
$auth = 'Authorization: PVEAPIToken=' . PROXMOX_USER . '!' . PROXMOX_TOKEN_ID . '=' . PROXMOX_TOKEN_VAL;
$nd = pve_api_get("{$base}/nodes/" . PROXMOX_NODE . "/status", $auth);
@@ -135,7 +135,7 @@ function collect_all(): array {
// ── Digital Ocean ─────────────────────────────────────────────────────
try {
exec('ping -c1 -W2 165.22.1.228 > /dev/null 2>&1', $o2, $doCode);
exec("ping -c1 -W1 165.22.1.228 > /dev/null 2>&1", $o2, $doCode));
$doStatus = ($doCode === 0) ? 'online' : 'unreachable';
KBEngine::storeFact('do_server', 'do_status', $doStatus, '165.22.1.228', $ttl);
$results['do_server'] = "ok ({$doStatus})";
+1 -1
View File
@@ -36,7 +36,7 @@ function cacheStore(string $key, $data): void {
// ── Proxmox ──────────────────────────────────────────────────────────────
if (PROXMOX_HOST !== '10.48.200.X' && PROXMOX_TOKEN_VAL !== 'YOUR_TOKEN_VALUE_HERE') {
$pveBase = 'https://orbisne.fortiddns.com:' . PROXMOX_PORT . '/api2/json';
$pveBase = 'https://10.48.200.90:' . PROXMOX_PORT . '/api2/json';
$pveAuth = ['Authorization: PVEAPIToken=' . PROXMOX_USER . '!' . PROXMOX_TOKEN_ID . '=' . PROXMOX_TOKEN_VAL];
// Cluster resources API — returns all VMs/CTs from ALL nodes (pve + pve2)
+1 -1
View File
@@ -397,7 +397,7 @@ let _refreshTick = 0;
let selectedContext = null;
const _panelCtx = {};
let _haEntities = {};
const _svcLabels = {lshttpd:'WEB',mysql:'MYSQL',redis:'REDIS',memcached:'MEMCACHE',postfix:'POSTFIX',dovecot:'DOVECOT','jarvis-agent':'AGENT'};
const _svcLabels = {nginx:'WEB',mysql:'MYSQL',redis:'REDIS',memcached:'MEMCACHE',postfix:'POSTFIX',dovecot:'DOVECOT','jarvis-agent':'AGENT'};
async function refreshAll() {
_refreshTick++;
+1 -1
View File
@@ -141,7 +141,7 @@ function closeNetMap(){
function _nmBuild(devices){
_nmNodes=[]; _nmEdges=[]; _nmParticles=[];
// Hub
_nmNodes.push({id:'jarvis',label:'JARVIS',sub:'165.22.1.228',online:true,agent:true,ringIdx:0,angle:0,r:NM_RINGS[0].nodeR,pulse:0});
_nmNodes.push({id:'jarvis',label:'JARVIS',sub:'10.48.200.211',online:true,agent:true,ringIdx:0,angle:0,r:NM_RINGS[0].nodeR,pulse:0});
// Bucket
var buckets={proxmox:[],services:[],agents:[],devices:[],network:[]};
// Deduplicate agent devices by hostname (same logical host registered twice)
@@ -439,7 +439,7 @@ function openAgentModal() {
const modal = document.getElementById('agentModal');
const regKey = 'f846a9aaf7ce9a61742c63c87c4186052a71d2a580c65518';
const baseUrl = 'https://jarvis.orbishosting.com/agent';
const jUrl = 'https://jarvis.orbishosting.com';
const jUrl = window.location.origin;
if (os === 'tablet') {
title.textContent = '● JARVIS — TABLET / MOBILE';
+8 -8
View File
@@ -53,7 +53,7 @@
<div class="tb-center">
<div class="tb-stat">LOCAL&nbsp;<span id="tb-cpu">--</span>% CPU</div>
<div class="tb-stat">MEM&nbsp;<span id="tb-mem">--</span>%</div>
<div class="tb-stat">DO SERVER&nbsp;<span id="tb-do" class="text-dim">--</span></div>
<div class="tb-stat">JARVIS VM&nbsp;<span id="tb-do" class="text-dim">--</span></div>
<div class="tb-stat"><span id="tb-alerts" class="text-green">NO ALERTS</span></div>
<div class="tb-stat" id="tb-planner" style="display:none"><span id="tb-planner-text" class="text-yellow"></span></div>
</div>
@@ -292,7 +292,7 @@
</div>
<div class="bb-item">
<div class="bb-dot" id="bb-do-dot"></div>
<span>DO SERVER</span> <span id="bb-do-status">CHECKING</span>
<span>JARVIS VM</span> <span id="bb-do-status">CHECKING</span>
</div>
<div class="bb-item">
<div class="bb-dot" id="bb-pve-dot"></div>
@@ -418,12 +418,12 @@
style="position:fixed;top:-9999px;left:-9999px;width:320px;height:240px"></video>
<script data-cfasync="false" src="https://cdn.jsdelivr.net/npm/face-api.js@0.22.2/dist/face-api.min.js" crossorigin="anonymous"></script>
<script data-cfasync="false" src="assets/js/jarvis-effects.js?v=20260617b"></script>
<script data-cfasync="false" src="assets/js/jarvis-overlays.js?v=20260617b"></script>
<script data-cfasync="false" src="assets/js/jarvis-app.js?v=20260617b"></script>
<script data-cfasync="false" src="assets/js/panels/jarvis-arc.js?v=20260617b"></script>
<script data-cfasync="false" src="assets/js/panels/jarvis-agents.js?v=20260617b"></script>
<script data-cfasync="false" src="assets/js/panels/jarvis-assistant.js?v=20260617b"></script>
<script data-cfasync="false" src="assets/js/jarvis-effects.js?v=20260618a"></script>
<script data-cfasync="false" src="assets/js/jarvis-overlays.js?v=20260618a"></script>
<script data-cfasync="false" src="assets/js/jarvis-app.js?v=20260618a"></script>
<script data-cfasync="false" src="assets/js/panels/jarvis-arc.js?v=20260618a"></script>
<script data-cfasync="false" src="assets/js/panels/jarvis-agents.js?v=20260618a"></script>
<script data-cfasync="false" src="assets/js/panels/jarvis-assistant.js?v=20260618a"></script>
<!-- VISION LIGHTBOX -->
<div id="vision-lightbox">