# 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
