Import sites with one command
The source server streams the sites straight to this panel. You generate a command, run it as root on the old server, pick the sites in Hyperion, and the import runs as a background job. Mail and DNS are reported, never imported.
Before you start
Section titled “Before you start”- You hold the Import from another panel permission (Owner and Administrator roles).
- You have root or
sudoon the source. The command needssudoto read the source panel’s database. - The source can reach this panel’s address, which the generated command carries.
- The source has free disk space. Packing stages a copy and then archives it beside itself, so it needs roughly twice the site files plus room for database dumps. The checklist shows the figure for your selection before you submit. This panel’s node needs room for the bundle, its unpacked copy and the inflated sites.
- If the page shows Large imports will still fail on this box., update Hyperion first. See Update Hyperion.
-
Open Import in the sidebar. The first tab is One command on the source.
-
Under Source panel, choose CloudPanel or HestiaCP and click Generate command.
-
Copy the command shown under Paste this on your CloudPanel server, as root (or HestiaCP). It looks like:
Terminal window curl -fsSL "https://panel.example.com/import/agent/<token>" | sudo bashThe token is valid for 4 hours, extended automatically while an upload runs. You can read the script first by fetching the URL without
| sudo bash. -
Run it on the source server. It scans the server and reports the sites it found. The Transfers table shows scanning source…, then N site(s) found. The script then waits.
-
Click Choose sites → on the transfer. The checklist lists each source site with its owner, PHP version, number of databases and size of its site files.
-
All rows start ticked. Untick what you do not want. The line under the list shows the number of sites, their total size and how much free space the source needs.
-
Optionally edit Import as to rename a site on import (keep the subdomain, change the base domain, for example
shop.old.example.comtoshop.example.com). WordPress URLs are rewritten for renamed sites. If you have profiles, Profile applies limits and price and Bill from sets the first billing date. -
Click Import selected. The panel answers
Selected N site(s) — the source is now exporting them. -
The Transfers table moves through packing on the source, receiving, and then a progress → link to the import job. Follow it on the job page.
The export runs detached on the source, so closing your SSH session does not cancel it, and a dropped upload resumes where it stopped. Check it on the source with:
sudo /var/lib/hyperion-export/statusTo stop a transfer, click Cancel on its row before the import job starts. The waiting source script sees the cancellation and stops.
What is imported
Section titled “What is imported”For each ticked site, Hyperion creates a hosting with its own Linux user, copies the site files, creates one database and loads the dump into it, and keeps the source’s aliases (HestiaCP). Details:
- PHP version: if the source runs a version Hyperion does not carry, the nearest supported one is used, and the job log notes it (
was on PHP …, imported on …). - Databases: a hosting here has one database. The source’s other databases for the same site are named in the job log and are not imported. The database gets new credentials, and
wp-config.phpis rewritten to match. - Domain taken: a site whose domain already exists here is skipped as a conflict. Re-running an import skips sites already imported (
already imported (idempotent re-run)). - Not imported: mail and DNS (the log says how many HestiaCP mail domains and DNS zones exist), cron jobs, certificates, SSH keys, and sites that are reverse proxies, Node or Python apps (
reverse-proxy sites are not imported in v1 (planned for P1)). - Disk full: if this node’s disk fills, the batch stops and lists the sites not attempted. Free space and run the import again; imported sites are skipped.
After the import, point DNS at this node and issue certificates from each site’s Domains & SSL tab.
Check that it worked
Section titled “Check that it worked”-
The job ends Done with
imported N site(s), skipped M. The log lists✓ created <domain> (N database(s)),· skipped <domain> — <reason>and(not imported — <category>: <detail>)lines. -
The sites are listed in Hostings.
-
Open a site and check its pages, and test before DNS moves:
Terminal window curl -I --resolve example.com:443:203.0.113.10 https://example.com/
If it fails
Section titled “If it fails”invalid or expired import token: the token is valid for 4 hours and for one transfer. Generate a new command.- The row says
reported 0 sitesandnothing to import on the source: the source panel has no sites to import. this transfer did not finish — start a new one from the command abovebeside a failed pill: generate a new command. The runner’s last message on the source names the cause, for examplenot enough free disk to pack the export, orthis box is not a CloudPanel or HestiaCP server.the transfer was cancelled in the Hyperion panel: you or another user clicked Cancel.invalid "import as" domain(s): …orpick at least one site: fix the Import as value or tick a site.ran out of disk: imported N site(s), then stopped with M not imported.: free space on this node and run the import again.