ElmsPark Guides
PageMotor · Hosting

PageMotor on a VPS the easy way, with CloudPanel

A point-and-click way onto a proper VPS. CloudPanel gives you a clean web panel, and PageMotor gets the writable, correctly-owned filesystem it needs. One paste in the terminal to install the panel, then everything else is clicks.

🖥 GUI, not the terminal Free panel about 20 minutes
Why this route: our Vultr guide builds the same stack by hand on the command line. This one does it through a panel instead, for people who would rather click than type. You still get a real VPS with a writable, properly-owned filesystem, which is the thing PageMotor needs and a locked-down shared host On Hostinger? Follow the picture-by-picture Hostinger guide, every step shown as a screenshot.
Tested on Hostinger, June 2026, and re-verified on a clean box in August 2026. Five traps to dodge:
  1. Pick CloudPanel inside the order wizard. On the "Choose what to install" screen, open the Control panel tab and choose CloudPanel on Ubuntu 24.04, not a plain OS.
  2. No underscores in the database name or user. CloudPanel rejects them ("this value is not valid"). Use hyphens, for example pagemotor-db and pagemotor-user.
  3. Choose PHP 8.3. The new-site form may default to a newer version. PageMotor needs 8.2 or newer, and 8.3 is the safe choice.
  4. Uploading with File Manager? Extract makes a subfolder. Let it extract into a folder such as pagemotor, then point the site at it: open the site, Settings, set Root Directory to yourdomain.com/pagemotor, Save.
  5. Fix the PHP timezone before creating any site. CloudPanel images default date.timezone to Europe/Berlin in every PHP version they ship, whatever region the box is in, and PageMotor 0.10's browser sign-in fails on any timezone ahead of UTC (cause 6b). Set date.timezone = UTC in /etc/php/8.3/fpm/php.ini and restart php8.3-fpm first, because CloudPanel bakes the value into each site at creation time. Forgot? It is editable per site under Settings → PHP Settings → Additional Configuration Directives.

1A VPS with plain Ubuntu

Spin up a VPS at any provider, Hetzner, DigitalOcean, Vultr or Hostinger, with at least 2 GB of RAM and a plain Ubuntu 22.04 or 24.04 image. CloudPanel wants a fresh box, so don't install anything else on it first.

On Hostinger you can skip the next step: at setup, choose the CloudPanel template instead of plain Ubuntu and the panel is installed for you. On any other host, do step 2.

2Install CloudPanel (one paste)

SSH into the box as root and run these three lines. The install takes five to ten minutes, and it is the only time you touch the command line.

apt update && apt upgrade -y
curl -sS https://installer.cloudpanel.io/ce/v2/install.sh -o install.sh
sudo bash install.sh

When it finishes, open https://YOUR-SERVER-IP:8443 in your browser (expect a certificate warning the first time, that is normal on a raw IP) and create your admin account. From here on it is all panel.

3Create the site

In CloudPanel go to Sites → Add Site → Create a PHP Site, and set:

CloudPanel creates the Nginx vhost, the PHP-FPM pool, and the document root at /home/<site-user>/htdocs/<domain>/.

4Create the database

Go to Databases → Add Database. Give it a name, a database user and a password, and note all three, PageMotor needs them in a moment. CloudPanel runs MySQL / MariaDB, which PageMotor is happy with.

5Upload PageMotor

Because the files are uploaded as the site user, they are owned by the same user PHP runs as. That is the whole game: PageMotor can write its compiled theme CSS to disk, which is exactly what a locked-down shared host won't let it do.
Extracted the zip over SSH as root instead? Everything lands owned root:root with no group write, PHP cannot save a thing, and it looks exactly like a PageMotor fault. Run chown -R <site-user>:<site-user> . in the docroot after extracting and the problem never existed.

6The one PageMotor tweak

PageMotor routes every request through index.php, so the vhost needs the standard front-controller rewrite. Current CloudPanel renders two server blocks per site: a front one on 80/443 that terminates TLS and proxies to a PHP backend on port 8080, and the backend itself. The rewrite already ships in the backend block on current builds, so open the site's Vhost tab and check the 8080 server block carries:

try_files $uri $uri/ /index.php?$args;

If it is there, leave it alone. On an older single-server vhost (one server block, with the location ~ \.php$ handler in it), make sure the main location block reads location / { try_files $uri $uri/ /index.php?$query_string; }. Either way, that line is the difference between clean PageMotor URLs and a wall of 404s.

7Turn on SSL

Point your domain's DNS at the server's IP first (an A record) and wait for it to resolve. Then in the site go to SSL/TLS → Actions → New Let's Encrypt Certificate, add your domain, and Create and Install. CloudPanel issues and renews the certificate for you.

Why this fixes the “design won't save” problem

The most common PageMotor “bug” is a design that won't apply: you save it, nothing changes, no error. Nine times out of ten that is a host refusing to let PHP write the compiled stylesheet to disk (more on what hosts block in the shared-hosting guide).

On a CloudPanel VPS that is gone by construction. It is a real server with a normal, writable filesystem, the site files are owned by the user PHP runs as, and nothing firewalls PHP from doing its job. PageMotor compiles its CSS, writes it, and serves it, exactly as it is meant to.

Connecting Claude from this host

PageMotor speaks MCP natively, so once your site is up you can connect Claude Code or Claude.ai to it and let Claude build pages, manage content and run plugins for you. The connection asks a little more of a host than serving pages does. Four things must be true: the Authorization header must reach PHP intact, PageMotor must be allowed to answer its dynamic /.well-known/ routes itself, PHP's clock must be on UTC, and nothing may redirect Claude's POST to /mcp (the trailing-slash trap).

You do not need to test any of that by hand. Install EP Host Check and read its MCP / Claude connection rows: since v1.2.0 its five checks cover all of this from your admin panel, no working Claude connection required, each with a plain fix. If a row fails, or the connection misbehaves anyway, the MCP troubleshooting guide has the exact diagnostic and fix for every verified cause.

The one to watch on this stack: CloudPanel's stock vhost lets /.well-known/ fall through to the filesystem for Let's Encrypt, which swallows the OAuth discovery routes Claude follows to sign in. And because that block sits in the front server, where there is no PHP at all, the fix on CloudPanel must proxy_pass the rest of /.well-known/ to the site's 8080 backend rather than try_files it. Section 6d of the troubleshooting guide has the exact blocks, verified on a clean box; apply them through the site's Vhost tab so renewal cannot revert them.
Three more field notes from a clean CloudPanel box (August 2026). The backend hardcodes fastcgi_param HTTPS "on", so PageMotor builds its URLs as https through the internal proxy hop with nothing to configure; if you later put Cloudflare in front, set its SSL/TLS mode to Full (strict), never Flexible, because the front server 301s every plain-HTTP fetch and Flexible loops on it. Varnish ships installed but is off per site by default; if you enable it for a PageMotor site, add explicit passes for /api/, /mcp/, /oauth/ and /.well-known/, because the stock VCL only bypasses /admin/. And CloudPanel stores vhost templates as rows in its own database, not as files, so a custom template is added in Admin Area → Vhost Templates, not by editing something in /etc.
🛠 Prefer the command line, or want no panel at all? The Vultr guide builds the same Nginx + PHP 8.3 + MariaDB stack by hand, no panel involved.