Document current config, DNS, and dependencies. Replicate data to the new server and test the application. Schedule cutover during low traffic; update DNS and monitor. Keep the old server available for rollback.
Before migration
- Document: OS, packages, app config, cron jobs, firewall rules, DNS records, and dependencies (DB, APIs, other servers).
- Backup: Full backup of data and config from the current server; verify restore on a test system if possible.
- New server: Provision with same or higher resources; install OS and stack; apply config (automate where possible).
Sync and test
- Replicate data: Use rsync, DB replication, or provider migration tools to copy data to the new server. Keep in sync until cutover.
- Test app: Run the application on the new server against copied data; test critical flows and integrations. Fix any config (paths, env vars, DB host).
- DNS prep: Lower TTL on critical records (A, AAAA) a day or two before cutover so changes propagate quickly.
Cutover
- Schedule: Pick a low-traffic window; announce maintenance if needed.
- Final sync: Stop writes or do final incremental sync; switch app to read-only or brief downtime if required.
- Switch DNS: Point domain to new server IP(s). Monitor errors and latency; have rollback plan (revert DNS to old server).
After cutover
- Verify: Smoke tests, check logs, and monitor for a few hours. Keep old server running for at least 24–48 hours for rollback.
- Decommission: Once stable, backup again from new server, then decommission old server and update docs.
Summary
Document everything; backup; replicate and test on new server; lower TTL; cut over in a maintenance window; switch DNS; verify and keep old server for rollback.




