CyberPanel and CloudPanel alternative: one AGPL hosting panel with a migration path from both

CyberPanel's OpenLiteSpeed lock-in and CloudPanel's web-only scope mean growth eventually hurts. Jabali Panel is an AGPL panel with SSH-pull migration pipelines for CyberPanel (reads its MySQL config DB) and CloudPanel (reads its SQLite DB). Debian 13 or Ubuntu 24.04.

By Jabali Panel team 5 min read

Two of the most active open-source hosting panels — CyberPanel and CloudPanel — each solve a different slice of the hosting problem and each impose a different kind of lock-in. CyberPanel bets on OpenLiteSpeed; CloudPanel skips mail entirely. Both are fine choices, but growth exposes the ceiling.

This post explains the case for consolidating both onto one AGPL-licenced panel, and walks through the SSH-pull migration pipelines Jabali Panel ships for each.

Two different lock-ins

CyberPanel’s lock-in is the web server. OpenLiteSpeed is fast and its LSCache extension is great for WordPress — but it’s a stack choice that touches every site config, .htaccess handling, and cache layer. Moving off OLS means re-testing every site’s rewrite rules. And CyberPanel’s Enterprise tier gates the features most production shops actually reach for (Docker at scale, SLA, remote backups) behind a licence bill.

CloudPanel’s lock-in is the scope. The panel is deliberately web-only: no mail server, no DNS-authoritative option, no first-class Docker. That’s a virtue for shops that only host static sites + PHP apps and outsource mail. But if you ever want to consolidate mail hosting — or run a Nextcloud instance next to a WordPress site — you’re stuck. The migration path is “install a second panel”, not “add a feature”.

Jabali Panel is the both/and. AGPL, nginx + PHP-FPM (no proprietary web server), Stalwart for mail, PowerDNS for DNS, a 64-app Docker marketplace. And the CyberPanel + CloudPanel migration pipelines are built in.

Same platform surface, no lock-in

FeatureCyberPanelCloudPanelJabali Panel
LicenceOpen-coreMITAGPL
Web serverOpenLiteSpeednginxnginx + PHP-FPM
MailPostfix + DovecotStalwart (SMTP/IMAP/JMAP)
DNSPowerDNSPowerDNS
DatabasesMariaDBMariaDBMariaDB + PostgreSQL
WP ToolkitLSCacheFastCGI cacheJabali Cache
Docker appsLimited64+ curated stacks
WAFModSecurityCloudflare-onlyAppSec + CrowdSec
Node.jsAdd-onFirst-classFirst-class
Migration incPanel onlycPanel onlycPanel + DirectAdmin + HestiaCP + Plesk + CyberPanel + CloudPanel + WHM + IMAP

How the SSH-pull migrations work

Neither migration needs an archive produced on the source. Both work by SSHing in and reading the source’s config database directly:

CyberPanel keeps its entire inventory in a MySQL database called cyberpanel. From internal/migrate/cyberpanel/discover.go:

CyberPanel keeps its whole inventory in the cyberpanel MySQL database. Enumeration is plain read-only SELECTs via the mysql CLI over SSH (the SSH user is root; CyberPanel’s mysqld grants root passwordless local access). We NEVER run a mutating statement against the source.

Concretely: websiteFunctions_websites for site metadata, databases_databases for MySQL databases, e_users for mailboxes, e_forwardings for mail forwarders, e_domains for mail-domain-to-website mapping, packages_package for hosting packages.

CloudPanel keeps its inventory in SQLite. From internal/migrate/cloudpanel/discover.go:

CloudPanel stores its entire inventory in a single SQLite database at /home/clp/htdocs/app/data/db.sq3 (tables: site, php_settings, database, user). Enumeration is therefore plain read-only SELECTs via the sqlite3 CLI over SSH.

clpctl is used only for DB credentials + mysqldump. Never mutating.

Both pipelines share the read-only contract: no create, no delete, no modify against the source. Discovery days ahead is fine — the source stays operational.

Walk-through: CyberPanel migration

  1. Register the source in /jabali-admin/migrations — kind cyberpanel, host, SSH port, root credentials.
  2. DiscoverSELECT domain FROM websiteFunctions_websites runs; site list appears.
  3. Select sites — pick one, several, or all. Assign a target Hosting Package.
  4. Analyze — pipeline reads websites, databases, mailboxes, forwarders, cron. Report shows exactly what will land.
  5. Restore — files streamed over SSH, mysqldump produces DB content, DNS zones translated to PowerDNS, mailboxes rebuilt in Stalwart with generated passwords.
  6. Communicate mail passwords to users (Dovecot hashes don’t port to Argon2id).
  7. Repoint DNS.
  8. Issue SSL — certbot HTTP-01 via the per-domain toggle.

Full technical reference: CyberPanel migration docs.

Walk-through: CloudPanel migration

  1. Register the source — kind cloudpanel.
  2. Discoversqlite3 /home/clp/htdocs/app/data/db.sq3 "SELECT domain_name FROM site" runs.
  3. Select sites.
  4. Analyze — pipeline reads site config, php_settings, databases, site users.
  5. Restore — no mail phase. Node.js / Python / Static sites all translate.
  6. Repoint DNS.
  7. Issue SSL.

