A free Plesk alternative: migrate off Plesk to Jabali Panel on Debian 13
Plesk licences add up fast. Jabali Panel is an AGPL-licenced hosting control panel with a Plesk migration pipeline that pulls subscriptions over SSH — no cpmove-style archive to produce. Debian 13 or Ubuntu 24.04. Free, no per-domain fees.
If you run a Plesk fleet — even a small one — the licence bill grows in ways cPanel operators recognise: per-server minimums, per-domain tiers, extensions that ratchet up the total. And unlike cPanel, Plesk’s cheaper editions cap the number of domains you can host, so growth means an unplanned upgrade.
Jabali Panel is an AGPL-licenced open-source hosting control panel with the same feature surface Plesk covers — domains, PHP-FPM, MariaDB, PostgreSQL, mail, DNS, WordPress, one-click app installs — and no per-server / per-domain fee. This post explains the case for leaving Plesk and walks through the SSH-pull migration end-to-end.
The economics: why the licence bill hurts
Plesk Web Host Edition (the tier hosting providers reach for) is billed per server, and the domain limit varies by tier. Retail:
- Web Admin: 10 domains
- Web Pro: 30 domains
- Web Host: unlimited domains
Add the extensions most Plesk admins actually use (Kaspersky Anti-Virus, JetBackup, WP Toolkit for developers) and a single production server is comfortably into three figures per year. Multiply across a fleet.
Jabali Panel is AGPL — free forever, unlimited domains, unlimited mailboxes, unlimited databases, no premium tiers, no feature-flag paywalls. The Docker Apps marketplace covers the JetBackup / catalog-installer feature slot; Jabali Cache covers the WP-Toolkit performance slot; AppSec + CrowdSec cover the ModSecurity / Fail2Ban slot.
Same platform surface, no lock-in
| Plesk feature | Jabali Panel equivalent |
|---|---|
| Domain management | Domains + subdomains + aliases |
| PHP-FPM per domain | Per-domain PHP version + settings |
| MariaDB / MySQL | MariaDB 11 (default) or MySQL 8 |
| PostgreSQL | Panel-managed Postgres |
| Mail: SMTP, IMAP, POP3, spam | Stalwart 0.16 — SMTP, IMAP, JMAP, DKIM, MTA-STS |
| DNS | PowerDNS with per-zone editor |
| WP Toolkit | First-class WordPress + Jabali Cache |
| Node.js extension | Panel-native Node.js runtimes |
| Docker extension | Docker Apps marketplace, 64+ curated stacks |
| JetBackup / built-in backups | Restic-based backups with per-destination targets |
| ModSecurity | AppSec |
| Fail2Ban | CrowdSec with Console community blocklists |
| Let’s Encrypt | Certbot pipeline, per-domain toggle |
| Customer / service plans | Panel users + Hosting Packages |
How the SSH-pull migration works
Unlike cPanel / DirectAdmin / HestiaCP — where you produce an archive on the source and upload it — the Plesk pipeline is live pull-based. You register the source Plesk host in /jabali-admin/migrations with its SSH endpoint and credentials; the panel does the rest.
Every command the pipeline runs on the source is read-only. From internal/migrate/plesk/discover.go:
Read-only contract: every command this package shells out to is a list / info / json-export variant (
--list,--info,-format json). We never run a create / delete / modify call against the source panel.
Concretely: plesk bin subscription --list, plesk bin domain --info, plesk bin database --list, plesk bin dns --info, plesk bin mail -l -json, plesk ext wp-toolkit --list -format json. No create, delete, disable, no writes to Plesk’s PSA database.
That means:
- Analyze days in advance. The source stays fully operational; you’re reading, not writing. Kick off discovery whenever, review the report at leisure.
- Freeze writes only at cutover. Down-time on the source is bounded by the actual restore window, not by “we need to snapshot”.
- No
pkgacctstep. No manual scripting on the source, no rsync of multi-GiB tarballs.
Walk-through: migrating one Plesk subscription
Step 1 — Register the source. In /jabali-admin/migrations, click New source and pick plesk. Enter:
- Host:
plesk.example.com - Port:
22 - Auth: SSH password or private key (base64)
- Principal:
rootor a sudo-capable admin
Step 2 — Discover subscriptions. The panel opens an SSH session and calls plesk bin subscription --list. The subscription list appears in the UI. Pick the one you want to migrate.
Step 3 — Assign a target Hosting Package. The pipeline reads the subscription’s Plesk service plan via plesk bin service_plan --info and suggests the closest Jabali Hosting Package by disk quota + bandwidth quota. Override if needed.
Step 4 — Analyze. The pipeline reads every domain, database, DNS zone, mailbox, and WordPress install from the source. No writes. The analyze report shows exactly what will land on the destination.
Step 5 — Restore. Click Restore. The pipeline synthesizes a cpmove-shape archive locally on the destination — files streamed over SSH, DB dumps produced via mysqldump / pg_dump over the SSH session, DNS zones translated to PowerDNS rows — and hands off to the same restore path the cPanel pipeline uses. Live per-phase progress in the UI.
Step 6 — Communicate mail passwords. The report prints the new generated passwords for each mailbox. Deliver out of band, or set the force-first-login reset flag under Server Settings.
Step 7 — Cut over DNS. Update A/AAAA/MX at the registrar. With the 300s TTL you pre-set 24-48h earlier, most of the world sees the new host within 5-10 minutes.
Step 8 — Issue SSL. Once DNS resolves, hit the per-domain SSL toggle. Certbot issues via HTTP-01 on port 80.
Total operator time: 15-30 minutes per subscription, most of it in the smoke-test between Restore and DNS repoint.
What breaks (and what to do about it)
Mailbox passwords are not portable. Plesk uses Courier / Dovecot password hash formats that Stalwart’s Argon2id store cannot ingest. The panel generates new passwords and prints them in the migration report. Mailbox content (INBOX, folders, flags) migrates intact via IMAP.
Plesk extensions don’t translate. Kaspersky Anti-Virus, JetBackup schedules, ImunifyAV rules — none of these carry over. Map them to Jabali equivalents:
- Kaspersky → CrowdSec + AppSec (WAF-level protection at the server layer)
- JetBackup → Jabali’s restic-based backup system
- ImunifyAV → CrowdSec Console + AppSec
- WP Toolkit → panel-native WordPress + Jabali Cache
Reseller structure flattens. Jabali has no reseller construct. Reseller-owned subscriptions become individual panel users. If reseller hierarchy mattered for billing, model it in FOSSBilling or your existing billing tool instead of the panel.
Plesk on Windows is not supported. The Plesk pipeline is Linux-only. Windows Plesk uses IIS / MSSQL / Exchange; Jabali is nginx / MariaDB / Stalwart. Windows Plesk migrations need per-service manual exports.
Try it before you cut over
You can point the Plesk pipeline at a source, run Analyze, and review the report without touching production DNS. Verify the domain / DB / mailbox count matches your expectation, spot-check a database restore in the destination MariaDB, then decide whether to Restore.
Full technical reference: Plesk migration docs. See also DirectAdmin migration, HestiaCP migration, and the end-to-end cPanel guide whose cutover playbook applies verbatim to Plesk.
Frequently Asked Questions
- Why leave Plesk for Jabali Panel?
- Three reasons: cost, licence model, and lock-in. Plesk Web Host Edition is per-server + per-domain-tier billing; a 30-domain Web Pro at retail runs several hundred dollars a year, before extensions. Jabali Panel is AGPL — free forever, no per-domain fees, no feature-flag paywalls. The Plesk migration pipeline pulls subscriptions over SSH so you can move without producing archives or writing scripts.
- How does the Jabali Panel Plesk migration work?
- The panel opens an SSH session to the source Plesk host and enumerates every subscription with `plesk bin subscription --list`. Per subscription it reads domain, database, DNS, mail, and WordPress metadata via `plesk bin` `--info` / `--list` commands (all strictly read-only). On Restore it synthesizes a cpmove-shape archive on the destination and hands off to the same restore pipeline the cPanel path uses. No cpmove tarball to produce on the source, no rsync step, no manual file transfer.
- What does Jabali Panel migrate from Plesk?
- Subscriptions become panel users; domains and subdomains become Domain rows; MariaDB, MySQL, and PostgreSQL databases restore with users and hashes; DNS zones translate to PowerDNS; mailboxes recreate in Stalwart (passwords are reset — Plesk's Courier/Dovecot hashes are not portable); WordPress installs found by `plesk ext wp-toolkit` re-register with the panel's WordPress tooling. Customers and service plans surface as suggested Hosting Package mappings the operator confirms.
- Is Plesk on Windows supported?
- No. Jabali Panel supports Plesk on Linux only (Debian, Ubuntu, CentOS/AlmaLinux, RHEL). Plesk for Windows uses IIS, MSSQL, and Exchange integration; Jabali is nginx + PHP-FPM + MariaDB + Stalwart. For a Plesk Windows source, export databases and files manually and use per-service migration paths.
- What credentials does the migration need?
- SSH access to the source Plesk host — password or private key. The principal must be `root` or a sudo-capable admin so `plesk bin` can enumerate every subscription regardless of owner. Non-root principals auto-pivot to their sole subscription on single-tenant sources; multi-tenant sources prompt the operator to pick which subscription to migrate.
- How much downtime does a Plesk migration require?
- Discovery (Analyze) happens with zero downtime — the source stays fully operational. Cutover downtime is bounded by DNS propagation: pre-lower TTLs 24-48h 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 (some visitors on old server, some on new); no user sees a broken page.
- Does Jabali Panel replace Plesk's WordPress Toolkit?
- Yes. Jabali Panel ships first-class WordPress support — one-click installs from a catalog, staging clones, automated updates, integrated caching via the [Jabali Cache plugin](https://wordpress.org/plugins/jabali-cache/) wired to the panel's Redis instance, and per-site deliverability dashboards. Plesk's WP Toolkit features (cloner, staging, security scanner) all have direct panel equivalents.
- What does the Plesk pipeline cost?
- Nothing. Jabali Panel is AGPL, the Plesk migration pipeline is part of the panel — no add-on, no premium tier, no per-migration fee. Compare to Plesk's own migration tool, which is bundled with a paid Plesk licence, or to third-party migration-as-a-service offerings that charge per account.