Convert Plesk installations to ISPconfig
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


        plesk2ispconfig - convert Plesk installations to ISPconfig

        plesk2ispconfig [--config=file.yml]


This script helps you migrate most of your Plesk installation to ISPconfig,
namely client accounts, mail addresses (mailboxes, aliases and forwards), web
sites and some databases. You configure it through a simple config file, mainly
for the credentials to access your installations and your server addresses, and
the rest should be fully automatic.

    --config FILE
        A YAML config file, see below.
    --modules MODULE[,MODULE ...]
        Modules to run. Default is to run all available.
        List available modules and exit.
    --domains DOMAIN[,DOMAIN ...]
        Process only these domains.
        Print an error message and continue on database or SOAP communication
        errors instead of aborting.
        Print fairly detailed information to help trace where things go wrong.


Configuration is through a file written in YAML ( The default
looks like this---just replace the values in there but don't change the format.
The script validates the contents though to make sure everything it needs is

    gid: 5000
    homedir: /var/vmail
    maildir: /var/vmail/%d/%a
    uid: 5000
    allow_override: All
    ruby: y
    suexec: y
    traffic_quota_lock: n
    stats_type: webalizer
  db: psa
  port: 3306
  user: pleskuser
  pass: pleskpass
    user: root
    port: 22
  uri: http://localhost:8079/remote/
  proxy: http://localhost:8079/remote/index.php
  user: apiuser
  pass: 123456
  writerc: migration_offlineimap.rc
  fromserver: mail.%d
  use_ssl: 1

The "plesk" and "ispconfig" sections should be self-explanatory: they specify
how to access your respective installations. While ISPconfig has a reasonably
easy SOAP interface (in as far as that can be said about *any* SOAP interface),
Plesk's homegrown "XML RPC" is a complete train wreck so I speak SQL directly to
its database. This has only been tested with Plesk 9.5 though!

The "server" section simply specifies your ISPconfig server IPs. If you have
only one server for several functions (web/mail/db), just specify the same
address repeatedly.

The "defaults" contain settings that are found in ISPconfig but not directly
equivalent in Plesk. The following might need explanation:

ip_map: map old Plesk web server IPs to new ISPconfig ones. If you had several
        IPs and your sites distributed across them, this will recreate the
        same distribution in ISPconfig.
allow_override: Apache-style directive for .htaccess override permissions
                for every site.
maildir: A printf-style string that has "%d" replaced by the mail domain and
        "%a" by the account name. Some people prefer the full mail address in
        the final part, like "/var/vmail/%d/%a@%d", or for very small sites
stats_type: The kind of webstats program the site wants. I have no idea whether
            anything besides "webalizer" really works.
postscript: The name of a script that plesk2ispconfig will write and that must
            be executed on the ISPconfig system later to complete the migration.
            As ISPconfig sensibly hands off more complicated actions such as
            website creation to a cron job, we can't assume all of that has been
            done when an API call returns so we have to defer rsyncing of
            websites and dumping/restoring of databases as well. After the
            script finishes, copy the file to the target server, wait ~10min and
            execute it. It uses the user, host and port entries under
            plesk->sync to log in to the Plesk system using SSH. Every step
            opens a new connection so you'd better set up public-key
            authentication to this account if you want to avoid typing the same
            password over and over again.
mailsync: plesk2ispconfig writes an offlineimaprc file named as specified under
          "writerc". Using this to run the "offlineimap" tool, you can
          synchronize IMAP accounts from source to target even if they use
          different server software. "fromserver" is the server name to connect
          to, in case it's not the one Plesk runs on; this field can use the
          "%d" placeholder for the client account's domain name. The default
          would read IMAP data for from

databases: These settings control the migration of databases.
           Currently the only setting is a boolean value under "rewrite_names"
           that controls whether or not to rewrite database names to ISPconfig's
           scheme. Both have their drawbacks:
           - If you do rewrite the names, database and user names will get a
           prefix of c_$CLIENTID and cu_$CLIENTID respectively. Changing the
           database settings in ISPconfig will work but you'll have to change
           the credentials in all installed web applications, CMSs and whatever
           uses these databases. Theoretically we could guess the system and add
           an edit script after webspace rsyncing but this will probably only
           ever happen for the most common ones like Joomla, Wordpress and
           - If you do not rewrite the names, you save the hassle of changing
           each site's DB credentials but changing anything about the DB later
           in ISPconfig will fail. Then the only solution is to create a new
           database in ISPconfig, dump the old one and restore it into the new
           one before DROPping it.

We're getting there. The script has done its first complete migration with only
little manual cleanup afterwards, but one should still take care and give the
resulting shell scripts at least a quick looking over before running them.
Particularly the following things should be kept in mind if they apply to your

- The database format may have changed in Plesk 10 and cause things to break.
  If you have a Plesk10 installation that you'd like to convert, send me a dump
  (edit out your passwords though, they are stored in clear text) and I'll have
  a look.
- Custom name servers are not supported yet.
- The only database server supported is mysql. I haven't had a need
  for anything else, but support shouldn't be hard to add.
- Web stats should be preserved if using the same system (webalizer, awstats
  etc.) on both installations, but are not.
- Error handling is rather crude.

If you should run into an error that says "SOAP error for method
`domains_domain_add': You do not have the permissions to access this function.",
this is likely an ISPconfig bug though. You have two possibilities to work
around it:
a) Find the function "domains_domain_add" in
/usr/local/ispconfig/interface/lib/classes/ and delete the whole
checkPerm() call (i.e. all but the function's last line)
b) Disable the Domains module (it's not essential for the migration to work) by
calling the converter with "--modules Clients,Databases,Mail,Websites"

        Perl and the following modules:

	Matthias Bethke <>