GuidesGuide

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.php files and copies files and databases directly with tar and mysqldump. 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.ini with auto_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 (with sudo)
  • 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:

  1. 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.
  2. 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.
  3. 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.

Try Koapanel on your server

One command on Ubuntu 24.04, free up to 3 sites. Are you a provider or an agency? Let's talk wholesale pricing and migrations.

More guides