Create pbs-production-migration-test.md via n8n
This commit is contained in:
parent
eb4a261edf
commit
82323d7c88
114
PBS/Inbox/pbs-production-migration-test.md
Normal file
114
PBS/Inbox/pbs-production-migration-test.md
Normal file
@ -0,0 +1,114 @@
|
||||
---
|
||||
project: pbs-production-migration-test
|
||||
type: project-plan
|
||||
status: active
|
||||
tags:
|
||||
- pbs
|
||||
- production
|
||||
- docker
|
||||
- traefik
|
||||
- ansible
|
||||
- staging
|
||||
- wordpress
|
||||
---
|
||||
|
||||
# Production Migration Test Runbook
|
||||
|
||||
## Objective
|
||||
Validate full disaster recovery capability by restoring production to a new
|
||||
Linode, cutting over DNS, and confirming the site runs cleanly on fresh
|
||||
infrastructure.
|
||||
|
||||
## Pre-Migration (Day Before)
|
||||
- [ ] Post maintenance notice on Instagram (Jenny)
|
||||
- [ ] Add site banner or maintenance page notification
|
||||
- [ ] Confirm Linode Backups are enabled on production
|
||||
- [ ] Verify Cloudflare dashboard access
|
||||
- [ ] Have SSH keys ready for new server access
|
||||
- [ ] Notify Jenny of maintenance window and estimated downtime (30-60 min)
|
||||
|
||||
## Migration Steps (Early Morning)
|
||||
|
||||
### 1. Final Production Snapshot
|
||||
- [ ] Log into Linode dashboard
|
||||
- [ ] Navigate to production Linode → Backups tab
|
||||
- [ ] Take manual snapshot, label: `pre-migration-YYYY-MM-DD`
|
||||
- [ ] Wait for snapshot to complete (watch progress in dashboard)
|
||||
|
||||
### 2. Spin Up New Linode from Snapshot
|
||||
- [ ] Linode dashboard → Create → From Backup
|
||||
- [ ] Select the snapshot just taken
|
||||
- [ ] Choose same or equivalent plan (2GB Linode)
|
||||
- [ ] Same region as current production
|
||||
- [ ] Note the new server's IP address
|
||||
- [ ] Wait for provisioning to complete
|
||||
|
||||
### 3. Verify New Server
|
||||
- [ ] SSH into new server using noted IP
|
||||
- [ ] Run `docker ps --format "table {{.Names}}\t{{.Status}}"` — confirm
|
||||
all containers are running
|
||||
- [ ] Check WordPress responds: `curl -H "Host: plantbasedsoutherner.com"
|
||||
http://localhost:80`
|
||||
- [ ] Verify MySQL is healthy: `docker exec mysql-container mysqladmin ping`
|
||||
- [ ] Spot check wp-content files exist in the WordPress volume
|
||||
|
||||
### 4. DNS Cutover
|
||||
- [ ] Log into Cloudflare dashboard
|
||||
- [ ] Navigate to plantbasedsoutherner.com DNS settings
|
||||
- [ ] Update A record to new Linode IP address
|
||||
- [ ] Cloudflare proxied traffic should cut over within minutes
|
||||
- [ ] Verify: browse to https://plantbasedsoutherner.com from phone
|
||||
- [ ] Check multiple pages — homepage, a recipe, member login
|
||||
- [ ] Test PBS-API health endpoint
|
||||
- [ ] Verify n8n is accessible and workflows are intact
|
||||
|
||||
### 5. Post-Cutover Validation
|
||||
- [ ] Check Uptime Kuma monitors are green
|
||||
- [ ] Verify Portainer accessible
|
||||
- [ ] Confirm SSL certificate is valid (green lock)
|
||||
- [ ] Test Instagram automation — trigger a test comment if possible
|
||||
- [ ] Check Google Chat alerts are still routing
|
||||
|
||||
## Decision Point
|
||||
|
||||
After validation, choose one:
|
||||
|
||||
**Option A: Keep New Server**
|
||||
- [ ] Update Linode dashboard labels/tags
|
||||
- [ ] Update any hardcoded IPs in Ansible inventory
|
||||
- [ ] Run updated Ansible against new server to layer staging changes
|
||||
- [ ] Destroy or archive the old production Linode
|
||||
- [ ] Update SSH config with new server IP
|
||||
|
||||
**Option B: Revert to Original**
|
||||
- [ ] Flip Cloudflare DNS back to original Linode IP
|
||||
- [ ] Verify site works on original server
|
||||
- [ ] Destroy the temporary test Linode
|
||||
- [ ] Document any issues found for future reference
|
||||
|
||||
## Rollback Plan
|
||||
If anything goes wrong at any step:
|
||||
1. Flip Cloudflare DNS back to original production IP
|
||||
2. Original server is untouched and still running
|
||||
3. Destroy the test Linode
|
||||
4. Site downtime should be under 30 minutes total
|
||||
|
||||
## Post-Migration
|
||||
- [ ] Remove maintenance notice / site banner
|
||||
- [ ] Post on Instagram that site is back up
|
||||
- [ ] Document outcome and any lessons learned
|
||||
- [ ] Update Tech Wiki with any new findings
|
||||
|
||||
## Key Details
|
||||
- **Production domain:** plantbasedsoutherner.com
|
||||
- **DNS provider:** Cloudflare (proxied)
|
||||
- **Current hosting:** Linode 2GB
|
||||
- **Estimated downtime:** 30-60 minutes
|
||||
- **Best window:** Early morning, low traffic
|
||||
|
||||
## Lessons Learned
|
||||
*(Fill in after completing the test)*
|
||||
|
||||
---
|
||||
Created: 2025-03-25
|
||||
Updated: 2025-03-25
|
||||
Loading…
Reference in New Issue
Block a user