--- name: project-novacpx-tools description: NovaCPX development tools and session-start checklist — load at start of every NovaCPX session metadata: node_type: memory type: project originSessionId: c454fc50-f93d-4ddd-b9f3-f3f442e89fb9 --- ## Session-start checklist (run at start of every NovaCPX session) 1. **Verify working directory**: `ls /tmp/novacpx/` — if missing, repo needs re-cloning 2. **Test VM reachability** (direct — PVE1 hop NOT needed): ```bash sshpass -p 'Joker1974!!!' ssh -o StrictHostKeyChecking=no -o ConnectTimeout=8 root@10.48.200.110 'echo vm-ok' ``` > PVE1 (orbisne.fortiddns.com) SSH is currently broken (permission denied). Direct to 10.48.200.110 works fine. 3. **Load TODO**: read `/root/.claude/projects/-home-myron/memory/project_novacpx_todo.md` 4. **Check panel live**: `curl -sk -o /dev/null -w "%{http_code}" https://10.48.200.110:8882/` ## Direct SSH / SCP (preferred method) ```bash # Run command on VM sshpass -p 'Joker1974!!!' ssh -o StrictHostKeyChecking=no root@10.48.200.110 'command here' # Copy file to VM sshpass -p 'Joker1974!!!' scp -o StrictHostKeyChecking=no /tmp/novacpx/panel/api/endpoints/foo.php \ root@10.48.200.110:/srv/novacpx/public/api/endpoints/foo.php ``` ## API auth pattern (session cookie) ```bash # Login and get token TOKEN=$(curl -sk -X POST "https://10.48.200.110:8882/api/auth/login" \ -H "Content-Type: application/json" \ -d '{"username":"admin","password":"Admin2026!"}' | python3 -c "import sys,json; print(json.load(sys.stdin)['data']['token'])") # Use token as ncpx_session cookie curl -sk "https://10.48.200.110:8882/api/system/version" -H "Cookie: ncpx_session=$TOKEN" ``` ## Tools in /tmp/novacpx/tools/ | Script | Purpose | Usage | |--------|---------|-------| | `nova-ssh.sh` | SSH into VM (double-hop via PVE1 — currently broken) | Use direct SSH instead | | `nova-push.sh` | Push single file via base64/double-hop (broken) | Use direct scp instead | | `nova-deploy.sh` | Full panel rsync (PVE1 hop — broken) | Use direct scp or git push | | `nova-status.sh` | Check SSH + port health | `bash tools/nova-status.sh [--full]` | | `nova-logs.sh` | Stream VM logs | `bash tools/nova-logs.sh [apache\|access\|install\|fail2ban\|all]` | | `nova-db.sh` | Run queries on VM DB | `bash tools/nova-db.sh [--tables\|--users\|--reset-admin pw\|"SQL"]` | ## Key VM paths - Panel web root: `/srv/novacpx/public/` - Git repo (source): `/opt/novacpx-src/` (what gets pulled by webhook/deploy-runner.sh) - Config: `/etc/novacpx/config.ini` (root:www-data 640) - DB: `/var/lib/novacpx/panel.db` (SQLite) - Deploy runner: `/opt/novacpx-src/deploy/deploy-runner.sh` (cron runs every min) - Webhook: `/opt/novacpx-src/deploy/webhook.php` (linked at /srv/novacpx/public/deploy/webhook.php) - Logs: `/var/log/apache2/error.log`, `/var/log/novacpx/access.log`, `/var/log/novacpx/deploy.log` - JARVIS agent: `/opt/jarvis-agent/` - Cron scripts: `/srv/novacpx/public/bin/` (cache-update-check.php, collect-stats.php, notify-checks.php) ## VM credentials - VM IP: 10.48.200.110 (PVE1 VM 120) - Root: `root / Joker1974!!!` - Admin panel: `admin / Admin2026!` - MySQL (customer sites): `novacpx_user / 6fyWj6vYnJDKEQvNANzj` - Ports: 8880 (user), 8881 (reseller), 8882 (admin), 8883 (webmail) **Why:** [[project-novacpx-todo]] **How to apply:** Start every NovaCPX session by running the session-start checklist so you know immediately if the VM is reachable before writing code.