How to Migrate from cPanel to a New Server with No Downtime (2026)
A zero-downtime cPanel migration comes down to four moves: lower your DNS TTL a day ahead, copy the account to the new server, test it through your hosts file, and only then switch DNS, with a final sync right before. This guide walks through the method in a way that works with any destination panel, then shows how to do it with Koapanel, which imports a cPanel account from its backup file or by connecting to the old server over SSH.
Why so many people are leaving cPanel
Since January 1, 2026 a cPanel license costs $29.99 a month for 1 account (Solo), $35.99 for 5 (Admin), $53.99 for 30 (Pro) and $69.99 for 100 (Premier), plus $0.49 for every account above 100 (source). cPanel is still a mature product with a huge ecosystem (WHMCS, CloudLinux, LiteSpeed, endless tutorials), and if you rely on those pieces, switching has a real cost. If you mostly host PHP and WordPress sites, the alternatives have caught up. Head-to-head comparison: Koapanel vs cPanel.
Before you start: the checklist
- Inventory: list domains, subdomains, databases, mailboxes, forwarders, cron jobs and any unusual DNS records (TXT verifications, SRV, subdomains pointing elsewhere).
- Size: cPanel shows it under Disk Usage. The new server needs more than twice that in free space, because the archive and its extracted copy both sit on disk during the import.
- Who runs DNS today: your registrar, Cloudflare or the cPanel server itself? That decides how you'll cut over (see below).
- Where email lives: on the cPanel server, or on Google Workspace / Microsoft 365? In the second case, leave the MX records alone.
- Versions: note each site's PHP version (MultiPHP Manager) and any custom settings such as memory or upload size.
Step 1: lower the TTL at least 24 hours ahead
TTL tells resolvers how long they may cache a record. If yours is 14400 seconds (4 hours, a common cPanel default), some visitors will keep hitting the old server for hours after the switch. Set the A, AAAA, www and MX records to 300 seconds, then wait at least as long as the old TTL before migrating.
Check the current TTL (the second field of each line):
dig +noall +answer example.com A
dig +noall +answer www.example.com A
dig +noall +answer example.com MX
One catch: you don't control the TTL of the nameserver delegation at the registry, and for many TLDs it's one or two days. That's why the fastest cutover is changing A records first and moving nameservers later, if at all.
Step 2: copy the account to the new server
The cPanel full backup
In cPanel: Files › Backup › Download a Full Account Backup. The resulting backup-….tar.gz holds files, databases, mailboxes, forwarders and cron jobs. With root access, the command line is quicker:
/scripts/pkgacct username
# creates /home/cpmove-username.tar.gz
With Koapanel: two routes
From the backup file. In Koapanel open Migration › From a backup file and upload it. The panel analyses the archive and shows What we found: domains (main, addon, subdomains, aliases), databases, scheduled jobs, mailboxes and total size. Pick what to import, rename domains if needed and set the PHP version. Before extracting, it checks disk space (extraction takes about 2.5 times the archive, and every disk always keeps 10% free). Full details in the manual: Migration from cPanel and Plesk.
Over SSH, with nothing to download. Open Migration › From a server over SSH and enter the address, port, user and a password or private key. Credentials stay in memory only for the duration of the migration, never on disk or in logs. Before sending any password, Koapanel shows the old server's key fingerprint. Compare it by running this on the cPanel server:
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
What happens next depends on who you log in as:
- As root: Analyse server lists the accounts with domains, disk usage, databases and status (active, suspended, disabled). For each account you pick, Koapanel runs
/scripts/pkgacct, downloads the archive, deletes it from the old server and imports it. Suspended accounts start unselected; if you bring them, they arrive suspended (you can change that). - As the account user (no root): Koapanel reads domains and folders from the account, finds credentials in
wp-config.phpfiles and copies files and databases directly withtarandmysqldump. Non-WordPress databases ask for a user and password. Mailboxes are not copied on this route.
A bandwidth limit keeps the old server responsive. sudo access isn't supported: use root or the account user. Everything else is in the SSH migration manual.
What arrives, and what to check
| Item | What Koapanel does |
|---|---|
| Domains, subdomains, aliases | Become sites; aliases stay aliases of the main site |
| Files | Copied as the site user into /var/www/<domain> |
| Databases | Created with new passwords, shown once in the report |
wp-config.php |
Rewritten with the new credentials; Laravel .env and Joomla configuration.php best-effort, with a note |
| Mailboxes | With all messages, the original password and forwarders (mail service enabled; over SSH, root required) |
| Cron jobs | Imported paused, for review |
| DNS zones | Listed in the summary, not imported |
| Symbolic links | Skipped by the direct copy; the report says how many |
Save the database passwords straight away. Then two checks that apply to any migration:
- Absolute paths: cPanel sites live in
/home/user/public_html. Cron jobs, scripts and some plugins (Wordfence's.user.iniwithauto_prepend_file, for instance) hard-code that path and break on the new server. Find them:
grep -rl "/home/username" /var/www/example.com
- Cron: fix the paths before you re-enable the jobs.
Step 3: test the site through your hosts file
Before touching DNS, make only your own computer believe the domain already lives on the new server. Add a line with the new IP to your hosts file:
- Linux and macOS:
/etc/hosts(withsudo) - Windows:
C:\Windows\System32\drivers\etc\hosts(open Notepad as administrator)
203.0.113.10 example.com www.example.com
Open the site and try the admin area, forms and checkout. There's no HTTPS certificate yet (Let's Encrypt only issues one once the domain points at the server), so your browser may warn you; that's fine for a test. From the command line, without editing the hosts file:
curl -sI --resolve example.com:80:203.0.113.10 http://example.com/
When you're done, remove the line, or you'll keep seeing the new server even when something is wrong.
Step 4: .htaccess rules on nginx
cPanel runs Apache (or LiteSpeed), which reads .htaccess files. Many modern panels, Koapanel included, run nginx only, which ignores them. Rule by rule:
.htaccess rule |
On nginx |
|---|---|
| WordPress permalinks | Nothing to do: the standard config handles them |
| HTTP to HTTPS redirect | Nothing to do: Koapanel redirects automatically once HTTPS is on |
php_value memory_limit, upload_max_filesize |
Ignored. In Koapanel use the site's PHP settings (PHP versions) |
| 301 redirects for old URLs | Move them into the application (a redirect plugin in WordPress) |
Folder protection with .htpasswd, Deny from all |
Rebuild them another way (app login, nginx rules) |
Koapanel's manual doesn't document a per-site editor for custom nginx directives. WordPress and the common PHP CMSs work with the standard configuration, but a site packed with custom rewrites needs checking first. If your project depends on Apache or LiteSpeed, better to know now.
Step 5: final sync and DNS cutover
Hours or days pass between the copy and the switch, and meanwhile orders, comments and uploads keep coming in. Right before cutover:
- Final sync (SSH migrations, within 7 days): Koapanel compares files by size and date, copies only the changed ones and re-imports the databases. Rewritten config files keep their new content. File-based migrations don't have this step: for a site with orders or comments, use SSH, or put the old site in maintenance mode before taking the backup.
- Update the A/AAAA records for the domain and
www. If DNS is on a connected Cloudflare or 1PrimeCDN account, open the site and use Point to server: it shows the changes and applies them only when you confirm. - Turn on HTTPS as soon as the domain resolves to the new server. With a 300-second TTL that's a matter of minutes.
Check propagation across resolvers:
dig +short example.com A @1.1.1.1
dig +short example.com A @8.8.8.8
If you want DNS on the new server
Like cPanel, Koapanel can be the authoritative DNS for your domains: it runs PowerDNS, creates each site's zone automatically (A/AAAA, www, CAA for Let's Encrypt and, with mail enabled, MX, SPF, DKIM and DMARC) and supports DNSSEC (This server's DNS). cPanel zones aren't imported, so before moving nameservers recreate any special records by hand (TXT verifications, SRV, external subdomains). In cPanel they're in the Zone Editor or, as root, in /var/named/<domain>.db.
If the domain has DNSSEC enabled on the old DNS, remove the DS record at your registrar before switching nameservers, or the domain stops resolving. Enable DNSSEC on the new zone and publish the new DS only once the delegation is stable.
Step 6: email after the cutover
Email is the part that breaks silently. After the switch:
- MX, SPF, DKIM, DMARC: with Koapanel's mail service on, Set up mail DNS publishes them to connected providers; with DNS on the server they're already in the zone. If your mail is on Google or Microsoft, make sure the MX still points to them.
- Mail delivered to the old server: during propagation some messages still land there. Keep the old mailboxes alive for a few days, then copy the stragglers over IMAP (see how to migrate email accounts with IMAP).
- Sending: many cloud providers block outbound port 25, and a wrong reverse DNS (PTR) sends your mail to spam. Koapanel checks both before enabling mail and supports an SMTP relay. Send a test to Gmail and read the headers: SPF, DKIM and DMARC should all say
pass. More in SPF, DKIM and DMARC on your own mail server. - Mail clients: IMAP 993 SSL/TLS, SMTP 465 SSL/TLS or 587 STARTTLS, full address as username. Mailboxes coming from cPanel keep their old password.
Keep the old server running until sites and mail answer only from the new one, usually a few days.
FAQ
How long does a cPanel account migration take?
It depends on the data: minutes for a small site, hours for tens of GB. With a 300-second TTL, the DNS switch itself completes in minutes.
Will mailbox passwords change?
Not with Koapanel: cPanel mailboxes (from a backup, or over SSH as root) keep their original password and all their messages. Database passwords do change, and they're rewritten into wp-config.php.
Can I migrate without root access?
Yes, with the account user over SSH or with the full backup downloaded from cPanel. Over SSH without root, mailboxes have to be recreated.
Does Koapanel support Apache, LiteSpeed or CloudLinux?
No. It runs nginx and PHP-FPM on Ubuntu 24.04 LTS only. If you need those components, cPanel remains the better fit.
How much does Koapanel cost?
Free for up to 3 personal sites; then €7.90 a month for 10 sites, €14.90 for 30 and €24.90 for unlimited, per server, excluding VAT. See pricing and the savings calculator.
Try the migration
Install Koapanel on a fresh Ubuntu 24.04 server with curl -fsSL https://get.koapanel.app | sudo bash (installation guide) and migrate your smallest cPanel account first, or explore the Migration section in the public demo. The full picture is on the migration page. Coming from Plesk? Read the Plesk guide.