Full technical reference: CloudPanel migration docs.

What breaks (and what to do)

CyberPanel: OpenLiteSpeed to nginx. Straightforward .htaccess mod_rewrite rules translate; LSAPI-specific directives don’t. Review each site’s .htaccess after Restore. LSCache is replaced by Jabali Cache for WordPress — object cache + full-page cache wired to Redis, no configuration.

CyberPanel: mailbox passwords are not portable. Dovecot’s hash format doesn’t port to Stalwart’s Argon2id store. Generated passwords land in the migration report. Deliver out of band or set force-first-login reset in Server Settings. Mailbox contents (INBOX + folders + flags) migrate intact via IMAP.

CloudPanel: no mail to consolidate. The source has no mailboxes. If you want first-class mail hosting after the migration, provision mailboxes on the destination in Stalwart, MX-repoint the domain at the registrar, and use IMAP move to copy content from your external provider. See self-hosted mail server for the full walkthrough.

Both: WAF rules don’t translate. CyberPanel ModSecurity rules and CloudPanel’s Cloudflare-only WAF are replaced by AppSec + CrowdSec at the server level — no per-site config.

Both: Docker features don’t translate 1:1. Reinstall from the Jabali Docker marketplace for the same one-click experience with harder tenant isolation.

Try it before you cut over

The Analyze step of both pipelines is strictly read-only. You can point Jabali Panel at a live CyberPanel or CloudPanel host, run Analyze, and review the report without touching production DNS or the source. Verify what would be migrated, spot-check a database restore on the destination, then decide whether to run Restore.

Full docs:

Frequently Asked Questions

Why leave CyberPanel or CloudPanel?
CyberPanel: OpenLiteSpeed lock-in makes future stack changes painful, and the free tier lacks features (Docker, remote backups, SLA) that the Enterprise tier gates. CloudPanel: web-only. If you need mail hosting, you're paying an external provider forever. Jabali Panel is AGPL, ships with Stalwart Mail (SMTP/IMAP/JMAP/DKIM), uses nginx + PHP-FPM (no proprietary web server), and includes both migration pipelines out of the box.
How do the CyberPanel and CloudPanel migrations work?
Both are SSH pull-based — no `pkgacct`-style archive to produce on the source. The panel connects over SSH and reads the source's config database directly: CyberPanel keeps everything in a MySQL database named `cyberpanel` (tables like websiteFunctions_websites, databases_databases, e_users); CloudPanel keeps everything in a SQLite file at /home/clp/htdocs/app/data/db.sq3. Reads are plain SELECT statements. Restore synthesizes a cpmove-shape archive on the destination and reuses the cPanel restore path.
What's the key difference between the two migrations?
CyberPanel has a mail server (Postfix + Dovecot) so mailboxes, forwarders, and mail-domain mappings are part of the migration. CloudPanel is web-only — no mail migration phase because the source has no mailboxes. If your CloudPanel sites use external mail (Google Workspace, Zoho, Migadu), that flow continues unchanged after DNS repointing.
Does Jabali Panel run OpenLiteSpeed?
No. Jabali Panel uses nginx + PHP-FPM. OpenLiteSpeed vhosts on the CyberPanel source translate to fresh nginx vhosts rendered from the Jabali template. LSAPI-specific rewrites need manual review — most `.htaccess` mod_rewrite rules translate straight across, but LSAPI-only directives don't. LSCache is replaced by Jabali Cache for WordPress sites, wired to the panel's Redis instance.
What about CyberPanel's Docker feature?
Jabali Panel ships its own [Docker Apps marketplace](/blog/docker-apps-marketplace/) — 64+ curated self-hosted stacks (Nextcloud, Immich, Vaultwarden, Grafana, Gitea, Odoo, and more) with hardened multi-tenant install, automatic Let's Encrypt SSL, restic-based backups, and reconciler-driven updates. CyberPanel's Docker feature does not translate 1:1 — reinstall your workloads from the Jabali Docker catalog for the same one-click experience with better hardening.
What credentials do the migrations need?
SSH access to the source with root or sudo-capable admin. CyberPanel pipeline uses root's passwordless local MySQL access (default in CyberPanel installs) to read the `cyberpanel` database. CloudPanel pipeline uses `clpctl` for DB credentials and `sqlite3` to read the config database. Neither pipeline uses the source panel's HTTP API — pure SSH.
Can I migrate the mail flow when leaving CloudPanel?
CloudPanel has no source mail to migrate. But if you want to consolidate your external mail provider onto Jabali's built-in Stalwart Mail server, provision mailboxes in Jabali after the site migration completes, MX-repoint the domain, and use IMAP move to copy mail contents from the old provider. See our [self-hosted mail server](/blog/self-hosted-mail-server/) walkthrough.
How much downtime does each migration require?
Discovery (Analyze) happens with zero downtime on the source. Cutover downtime is bounded by DNS propagation: pre-lower TTLs 24-48h ahead to 300 seconds, freeze source writes at cutover, run Restore, repoint DNS, wait 5-10 minutes for TTL propagation. Most sites see 15-30 minutes of split-brain; no user sees a broken page.