Migrate a WordPress site to NovaPanel
From an existing host (cPanel, Plesk, anywhere) to NovaPanel — files, database, DNS, in roughly 30 minutes.
What you'll need
- SSH access to the source server or a way to download a full site archive (WordPress backup plugin, host backup file).
- The source database — credentials or a fresh
mysqldump/pg_dumpfile. - An empty NovaPanel install with a customer account ready to receive the site.
- Roughly 30 minutes including DNS propagation. The actual file/DB copy is usually under 5.
Step 1 — Create the destination on NovaPanel
In the customer panel: Sites → Add site. Pick the same domain. Don't point DNS yet — we want to land everything in place first, test, then flip DNS.
In Databases → Create database: same name as the source DB if you want minimal config edits, otherwise note the new name + user + password — you'll update wp-config.php later.
Step 2 — Pull files from the old host
SSH into the source server and create a tarball of the WordPress install:
cd /home/<old-user>/public_html # or wherever the site lives
tar czf /tmp/site.tar.gz .
scp /tmp/site.tar.gz user@new-host:/tmp/ On NovaPanel, unpack into the new site's docroot:
ssh user@new-host
sudo -u <customer-user> tar xzf /tmp/site.tar.gz \
-C /home/<customer-user>/sites/<domain>/public/ Or use the File Manager in the customer panel to upload the tarball and extract via the right-click menu — saves you the SSH dance.
Step 3 — Pull the database
On the source server:
mysqldump -u<old-user> -p <old-db> > /tmp/db.sql
scp /tmp/db.sql user@new-host:/tmp/ On NovaPanel, restore it via the customer panel: Databases → <db> → Import and pick the SQL file. Or via SSH:
mysql -u<new-user> -p <new-db> < /tmp/db.sql Step 4 — Update WordPress config
Edit wp-config.php in the new docroot. Update:
define('DB_NAME', 'newdbname');
define('DB_USER', 'newdbuser');
define('DB_PASSWORD', 'newdbpass');
define('DB_HOST', 'localhost');
If the domain is changing or you're testing under a temporary URL, also update WP_HOME and WP_SITEURL — but for a like-for-like migration with the same domain, leave those alone.
Step 5 — Test before flipping DNS
Add a temporary entry to your local /etc/hosts file so your browser resolves the domain to the new server's IP:
192.0.2.42 example.com www.example.com
Visit the site. Confirm the homepage, a few inner pages, the admin login, and a media-rich page all render. Check wp-admin works. If anything's off, fix it now while DNS is still pointing at the old server.
Step 6 — Flip DNS
At the registrar, change the A record (and AAAA if you have IPv6) to the new server's IP. Lower the TTL first if it's set to days — drop it to 5 minutes a day before you cut over so propagation is fast.
Caddy on the new server will provision a fresh Let's Encrypt cert within seconds of the first HTTPS request from a real visitor. Watch journalctl -u novapanel on the new host if you want to see it happen.
Step 7 — Decommission the old host
Wait at least 24 hours after the DNS change before tearing down the old server — late DNS caches will still send some traffic there. Once cache TTL has expired everywhere, you're safe to cancel.
Common gotchas
- File permissions. Pulled tarballs sometimes carry weird ownership. Run
chown -R <customer-user>:<customer-user> /home/<customer-user>/sites/<domain>after extracting. - PHP version mismatch. If the old host ran PHP 7.4 and the new one is on 8.3, some plugins might break. The Sites page lets you pick a PHP version per site — start with the same version you had, then upgrade after.
- Email DNS. If the old host was also handling mail (MX records pointing there), set up email separately before flipping DNS, or you'll have a window where mail bounces.