docs: Add comprehensive project documentation from claude-projects scan

Added:
- PROJECTS_INDEX.md - Master catalog of 7 active projects
- GURURMM_API_ACCESS.md - Complete API documentation and credentials
- clients/dataforth/dos-test-machines/README.md - DOS update system docs
- clients/grabb-durando/website-migration/README.md - Migration procedures
- clients/internal-infrastructure/ix-server-issues-2026-01-13.md - Server issues
- projects/msp-tools/guru-connect/README.md - Remote desktop architecture
- projects/msp-tools/toolkit/README.md - MSP PowerShell tools
- projects/internal/acg-website-2025/README.md - Website rebuild docs
- test_gururmm_api.py - GuruRMM API testing script

Modified:
- credentials.md - Added GuruRMM database and API credentials
- GuruRMM agent integration files (WebSocket transport)

Total: 38,000+ words of comprehensive project documentation

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-22 09:58:32 -07:00
parent f79ca039dd
commit 07816eae46
40 changed files with 9266 additions and 538 deletions

View File

@@ -0,0 +1,447 @@
# Dataforth DOS Test Machines Project
**Client:** Dataforth Corporation
**Status:** 90% Complete, Working
**Project Start:** 2025-12-14
**Last Updated:** 2026-01-22
## Project Overview
Automated update and management system for approximately 30 DOS 6.22 test stations running QuickBASIC 4.5 data acquisition software at Dataforth's engineering facility.
**Primary Challenge:** Legacy DOS machines require SMB1 protocol, Windows Kerberos authentication incompatible with DOS networking.
**Solution:** D2TESTNAS (TrueNAS) acts as SMB1-to-SMB2 proxy with bidirectional sync to AD2 production server.
---
## Architecture
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ DOS Machines │◄──SMB1─►│ D2TESTNAS │◄──SMB2─►│ AD2 │
│ (TS-XX) │ │ (192.168.0.9) │ │ (192.168.0.6) │
│ DOS 6.22 │ │ TrueNAS/proxy │ │ Production Svr │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ Sync every 15 min
[Bidirectional Sync]
/root/sync-to-ad2.sh
```
---
## Network Configuration
| Device | IP | Role | OS | Credentials |
|--------|-----|------|-----|-------------|
| D2TESTNAS | 192.168.0.9 | NAS/SMB1 proxy | TrueNAS | admin / Paper123!@#-nas |
| AD2 | 192.168.0.6 | Production server | Windows Server 2008 R2 | INTRANET\sysadmin / Paper123!@# |
| UDM | 192.168.0.254 | Gateway/Router | UniFi Dream Machine | admin / [see credentials.md] |
| DOS Stations | 192.168.0.x | Test stations (TS-XX) | DOS 6.22 | N/A |
**Network:** 192.168.0.0/24 (Dataforth engineering network)
---
## Key Components
### 1. SMB Shares
#### D2TESTNAS Shares (SMB1)
- **test:** `/data/test/` - Main working share for DOS machines
- **datasheets:** `/data/datasheets/` - Engineering documentation and configs
#### AD2 Shares (SMB2)
- **\\AD2\test** - C:\Shares\test\ (production working directory)
- **\\AD2\datasheets** - PENDING (waiting on Engineering input)
### 2. UPDATE.BAT - Remote Management Utility
**Location:**
- NAS: `/data/test/UPDATE.BAT`
- AD2: `C:\Shares\test\UPDATE.BAT`
- DOS: `T:\UPDATE.BAT` (via mapped drive)
**Usage:**
```batch
REM Update all components for station TS-27
T:\UPDATE TS-27 ALL
REM Update specific component
T:\UPDATE TS-27 GPIB
T:\UPDATE TS-27 AUTOEXEC
```
**Functions:**
- Deploys configuration files from central location
- Updates AUTOEXEC.BAT, CONFIG.SYS
- Syncs GPIB drivers and QuickBASIC modules
- Creates station-specific directories
### 3. TODO.BAT - Automated Task Execution
**Location:** `T:\TS-XX\TODO.BAT` (created by admin on AD2)
**Behavior:**
- Placed in station-specific folder: `\\AD2\test\TS-XX\TODO.BAT`
- Sync copies to NAS (every 15 min)
- DOS machine runs on boot via AUTOEXEC.BAT
- Automatically deletes after execution
- Results logged to `TS-XX\TODO.LOG`
**Example Use Cases:**
- Remote diagnostic commands
- Configuration updates
- File collection
- System information gathering
### 4. Bidirectional Sync System
**Script:** `/root/sync-to-ad2.sh` on D2TESTNAS
**Credentials:** `/root/.ad2creds`
```
username=sysadmin
password=Paper123!@#
domain=INTRANET
```
**Log:** `/var/log/ad2-sync.log`
**Schedule:** Every 15 minutes via cron
```cron
*/15 * * * * /root/sync-to-ad2.sh >> /var/log/ad2-sync.log 2>&1
```
**Sync Strategy:**
- **NAS → AD2:** rsync with --update (newer files win)
- **AD2 → NAS:** rsync with --update (newer files win)
- **Deletions:** Not synced (safety measure)
- **Conflicts:** Newer timestamp wins
**Monitoring:**
```bash
# View recent sync activity
ssh root@192.168.0.9 'tail -50 /var/log/ad2-sync.log'
# Check sync status file
smbclient //192.168.0.6/test -U sysadmin%'Paper123!@#' -c 'get _SYNC_STATUS.txt -'
```
---
## DOS Machine Configuration
### Network Setup
Each DOS station uses Microsoft Network Client 3.0:
**AUTOEXEC.BAT:**
```batch
@ECHO OFF
C:\NET\NET START
NET USE T: \\D2TESTNAS\TEST
IF EXIST T:\TS-XX\TODO.BAT CALL T:\TS-XX\TODO.BAT
```
**PROTOCOL.INI:**
- Workgroup: WORKGROUP
- ComputerName: TS-XX
- Protocol: NetBEUI over SMB1 CORE
### WINS Configuration
**Critical:** WINS server (192.168.0.254) required for NetBIOS name resolution.
Without WINS, DOS machines cannot resolve `\\D2TESTNAS` to 192.168.0.9.
---
## File Locations
### On D2TESTNAS (192.168.0.9)
```
/data/test/
├── UPDATE.BAT # Central management utility
├── TS-XX/ # Per-station folders
│ ├── TODO.BAT # Remote task (if present)
│ └── TODO.LOG # Task execution log
├── CONFIGS/ # Master config templates
├── GPIB/ # GPIB driver files
└── _SYNC_STATUS.txt # Last sync timestamp
/data/datasheets/
└── CONFIGS/ # Full DOS image from TS-27
└── [1790 files, 44MB]
```
### On AD2 (192.168.0.6)
```
C:\Shares\test\
├── UPDATE.BAT
├── TS-XX\
│ ├── TODO.BAT
│ └── TODO.LOG
├── CONFIGS\
├── GPIB\
└── _SYNC_STATUS.txt
```
### On DOS Machines
```
C:\
├── AUTOEXEC.BAT # Network startup + TODO execution
├── CONFIG.SYS # Device drivers
├── NET\ # Network client files
├── GPIB\ # GPIB ISA card drivers
└── QB45\ # QuickBASIC 4.5
T:\ (mapped to \\D2TESTNAS\TEST)
├── UPDATE.BAT
├── TS-XX\
│ └── TODO.BAT (if present)
└── [shared files]
```
---
## Common Operations
### Accessing Infrastructure
#### SSH to NAS
```bash
ssh root@192.168.0.9
# Uses ed25519 key from ~/.ssh/id_ed25519
```
#### SMB to NAS (from Windows)
```bash
# Via PowerShell
New-SmbMapping -LocalPath T: -RemotePath \\192.168.0.9\test -UserName admin -Password Paper123!@#-nas
# Via Command Prompt
net use T: \\192.168.0.9\test /user:admin Paper123!@#-nas
```
#### SMB to AD2
```bash
# Via PowerShell (from GuruRMM/Jupiter)
$password = ConvertTo-SecureString 'Paper123!@#' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential('INTRANET\sysadmin', $password)
New-PSDrive -Name AD2 -PSProvider FileSystem -Root "\\192.168.0.6\C$" -Credential $cred
```
### Deploying Updates to DOS Machines
#### Method 1: UPDATE.BAT (Normal Operation)
```batch
REM Edit UPDATE.BAT on AD2
\\192.168.0.6\test\UPDATE.BAT
REM Wait for sync (every 15 min) or trigger manually:
ssh root@192.168.0.9 '/root/sync-to-ad2.sh'
REM On DOS machine:
T:\UPDATE TS-XX ALL
```
#### Method 2: TODO.BAT (Remote Execution)
```batch
REM Create TODO.BAT on AD2
echo DIR C:\ > \\192.168.0.6\test\TS-27\TODO.BAT
REM Wait for sync
REM DOS machine runs on next boot, then deletes TODO.BAT
REM Check results
type \\192.168.0.6\test\TS-27\TODO.LOG
```
### Monitoring Sync
```bash
# View sync log
ssh root@192.168.0.9 'tail -50 /var/log/ad2-sync.log'
# Check last sync status
smbclient //192.168.0.6/test -U sysadmin%'Paper123!@#' -c 'get _SYNC_STATUS.txt -'
# Manual sync trigger
ssh root@192.168.0.9 '/root/sync-to-ad2.sh'
```
### Testing DOS Machine
```batch
REM From DOS machine:
C:\NET\NET VIEW
C:\NET\NET USE
DIR T:\
REM Test UPDATE.BAT
T:\UPDATE TS-XX ALL
REM Check for TODO.BAT
IF EXIST T:\TS-XX\TODO.BAT TYPE T:\TS-XX\TODO.BAT
```
---
## Tested Machines
| Station | Status | Last Test | Notes |
|---------|--------|-----------|-------|
| TS-27 | ✅ Working | 2025-12-14 | Reference machine, full config captured |
| TS-8L | ✅ Working | 2025-12-14 | Network config updated |
| TS-8R | ✅ Working | 2025-12-14 | Network config updated |
| TS-XX (others) | ⏳ Pending | N/A | ~27 machines need config updates |
---
## Remaining Tasks
### High Priority
- [ ] Create `\\AD2\datasheets` share (waiting on Engineering input for folder location)
- [ ] Update network configuration on remaining ~27 DOS machines
- [ ] Document QuickBASIC application details (if Engineering provides info)
### Medium Priority
- [ ] Create comprehensive DOS machine inventory
- [ ] Test TODO.BAT on all stations
- [ ] Set up automated health monitoring
### Low Priority
- [ ] Explore VPN access for remote management
- [ ] Investigate modern DOS alternatives (FreeDOS, etc.)
- [ ] Create backup/restore procedures for DOS machine images
---
## Troubleshooting
### DOS Machine Cannot Access T: Drive
**Check:**
1. Network cable connected?
2. WINS server reachable? `ping 192.168.0.254`
3. NetBIOS name resolution? Try IP: `NET USE T: \\192.168.0.9\TEST`
4. NAS share accessible? Test from Windows: `\\192.168.0.9\test`
**Common Fixes:**
- Restart network client: `C:\NET\NET STOP` then `C:\NET\NET START`
- Check PROTOCOL.INI for typos
- Verify WINS server setting in UDM
### Sync Not Working
**Check:**
1. Cron running? `ssh root@192.168.0.9 'ps aux | grep cron'`
2. Credentials valid? `cat /root/.ad2creds`
3. SMB mount successful? `ssh root@192.168.0.9 'mount | grep /mnt/ad2-test'`
4. Recent errors? `ssh root@192.168.0.9 'tail -50 /var/log/ad2-sync.log'`
**Common Fixes:**
- Re-mount AD2 share: Run sync script manually
- Check AD2 reachability: `ping 192.168.0.6`
- Verify sysadmin credentials
### UPDATE.BAT Fails
**Check:**
1. Batch file has DOS line endings (CR+LF)?
2. Paths correct for DOS (8.3 format if needed)?
3. Files exist on T: drive?
4. Sufficient disk space on C: drive?
**Common Fixes:**
- Convert line endings: `unix2dos UPDATE.BAT`
- Test manually: Run commands one by one
- Check sync: Files may not be on NAS yet
---
## Technical Details
### DOS 6.22 Limitations
- **Filenames:** 8.3 format only (FILENAME.EXT)
- **Line Endings:** CR+LF (\\r\\n) required for batch files
- **Networking:** SMB1 CORE protocol only
- **Authentication:** No Kerberos, plaintext passwords
- **Memory:** 640KB conventional + extended via HIMEM.SYS
### SMB Protocol Versions
- **SMB1 CORE:** DOS machines (1985, insecure)
- **SMB1:** Windows XP / Server 2003
- **SMB2:** Windows Vista / Server 2008+
- **SMB3:** Windows 8 / Server 2012+
### TrueNAS Configuration
- SMB service enabled with SMB1 support
- Guest access disabled
- User: admin with password authentication
- Shares: test, datasheets
---
## Documentation
### Original Implementation
**Session Log:** `~/claude-projects/session-logs/2025-12-14-dataforth-dos-machines.md`
**Implementation Time:** ~11 hours
**Date:** 2025-12-14
### Additional Documentation
- **CREDENTIALS.md** - All access credentials
- **NETWORK_TOPOLOGY.md** - Network diagram and IP addresses
- **SYNC_SCRIPT.md** - Bidirectional sync documentation
- **DOS_BATCH_FILES.md** - UPDATE.BAT and TODO.BAT details
- **GITEA_ACCESS.md** - Repository access instructions
- **PROJECT_INDEX.md** - Quick reference guide
### Source Repository
```bash
git clone --no-checkout https://git.azcomputerguru.com/azcomputerguru/claude-projects.git
cd claude-projects
git sparse-checkout init --cone
git sparse-checkout set dataforth-dos
git checkout main
```
---
## Project History
**2025-12-14:** Initial implementation, sync system created, TS-27/TS-8L/TS-8R tested
**2025-12-20:** VPN access configured for remote management
**2026-01-13:** Dataforth DOS project recalled for additional work
**2026-01-19:** DOS deployment verification, AD2-NAS sync enhancements
**2026-01-20:** DOS Update System comprehensive documentation created
**2026-01-22:** Project documentation imported to ClaudeTools
---
## Support Contacts
**Client:** Dataforth Corporation
**Engineering Contact:** [Pending]
**Network Administrator:** [Pending]
**Technical Support:**
- Arizona Computer Guru (MSP)
- Phone: 520.304.8300
- Email: support@azcomputerguru.com
---
## Related Projects
- **GuruRMM:** Remote monitoring system (AD2 has agent installed)
- **ClaudeTools:** Project tracking and documentation system
- **Session Logs:** Complete work history in claude-projects/session-logs/
---
**Project Status:** 90% Complete, Operational
**Next Steps:** Datasheets share creation, remaining machine configs
**Maintenance:** Automated sync, minimal intervention required

View File

@@ -0,0 +1,441 @@
# Grabb & Durando Website Migration Project
**Client:** Grabb & Durando Law Firm
**Project Type:** Website Migration
**Status:** Planning Phase
**Priority:** URGENT (source server 99% disk full)
**Target Date:** ASAP
## Critical Issue
**Source Server (GoDaddy VPS)** is 99% full with only 1.6GB free space!
Migration must happen soon to prevent service disruption.
---
## Overview
Migration of **data.grabbanddurando.com** custom PHP application from GoDaddy VPS to ix.azcomputerguru.com.
**Primary Domain:** grabbanddurando.com (hosted on WebSvr)
**Subdomain:** data.grabbanddurando.com (currently on GoDaddy VPS, target: IX)
---
## Current Configuration
### DNS & Hosting Summary
| Domain/Subdomain | Current Server | IP Address | Status |
|------------------|----------------|------------|--------|
| grabbanddurando.com | WebSvr (ACG) | 162.248.93.81 | Stable |
| **data.grabbanddurando.com** | **GoDaddy VPS** | **208.109.235.224** | **URGENT: 99% disk** |
### Source Server: GoDaddy VPS (208.109.235.224)
**Status:** LIVE PRODUCTION SITE
**Server Details:**
- **OS:** CloudLinux 9.6
- **cPanel:** v126.0 (build 11)
- **Disk:** 99% full (1.6GB free!) - CRITICAL
- **SSH Access:** `ssh -i ~/.ssh/id_ed25519 root@208.109.235.224`
**Application Details:**
- **cPanel Account:** grabbandurando
- **Document Root:** `/home/grabbanddurando/public_html/new_gdapp`
- **App Size:** 1.8 GB
- **PHP Version:** ea-php74 (PHP 7.4)
- **Framework:** Custom PHP application using mysqli
**Database:**
- **Name:** grabblaw_gdapp
- **Size:** 31 MB
- **User:** grabblaw_gdapp
- **Password:** e8o8glFDZD
- **Host:** localhost
- **Type:** MySQL/MariaDB
**Application Files:**
- **Config:** `/home/grabbanddurando/public_html/new_gdapp/connection.php`
- **Structure:** Custom PHP app with mysqli database connections
### Target Server: ix.azcomputerguru.com (72.194.62.5)
**Server Details:**
- **OS:** CloudLinux 9.7
- **cPanel:** Yes
- **Public IP:** 72.194.62.5
- **Disk:** 4.1TB free on /home - plenty of space
- **SSH Access:** `ssh root@ix.azcomputerguru.com`
**Account Status:** Does NOT exist yet
- Need to create grabbanddurando account OR add subdomain to existing account
---
## Migration Components
### 1. Web Application Files
- **Location:** `/home/grabbanddurando/public_html/new_gdapp/`
- **Size:** 1.8 GB
- **Content:** PHP files, assets, uploaded documents, old zip backups
### 2. Database
- **Name:** grabblaw_gdapp
- **Size:** 31 MB
- **Type:** MySQL/MariaDB
- **Structure:** Custom schema for law firm data application
### 3. Configuration Files
- **connection.php** - Database credentials (mysqli)
- **.htaccess** - Apache rewrite rules (if present)
- **php.ini** - PHP settings (if custom)
### 4. DNS Update
- **Record Type:** A record
- **Current:** data.grabbanddurando.com → 208.109.235.224
- **Target:** data.grabbanddurando.com → 72.194.62.5
- **DNS Management:** WebSvr WHM Zone Editor (ACG Hosting nameservers)
---
## Migration Plan
### Phase 1: Preparation
**On IX Server:**
1. Create cPanel account for grabbanddurando.com OR add data.grabbanddurando.com as subdomain to existing account
2. Verify PHP 7.4 availability:
```bash
/usr/local/bin/ea-php74 -v
```
3. Create MySQL database and user:
```sql
CREATE DATABASE grabblaw_gdapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'grabblaw_gdapp'@'localhost' IDENTIFIED BY 'NEW_SECURE_PASSWORD';
GRANT ALL PRIVILEGES ON grabblaw_gdapp.* TO 'grabblaw_gdapp'@'localhost';
FLUSH PRIVILEGES;
```
### Phase 2: Data Transfer (GoDaddy → IX)
**Export Database on GoDaddy:**
```bash
ssh -i ~/.ssh/id_ed25519 root@208.109.235.224
# Create database dump
mysqldump -u grabblaw_gdapp -p'e8o8glFDZD' grabblaw_gdapp > /tmp/grabblaw_gdapp.sql
# Verify dump
ls -lh /tmp/grabblaw_gdapp.sql
```
**Transfer Files:**
```bash
# Server-to-server rsync (direct from GoDaddy to IX)
rsync -avz --progress \
root@208.109.235.224:/home/grabbanddurando/public_html/new_gdapp/ \
root@ix.azcomputerguru.com:/home/TARGET_ACCOUNT/public_html/new_gdapp/
# Alternative: Transfer via local machine
scp -i ~/.ssh/id_ed25519 root@208.109.235.224:/tmp/grabblaw_gdapp.sql ./
scp grabblaw_gdapp.sql root@ix.azcomputerguru.com:/tmp/
```
**Transfer Database:**
```bash
# Copy database dump to IX
scp root@208.109.235.224:/tmp/grabblaw_gdapp.sql root@ix.azcomputerguru.com:/tmp/
```
### Phase 3: Import on IX
**Import Database:**
```bash
ssh root@ix.azcomputerguru.com
# Import database dump
mysql -u grabblaw_gdapp -p'NEW_SECURE_PASSWORD' grabblaw_gdapp < /tmp/grabblaw_gdapp.sql
# Verify import
mysql -u grabblaw_gdapp -p'NEW_SECURE_PASSWORD' grabblaw_gdapp -e "SHOW TABLES;"
```
**Update Configuration:**
```bash
# Edit connection.php
nano /home/TARGET_ACCOUNT/public_html/new_gdapp/connection.php
# Update database credentials:
# - host: localhost
# - database: grabblaw_gdapp
# - username: grabblaw_gdapp
# - password: NEW_SECURE_PASSWORD
```
**Set Permissions:**
```bash
# Fix ownership
chown -R TARGET_ACCOUNT:TARGET_ACCOUNT /home/TARGET_ACCOUNT/public_html/new_gdapp/
# Fix permissions
find /home/TARGET_ACCOUNT/public_html/new_gdapp/ -type d -exec chmod 755 {} \;
find /home/TARGET_ACCOUNT/public_html/new_gdapp/ -type f -exec chmod 644 {} \;
```
### Phase 4: Testing
**Hosts File Test:**
```
# Add to local machine /etc/hosts (Linux/Mac) or C:\Windows\System32\drivers\etc\hosts (Windows)
72.194.62.5 data.grabbanddurando.com
# Test in browser
https://data.grabbanddurando.com
# Remove hosts entry after testing
```
**Verification Checklist:**
- [ ] Login functionality works
- [ ] Database queries successful
- [ ] File uploads work
- [ ] All pages load without errors
- [ ] SSL certificate valid
- [ ] PHP errors logged (check error_log)
### Phase 5: DNS Cutover
**Update DNS on WebSvr:**
```bash
# SSH to WebSvr
ssh root@websvr.acghosting.com
# Edit zone file in WHM Zone Editor
# OR via command line:
# Update data.grabbanddurando.com A record from 208.109.235.224 to 72.194.62.5
```
**DNS Record:**
```
data.grabbanddurando.com. 3600 IN A 72.194.62.5
```
**Propagation:**
- Wait 1-4 hours for DNS propagation
- Monitor with: `dig data.grabbanddurando.com +short`
- Test from multiple locations
### Phase 6: Post-Migration
**Monitor:**
- Check IX server logs for PHP errors
- Monitor database performance
- Verify SSL certificate auto-renews (Let's Encrypt)
- Check disk space usage
**Client Communication:**
- Notify Grabb & Durando of successful migration
- Confirm application functionality
- Provide new server details for their records
**Cleanup (after 1 week):**
- Remove application from GoDaddy VPS (free up disk space)
- Keep database backup for 30 days
- Cancel GoDaddy VPS subscription (if no longer needed)
---
## Technical Notes
### Why WHM Transfer Won't Work
Built-in WHM transfer tools expect to move entire cPanel accounts. In this case:
1. Main domain (grabbanddurando.com) is on WebSvr
2. Subdomain app (data.grabbanddurando.com) is on GoDaddy VPS
3. Only migrating subdomain's application and database
4. Subdomain is part of different accounts on different servers
5. DNS managed on WebSvr (ACG Hosting nameservers)
**Solution:** Manual migration via rsync and database dump/restore.
### PHP 7.4 Compatibility
Application built for PHP 7.4 (ea-php74). IX server must have this version available.
**Check IX PHP versions:**
```bash
ls /opt/cpanel/ea-php*/root/usr/bin/php
```
If PHP 7.4 not available, install via EasyApache 4 in WHM.
### SSL Certificate
After DNS update, SSL certificate will need to be reissued for new server.
**Options:**
1. Let's Encrypt (free, auto-renewal via cPanel)
2. Existing certificate (if portable)
3. New commercial certificate
**cPanel AutoSSL:** Should auto-detect and issue Let's Encrypt cert within hours of DNS propagation.
---
## Rollback Plan
If issues occur after DNS cutover:
1. **Immediate:** Revert DNS A record to 208.109.235.224
2. **Wait:** 5-10 minutes for DNS to propagate back
3. **Investigate:** Fix issues on IX server
4. **Retry:** Update DNS again when ready
**Keep GoDaddy VPS active** for at least 1 week after successful migration.
---
## Server Access
### GoDaddy VPS (Source)
```bash
ssh -i ~/.ssh/id_ed25519 root@208.109.235.224
```
### IX Server (Target)
```bash
ssh root@ix.azcomputerguru.com
# OR
ssh root@172.16.3.10 # Internal IP
```
### WebSvr (DNS Management)
```bash
ssh root@websvr.acghosting.com
```
---
## Useful Commands
### Database Operations
```bash
# Export database
mysqldump -u USER -pPASS DATABASE > backup.sql
# Import database
mysql -u USER -pPASS DATABASE < backup.sql
# Show database size
mysql -u USER -pPASS -e "SELECT table_schema AS 'Database',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.tables
WHERE table_schema='grabblaw_gdapp'
GROUP BY table_schema;"
```
### File Transfer
```bash
# Rsync with progress
rsync -avz --progress SOURCE/ DEST/
# SCP single file
scp file.sql root@server:/tmp/
# Check transfer size before rsync
du -sh /path/to/files
```
### DNS Verification
```bash
# Check current DNS
dig data.grabbanddurando.com +short
# Check from specific nameserver
dig @8.8.8.8 data.grabbanddurando.com +short
# Trace DNS path
dig data.grabbanddurando.com +trace
```
---
## Timeline
**Estimated Duration:** 2-4 hours
**Breakdown:**
- Preparation: 30 minutes
- Data transfer: 1-2 hours (depending on GoDaddy → IX network speed)
- Testing: 30 minutes
- DNS cutover: 15 minutes
- Monitoring: 1-4 hours (DNS propagation)
**Recommended Time:** Off-hours (evening/weekend) to minimize user impact
---
## Contacts
**Client:** Grabb & Durando Law Firm
**Primary Contact:** [Pending]
**Email:** [Pending]
**Phone:** [Pending]
**Technical Support:**
- Arizona Computer Guru (MSP)
- Mike Swanson: mike@azcomputerguru.com
- Phone: 520.304.8300
---
## Related Documentation
**Session Logs:**
- `~/claude-projects/session-logs/2025-12-15-data-grabbanddurando-complete.md`
- `~/claude-projects/session-logs/2025-12-15-data-grabbanddurando-mariadb-fix.md`
- `~/claude-projects/session-logs/2025-12-15-grabbanddurando-calendar-fix.md`
**Additional Notes:**
- `~/claude-projects/grabb-website-move/email-to-jason-data-app.md`
- `~/claude-projects/grabb-website-move/ix-security-hardening-notes.md`
---
## Post-Migration Enhancements (Optional)
After successful migration, consider:
1. **Performance Optimization:**
- Enable OPcache for PHP
- Configure MariaDB query cache
- Implement Redis for session storage
2. **Security Hardening:**
- Update PHP to 8.x (test compatibility first)
- Implement Wordfence or similar WAF
- Enable CSP headers
- Regular security audits
3. **Backup Strategy:**
- Daily database backups
- Weekly full application backups
- Offsite backup storage (S3, etc.)
4. **Monitoring:**
- Uptime monitoring
- Performance metrics
- Error tracking (Sentry, etc.)
---
**Project Status:** Planning Phase - Ready to Execute
**Next Step:** Create cPanel account on IX and schedule migration window with client
**Priority:** URGENT - Source server critically low on disk space

View File

@@ -0,0 +1,346 @@
# IX Server Critical Performance Issues
**Server:** ix.azcomputerguru.com (172.16.3.10 / 72.194.62.5)
**Report Date:** 2026-01-13
**Status:** Documented - Action Required
**Priority:** CRITICAL
## Executive Summary
Comprehensive scan of ix.azcomputerguru.com web hosting server revealed critical performance issues across multiple client sites. Primary issues: massive error logs (468MB on arizonahatters.com), database bloat (310MB on peacefulspirit.com), and Wordfence-induced memory exhaustion.
---
## Critical Priority Sites
### 1. arizonahatters.com - MOST URGENT
**Error Log:** 468MB
**PHP Memory Errors:** 429 occurrences
**Database:** 24.5MB (Wordfence bloat: wp_wffilemods 8.52MB, wp_wfknownfilelist 4.52MB)
**Issue:** Wordfence file scanning causing continuous memory exhaustion
**Impact:**
- Site performance degraded
- Server resources exhausted
- Risk of complete service failure
**Action Required:**
1. Disable Wordfence file scanning temporarily
2. Clear Wordfence file modification tables
3. Truncate error log: `/home/arizonahatters/public_html/wp-content/debug.log`
4. Re-enable Wordfence with adjusted settings (scan schedule, memory limit)
**Commands:**
```bash
# Backup then truncate error log
ssh root@172.16.3.10
cd /home/arizonahatters/public_html/wp-content/
cp debug.log debug.log.backup.2026-01-13
> debug.log
# Database cleanup (via WP-CLI)
wp db query "TRUNCATE TABLE wp_wffilemods;" --path=/home/arizonahatters/public_html/
wp db query "TRUNCATE TABLE wp_wfknownfilelist;" --path=/home/arizonahatters/public_html/
```
---
### 2. peacefulspirit.com
**Error Log:** 4.0MB
**PHP Memory Errors:** 2 occurrences
**Database:** 310MB! (wp_wpml_mails: 156MB, wp_gf_entry_meta: 96MB)
**Issue:** WPML email logs and Gravity Forms data bloat
**Impact:**
- Slow database queries
- Backup size excessive
- Disk space waste
**Action Required:**
1. Truncate WPML email logs table
2. Archive or delete old Gravity Forms entries
3. Configure WPML to limit email log retention
4. Implement Gravity Forms entry retention policy
**Commands:**
```bash
# WPML email logs cleanup
wp db query "TRUNCATE TABLE wp_wpml_mails;" --path=/home/peacefulspirit/public_html/
# Gravity Forms cleanup (entries older than 1 year)
wp db query "DELETE FROM wp_gf_entry WHERE date_created < DATE_SUB(NOW(), INTERVAL 1 YEAR);" --path=/home/peacefulspirit/public_html/
wp db query "DELETE FROM wp_gf_entry_meta WHERE entry_id NOT IN (SELECT id FROM wp_gf_entry);" --path=/home/peacefulspirit/public_html/
```
---
## High Priority Sites (>50MB Error Logs)
| Site | Error Log Size | Primary Issue |
|------|---------------|---------------|
| desertfox.com | 215MB | Unknown - needs investigation |
| outaboundssports.com | 208MB | Unknown - needs investigation |
| rrspc.com | 183MB | Unknown - needs investigation |
| farwest.com | 100MB | Unknown - needs investigation |
| fsgtucson.com | 64MB | Unknown - needs investigation |
| tonystech.com | 54MB | Unknown - needs investigation |
| phxpropane.com | 52MB | Unknown - needs investigation |
| rednourlaw.com | 50MB | Unknown - needs investigation |
| gurushow.com | 40MB | Unknown - needs investigation |
| cryoweave.com | 37MB | Unknown - needs investigation |
| bruceext.com | 31MB | Unknown - needs investigation |
**Recommended Action:**
1. Rotate error logs (backup and truncate)
2. Analyze recent errors for patterns
3. Address root causes (plugin conflicts, PHP errors, etc.)
4. Implement log rotation via logrotate
---
## Medium Priority Sites (Debug Logs)
| Site | Debug Log Size | Additional Issues |
|------|---------------|-------------------|
| gentlemansacres.com | debug.log: 350MB | N/A |
| azrestaurant.com | debug.log: 181MB, itsec_logs: 53MB | iThemes Security logs |
| rsi.com | debug.log: 166MB | N/A |
| voicesofthewest.com | akeeba log: 106MB | Backup log bloat |
**Action Required:**
- Disable WP_DEBUG in production (wp-config.php)
- Truncate debug logs
- Configure iThemes Security log retention
- Clean up Akeeba backup logs
---
## Common Issues Found
### 1. Wordfence Database Bloat (Most Sites)
**Tables:**
- wp_wffilemods: 1.4-8.52MB
- wp_wfknownfilelist: 0.86-4.52MB
- wp_wfconfig: Up to 3.30MB
**Solution:**
```sql
-- Run on each affected site
TRUNCATE TABLE wp_wffilemods;
TRUNCATE TABLE wp_wfknownfilelist;
DELETE FROM wp_wfconfig WHERE name LIKE '%filemod%';
```
### 2. Email/Form Logs
**Common Culprits:**
- WPML email logs (wp_wpml_mails)
- Gravity Forms entries (wp_gf_entry, wp_gf_entry_meta)
- Post SMTP logs
- Action Scheduler logs
**Solution:** Implement retention policies, truncate old data
### 3. Old Backups (Disk Space)
| Site | Backup Size | Age |
|------|-------------|-----|
| acepickupparts | 1.6GB | Various |
| azcomputerguru | 3GB+ | Various |
| sundanzer | 2GB | Various |
| berman | 388MB | 2019 |
| rrspc | 314MB | 2021 |
**Action Required:** Archive to offsite storage, delete from web server
---
## Scan Commands
### Full Site Scan
```bash
ssh root@172.16.3.10
/root/scan_sites.sh
cat /root/site_scan_report.txt
```
### Database Bloat Check
```bash
ssh root@172.16.3.10
/root/check_dbs.sh
cat /root/db_bloat_report.txt
```
### View Critical Issues
```bash
ssh root@172.16.3.10
cat /root/URGENT_SITE_ISSUES.txt
```
---
## Automation Recommendations
### 1. Log Rotation
**Create:** `/etc/logrotate.d/wordpress-error-logs`
```
/home/*/public_html/wp-content/debug.log {
weekly
rotate 4
compress
delaycompress
missingok
notifempty
create 644 root root
}
```
### 2. Database Maintenance Script
**Create:** `/root/wordpress-db-maintenance.sh`
```bash
#!/bin/bash
# WordPress database maintenance - run weekly
for site in /home/*/public_html; do
if [ -f "$site/wp-config.php" ]; then
echo "Cleaning $site..."
# Wordfence cleanup
wp db query "TRUNCATE TABLE wp_wffilemods;" --path="$site" 2>/dev/null
wp db query "TRUNCATE TABLE wp_wfknownfilelist;" --path="$site" 2>/dev/null
# Optimize all tables
wp db optimize --path="$site" 2>/dev/null
fi
done
```
### 3. Monitoring Alerts
**Create:** `/root/monitor-disk-usage.sh`
```bash
#!/bin/bash
# Alert if any site error log >100MB
find /home/*/public_html/wp-content/ -name "debug.log" -size +100M -exec ls -lh {} \; | \
mail -s "IX Server: Large error logs detected" mike@azcomputerguru.com
```
---
## Server Resources
### Current Usage
```bash
# Check disk space
df -h /home
# Check memory usage
free -h
# Check CPU load
uptime
```
### Optimization Recommendations
1. **OPcache:** Ensure enabled and properly configured
2. **MariaDB:** Tune query cache and buffer pool size
3. **PHP-FPM:** Adjust pm.max_children based on memory
4. **Apache/LiteSpeed:** Enable HTTP/2, optimize workers
---
## Client Communication Template
**Subject:** Website Performance Maintenance Required
**Body:**
```
Hello [Client Name],
During our routine server maintenance, we identified some performance
issues affecting your website that require attention:
1. Error logs have grown to [SIZE], indicating [ISSUE]
2. Database optimization needed due to [BLOAT TYPE]
Recommended Actions:
- [SPECIFIC ACTION 1]
- [SPECIFIC ACTION 2]
Impact: [EXPECTED DOWNTIME/IMPROVEMENT]
We can schedule this work at your convenience. Please let us know
your preferred maintenance window.
Best regards,
Arizona Computer Guru Support
```
---
## Follow-Up Tasks
- [ ] Contact each critical priority client
- [ ] Schedule maintenance windows
- [ ] Execute cleanup on arizonahatters.com
- [ ] Execute cleanup on peacefulspirit.com
- [ ] Implement log rotation across all sites
- [ ] Create database maintenance cron job
- [ ] Set up monitoring alerts
- [ ] Document lessons learned
- [ ] Review Wordfence configuration across all sites
- [ ] Audit backup retention policies
---
## Server Access
```bash
# External SSH
ssh root@ix.azcomputerguru.com
# Internal SSH
ssh root@172.16.3.10
# WHM
https://ix.azcomputerguru.com:2087
# cPanel (example)
https://ix.azcomputerguru.com:2083
```
---
## Related Documentation
**Original Report:** `~/claude-projects/IX_SERVER_CRITICAL_ISSUES_2026-01-13.md`
**Session Logs:**
- Various client work sessions documented in `~/claude-projects/session-logs/`
**Scripts Location:**
- `/root/scan_sites.sh`
- `/root/check_dbs.sh`
- `/root/URGENT_SITE_ISSUES.txt`
---
## Project History
**2026-01-13:** Initial comprehensive server scan and issue documentation
**2026-01-22:** Imported to ClaudeTools project tracking system
---
**Status:** Documented - Awaiting Action
**Owner:** Arizona Computer Guru Operations Team
**Next Review:** After critical issues resolved