# Migrating to ZoPanel

> Bring accounts over from cPanel or DirectAdmin backups with their sites, databases, mail and passwords, or move websites between ZoPanel servers.

Source: https://zopanel.net/docs/migration  
Updated: 2026-10-07

ZoPanel can import hosting accounts from cPanel and DirectAdmin backups, and move websites between ZoPanel servers. In both cases the old server is not changed. You switch DNS when the new copy is ready.

## From cPanel or DirectAdmin

The importer reads a full account backup, shows you what it found, and recreates the account on this server. It converts the backup into a ZoPanel account backup and restores it through the normal restore process, so the same safety checks apply. The backup is treated as untrusted input: it is read in Go and never extracted as root, paths are confined to the account, and sizes are capped.

### What is carried over

| Item | cPanel | DirectAdmin | Notes |
| --- | --- | --- | --- |
| Account and panel password | Yes | Yes | The old password keeps working for the panel and SFTP when its hash format can be checked here. Otherwise the log asks you to set a new one. |
| Websites (main, addon, subdomains, aliases) | Yes | Yes | DirectAdmin domain pointers are not created as sites. The log lists them so you can add redirects. |
| PHP version | Yes | – | Read from cPanel's `ea-php`/`alt-php` setting. An old version (5.x) maps to the closest installed one. Otherwise the server's default PHP version is used. |
| Website files | Yes | Yes | Links pointing outside the account are not copied. |
| MySQL/MariaDB databases and users | Yes | Yes | Database names follow the account's username on this server. Passwords are kept when the hash is portable (`mysql_native_password`). Otherwise a new password is generated and written into the application's config file. |
| Mailboxes and messages | Yes | Yes | Passwords and quotas are kept. Maildir messages are imported; mailboxes in `mdbox` format are not. |
| Forwarders and autoresponders | Yes | Yes | Forwarders to e-mail addresses only. Autoresponders become mailbox rules. |
| Cron jobs | Yes | Yes | Up to 100 cron jobs. |
| DNS zones | Yes | – | Needs the DNS server on this server. The old zone's records are kept, but this server's web, mail (MX, SPF) and CAA records win, and the old server's IP addresses are replaced with this server's. A zone that already exists here is left as it is. |
| FTP accounts | Yes | – | Needs the FTP server. `name@domain` becomes `<account>_name`. |
| SSL certificates | Yes | – | Installed as custom certificates. Otherwise a free certificate is issued once DNS points here. |

PostgreSQL databases in a cPanel backup are not imported automatically. Create them and restore the dumps from the `psql/` folder of the backup. Anything that was not carried over is listed in the log as a note, with the reason.

If the mail server is not installed yet, mailboxes are imported later, after you install it. The converted archive is kept in the account's backups until then.

### Step by step

1. **Make the backup on the old server.**
   - cPanel: in WHM, **Backup → Backup Wizard** or **Transfer Tool**, or run `pkgacct` as root. Customers can use **cPanel → Backup → Download a Full Account Backup**. The file is `cpmove-USER.tar.gz`.
   - DirectAdmin: **Admin/Reseller Backup/Transfer → Create Backup** for the user with all items, or **Create/Restore Backups → Create Backup** as the user. The file is `user.RESELLER.USER.tar.gz` or `.tar.zst`.
2. **Open Migrate in** in the ZoPanel admin menu.
3. **Give ZoPanel the backup**, in one of two ways:
   - **Upload a backup**: up to 50 GB.
   - **Download from a URL**: a link to the file, for example published temporarily on the old server or in cloud storage. Only public addresses are allowed.
4. **Review the analysis.** You see the websites, databases, mailboxes, forwarders and cron jobs. **Resolve before importing** lists conflicts, such as a username or domain that already exists here. You can:
   - change **Username here** and click **Check** (database names follow the username);
   - choose a **Package** (the old plan's name is shown);
   - check which database and mailbox passwords are **kept** and which are new.
5. **Click Start import.** Follow the task log. It shows how much data was converted and every note.
6. **Test, then switch DNS.** Point the domains' A/AAAA records (and MX, if this server hosts mail) to the new server. Certificates are issued automatically as each domain starts to resolve here.

An analysed backup waits 12 hours for the import to start, then it is deleted. The original file is deleted as soon as it has been converted, to free disk space.

Make sure the server has enough free disk space for the backup and the converted copy before you start.

## From another ZoPanel server

### Move websites between servers

With central management ([Fleet and multiple servers](/docs/fleet)), an administrator can copy a website to another ZoPanel server as it is.

1. **On the target server**: **Settings → System → Central management → Generate token**. Choose **Full: sign in, move websites, create accounts**, then copy the token. It is shown only once.
2. **On the source server**: **Servers → Add server**. Enter a name, the panel address and the **Fleet token**, then click **Connect**.
3. **Move one website**: open it in **Websites**, find **Move to another server** on the **Overview** tab, choose the target server and click **Start migration**.
   **Move several**: on **Servers**, click **Move websites** on the target server and pick the websites.
4. **Switch DNS** to the new server. SSL is issued there once the domain resolves.
5. **Delete the old copy** on the source server after DNS has switched.

What stays the same:

- The account keeps its username and panel password. The package is matched by name, or created with the same limits.
- Databases keep their names, users and passwords, so `wp-config.php` and `.env` files need no changes.
- The website on the source server is not changed.

The SFTP password cannot be carried between ZoPanel servers. Set a new one on the target. Git and local apps are rebuilt on the target so that their processes run there.

Limits:

- Only MariaDB databases are moved automatically.
- App Store and S3 storage websites cannot be moved. Reinstall them on the target.
- Email is not part of a website move.

### Restore an account backup on another server

Every ZoPanel account backup includes a description of the account, so it can be restored on any ZoPanel server:

1. Download the backup (`.tar.gz`) from the old server.
2. On the new server, open **Backups → Restore from file** (administrators) and choose the file. It can be up to 50 GB.
3. The account, websites and databases are recreated with the same names, users and passwords. If websites or databases with the same names already exist, the restore is refused.

Email is restored for e-mail domains that already exist on the new server. The task log lists the others: add the e-mail domain and its mailboxes, then restore again.

To rebuild a **whole server**, including settings, packages, logins and keys, use the configuration backup (`.zpb`) with `zopanel ctl dr-restore`. See the [CLI reference](/docs/cli).
