# Rainbowvapes Migration Runbook Migrate `rainbowvapes.co.uk` (James — Rainbow Vapes Ltd) from guru.co.uk shared hosting to kaburusvr. Second site `rainbowflavours.co.uk` already lives on kaburusvr as an alias of `rf.kaburu.co` (no guru content — nothing to migrate). ## Timeline (revised 2026-08-14) | Time | Action | |------|--------| | Fri 14th | Baseline file rsync (started, ~24GB, excludes bloat) | | **Mon 17:00** | Incremental file rsync — brothers done adding products/images ~5pm | | **Mon 21:00** (tentative) | WooCommerce maintenance mode ON — if James agrees (little overnight sales) | | **Tue ~07:00** | **DB dump+import (DB LAST)** → email forwarders + MX → DNS cutover → verify | | Tue 09:00 | James + brothers test → live (maintenance OFF) | | — | **Rollback:** flip CF A record back to guru, maintenance OFF. Guru site never deleted. | **Why DB last:** the brothers add products/images until ~5pm Monday; the DB is pulled after buying stops (Tue 07:00, or Mon 21:00 if site-off agreed) so no orders/product rows are lost. ## Source (guru) - SSH: `rvwebcou@85.92.72.178`, key `/root/.ssh/rainbowvapes` (on kaburusvr) - WP dir: `/home/rvwebcou/rainbowvapes.co.uk` (NOT public_html) - DB: `rvwebcou_vm7d1` (user `rvwebcou_vm7d1`), 1.27GB, 139 tables - PHP 8.2, WP 7.0.4, Divi 4.27.7 (avanti child) - Site size: 69GB raw → **~24GB real** (updraft 39GB + cache 6.2GB + et-cache 865M = bloat to exclude) ## Email (GURU portal — authoritative, SSH ~/etc lies) - `hello@rainbowvapes.co.uk` (452MB) + `no-reply@` (506MB) - **Both forward to `sellars534@aol.com`** (James reads everything at AOL) - No IMAP migration. Just re-point: forwarders + `no-reply@` sends via Fluent SMTP → Brevo - Current MX = MailChannels (guru's gateway, lost on exit) → point MX at kaburusvr at cutover - **Enable SRS on Postfix** or AOL-forwarded mail hits spam (SPF break) - The brother created a hello@↔no-reply@ forward loop on guru — do NOT replicate. One-way only. ## Pre-stage — DONE Fri 2026-08-14 - [x] Site created: `rainbowvapes.co.uk` (webuser `rainb1286`, lsphp83, registered in DB) - [x] DB created: `rainbowvapes_co_uk_wp` / `rainbowvapes_co_uk` — GRANT verified - Creds stored: `/root/rainbowvapes-migration.env` (chmod 600) - [x] rsync launched (background, excludes bloat) — see `/tmp/rainbowvapes-rsync.log` - [x] SSL issuing via acme.sh DNS-01 (background) — see `/tmp/ssl-rainbowvapes.log` ## Tuesday checklist ### 00:00 pre-stage - [ ] Confirm rsync finished, `chown -R rainb1286:rainb1286 /home/rainbowvapes.co.uk/public_html` - [ ] Confirm SSL cert present: `/etc/letsencrypt/live/rainbowvapes.co.uk/fullchain.pem` ### 07:00 stop buying - [x] WooCommerce maintenance mode ON (guru wp-cli or admin) ### 07:00–09:00 cutover - [x] Final incremental rsync (same command, fast) - [x] DB dump on guru → pull → `sed` utf8mb4_0900_ai_ci→utf8mb4_general_ci, ENGINE=MEMORY→InnoDB → import - [x] Update wp-config.php DB creds (from `/root/rainbowvapes-migration.env`), DB_HOST=localhost - [x] `wp search-replace` siteurl/home if URL differs (should be same domain) - [x] Re-apply `.user.ini` (open_basedir + memory 1024M) + permissions; chmod 640 - [x] Wordfence: disable `auto_prepend_file`/WAF bootstrap until live confirmed - [x] Email: create `hello@`+`no-reply@` forwarders → `sellars534@aol.com`; MX → kaburusvr; SPF (Brevo) + DKIM - [x] **DNS cutover:** CF A record `rainbowvapes.co.uk` → `49.13.202.144` (keep proxied=true) - [x] Verify: HTTPS 200, checkout, Worldpay test transaction, order email arrives at AOL ### 09:00 - [x] James + brother test → maintenance OFF → live ### Rollback - [ ] CF A record back to guru origin IP; maintenance OFF. (Never delete guru until post-live confidence.) ## Worldpay / PCI — VERIFIED 2026-08-14 - Plugin: `worldpay-ecommerce-woocommerce` v1.3.1 (official Worldpay "eCommerce" gateway) - Model: **hosted fields/iframe + 3DS2** (`challenge-iframe` + `ddc-iframe`). Card data tokenized by Worldpay, NOT stored on server → no PCI SAQ-D burden. - Domain unchanged → callback URLs unaffected. API auth = OAuth client-credentials (not IP allow-list) → no kaburusvr IP change needed. - [ ] Cutover-day: run a live test transaction (and 3DS test if available) ## Phase 2 (after live) - Host mail on kaburusvr (mailboxes + forward to AOL) - James: **scoped CyberPanel user** — his 2 sites (`rainbowvapes.co.uk`, `rainbowflavours.co.uk`) + email control panel ONLY. Nothing else. ## Phase 3 (design later) - Daily backup of both sites delivered to James's NAS (rsync or similar — TBD)