• We value your experience with Plesk during 2025
    Plesk strives to perform even better in 2026. To help us improve further, please answer a few questions about your experience with Plesk Obsidian 2025.
    Please take this short survey:

    https://survey.webpros.com/

Issue Issues with migration from web host to web admin

nelteren

New Pleskian
There are some technical problems with the Plesk Migrator tool if it's being used to migrate a domain from a 'higher tier' version of plesk to a 'lower tier' one; from a shared hosting server to a private hosting server that's only serving one domain and thus only requires the web admin edition. It appears to me that the Migrator isn't written to be aware of the fact that multiple license versions exist.

I tried 'repairing' the php-fpm settings via the command line utility, but this fails to find any problems.

Thankfully for me, the CLI tools show that under the hood, the actual plesk binary is roughly the same. It still works with 'subscriptions', even though those are now invisible in the UI. Rather than these not existing at all, they exist 'in the background' (possibly all assigned to be some variant of the basic 'unlimited' sub).

This can be a problem when settings are migrated from older OS to newer OS in at least one case (possibly there could be more problems with other things that are assigned per subscription in the web host edition): PHP handlers. This manifests itself as follows: When sending a HTTP request for any regular file on any vhost, the file is returned as normal. However, any PHP script will return a 404, and not the default 404 handler page either, but a mysterious page I can't seem to find on the OS that just contains "File not Found" in text, and nothing else.

It's not the default apache 404, nor the Plesk 404, which is what I found so strange about that.

The issue is with the way plesk mangles the config files. It can't connect everything together. I tried manually trudging through them, but between the complexity of the setup and the outdatedness of many of the online documentation, I gave up after a few hours of digging, and went in a different direction, which is where I found out that, while subscriptions are hidden in the web UI, the command line is much more lenient, and basically still full-featured.

Code:
domainName="acme.com"
phpversion="plesk-php84-fpm"

plesk bin subscription -u $domainName -php true
plesk bin subscription -u $domainName -php_handler_id $phpversion

This ends up restoring PHP functionality.

I still don't quite know what was happening in the details though, or why this works.

Note: There may be more severe problems with the migrator if it is indeed the case that it's agnostic to the whole 'different subscription tiers' thing in that one could potentially circumvent said tiers' restrictions by using the plesk CLI and/or the migrator in some clever way when running multiple Plesk servers.
 
The next problem I encountered is with subdomains.

Subdomains of a domain aren't properly migrated. The files are moved, the databases are moved, but the panel's awareness of them isn't.
So their PHP settings and certificates are not assigned even if you migrate over the certificate to the new server.

Upon re-creation of the subdomains, the panel gets into some kind of inconsistent state. The various tools and settings pages on the domains are replaced by an "invalid JSON error". Trying to access the page for the subdomains gets me the following crash.

MessageJSON.parse: unexpected character at line 1 column 1 of the JSON data
Stack tracet@https://IPADDR/cp/javascript/vendors.js?1771405883:1:384351
e.prototype.getResultsFromLink/I<@https://IPADDR/cp/javascript/vendors.js?1771405883:1:417247
i@https://IPADDR/cp/javascript/vendors.js?1771405883:1:425363
o/</then/<@https://IPADDR/cp/javascript/vendors.js?1771405883:1:425278
then@https://IPADDR/cp/javascript/vendors.js?1771405883:1:425245
o/</i/<@https://IPADDR/cp/javascript/vendors.js?1771405883:1:425373
_@https://IPADDR/cp/javascript/vendors.js?1771405883:1:341553
w@https://IPADDR/cp/javascript/vendors.js?1771405883:1:342008
t.error@https://IPADDR/cp/javascript/vendors.js?1771405883:1:342594
n/<@https://IPADDR/cp/javascript/vendors.js?1771405883:1:427961
n@https://IPADDR/cp/javascript/vendors.js?1771405883:1:427930
error@https://IPADDR/cp/javascript/vendors.js?1771405883:1:426315
_@https://IPADDR/cp/javascript/vendors.js?1771405883:1:341553
w@https://IPADDR/cp/javascript/vendors.js?1771405883:1:342008
t.error@https://IPADDR/cp/javascript/vendors.js?1771405883:1:342594
error@https://IPADDR/cp/javascript/vendors.js?1771405883:1:509505
_@https://IPADDR/cp/javascript/vendors.js?1771405883:1:341553
w@https://IPADDR/cp/javascript/vendors.js?1771405883:1:342008
t.error@https://IPADDR/cp/javascript/vendors.js?1771405883:1:342594
error@https://IPADDR/cp/javascript/vendors.js?1771405883:1:514581
_@https://IPADDR/cp/javascript/vendors.js?1771405883:1:341553
w@https://IPADDR/cp/javascript/vendors.js?1771405883:1:342008
t.error@https://IPADDR/cp/javascript/vendors.js?1771405883:1:342594
e.prototype.consumeQueue/u/</<@https://IPADDR/cp/javascript/vendors.js?1771405883:1:508075
e.prototype.consumeQueue/u/<@https://IPADDR/cp/javascript/vendors.js?1771405883:1:508048
u@https://IPADDR/cp/javascript/vendors.js?1771405883:1:508023
_@https://IPADDR/cp/javascript/vendors.js?1771405883:1:341553
w@https://IPADDR/cp/javascript/vendors.js?1771405883:1:342008
t.error@https://IPADDR/cp/javascript/vendors.js?1771405883:1:342594
t/batchHandler/y</y<@https://IPADDR/cp/javascript/vendors.js?1771405883:1:505627

This appears to be minified javascript. It's probably a better idea to attempt to reproduce (according to the steps above) than analyze this obfuscated dump.
 
Back
Top