# Migration Execution Checklist

## Pre-Migration (Do Once)

- [ ] Choose VPS allocation option (A, B, or C)
- [ ] Verify all VPS accessible via SSH
- [ ] Create backup directory structure
- [ ] Set DNS TTL to 300 seconds (5 minutes) in Cloudflare
- [ ] Announce maintenance window in Discord

---

## Service 1: Gitea Migration

### Backup Phase
- [ ] Stop Gitea on TX1: `systemctl stop gitea`
- [ ] Backup Gitea data: `tar -czf gitea-backup.tar.gz /var/lib/gitea`
- [ ] Backup Gitea DB: `sqlite3 /var/lib/gitea/gitea.db .dump > gitea-dump.sql`
- [ ] Copy backups off TX1

### Deploy Phase
- [ ] Install Gitea on target VPS
- [ ] Restore data directory
- [ ] Restore database
- [ ] Update `app.ini` with new domain/IP
- [ ] Start Gitea service
- [ ] Test locally: `curl -I http://localhost:3000`

### DNS Cutover
- [ ] Update Cloudflare: git.firefrostgaming.com → [target VPS IP]
- [ ] Wait for propagation (5 min)
- [ ] Get SSL certificate: `certbot --nginx -d git.firefrostgaming.com`
- [ ] Test externally: Browse to https://git.firefrostgaming.com

### Verification
- [ ] Login works
- [ ] Repositories accessible
- [ ] Push/pull works
- [ ] Webhooks functional

### Cleanup
- [ ] Wait 24 hours
- [ ] Stop TX1 Gitea: `systemctl stop gitea`
- [ ] Disable TX1 Gitea: `systemctl disable gitea`
- [ ] Archive TX1 Gitea data

---

## Service 2: Uptime Kuma Migration

### Backup Phase
- [ ] Export monitors from Uptime Kuma web UI
- [ ] Backup data: `tar -czf kuma-backup.tar.gz /opt/uptime-kuma/data`

### Deploy Phase
- [ ] Install Uptime Kuma on target VPS
- [ ] Import monitors
- [ ] Configure Discord webhook
- [ ] Test monitoring

### DNS Cutover
- [ ] Update Cloudflare: status.firefrostgaming.com → [target VPS IP]
- [ ] Get SSL certificate
- [ ] Test externally

### Verification
- [ ] All monitors active
- [ ] Discord notifications working
- [ ] Status page accessible

---

## Service 3: MkDocs Migration

### Backup Phase
- [ ] Copy MkDocs source: `tar -czf mkdocs-source.tar.gz /var/www/docs`

### Deploy Phase
- [ ] Install MkDocs + Material theme
- [ ] Restore source files
- [ ] Configure nginx
- [ ] Build site: `mkdocs build`

### DNS Cutover
- [ ] Update Cloudflare: docs.firefrostgaming.com → [target VPS IP]
- [ ] Get SSL certificate
- [ ] Test externally

### Verification
- [ ] Site loads correctly
- [ ] Search works
- [ ] All pages accessible

---

## Service 4: Wiki.js Fresh Deploy

### Deploy Phase
- [ ] Install Node.js 18+
- [ ] Install Wiki.js 2.5.303
- [ ] Create dual Nginx configs (subscribers + staff)
- [ ] Configure Wiki.js

### DNS Cutover
- [ ] Update Cloudflare: subscribers.firefrostgaming.com → [target VPS IP]
- [ ] Update Cloudflare: staff.firefrostgaming.com → [target VPS IP]
- [ ] Get SSL certificates (single command for both domains)
- [ ] Test externally

### Setup
- [ ] Complete setup wizard
- [ ] Create admin account
- [ ] Configure groups (Subscribers, Staff, Admin)
- [ ] Set up Git sync with Gitea

---

## Service 5: NextCloud Deploy

### Deploy Phase
- [ ] Install NextCloud
- [ ] Configure database
- [ ] Set up storage directory
- [ ] Configure nginx

### DNS Cutover
- [ ] Update Cloudflare: downloads.firefrostgaming.com → [target VPS IP]
- [ ] Get SSL certificate
- [ ] Test externally

### Setup
- [ ] Create admin account
- [ ] Configure external storage (if needed)
- [ ] Test upload/download
- [ ] Set up retention policy (30-day for non-premium, 90-day for premium)

---

## Post-Migration

- [ ] All services responding on new IPs
- [ ] SSL certificates auto-renewing
- [ ] Monitoring confirms 100% uptime
- [ ] Discord announcement: Migration complete
- [ ] Wait 24-48 hours before TX1 cleanup
- [ ] Update all documentation with new IPs
- [ ] Remove Command Center IPs from TX1 interface
- [ ] Document lessons learned

---

**Total Estimated Time:** 6-9 hours (spread across 1-3 days)
