# PHP and Node.js versions

> Source: https://www.allsweb.com/sixpanel/docs/php-and-node-versions
> Markdown for agents: https://www.allsweb.com/sixpanel/docs/php-and-node-versions.md
> Publisher: AllsWeb (www.allsweb.com)

Part of: SixPanel documentation

**What this page is for:** run a website on a PHP or Node.js version other than the
server's own — an older application that needs PHP 7.4 or 8.2, an app pinned to
Node.js 20 or 22 — without changing anything for the rest of the server.

**The rule that does not move:** this server's own PHP and Node.js stay exactly as
they are. Your 6amMart projects, phpMyAdmin and every website that has not chosen
otherwise keep running on them. Extra versions are **optional downloads**: nothing is
installed until you press **Install**, and an installed version does nothing until you
move a website onto it.

**You need**

- A website of the kind that runs PHP (PHP website, WordPress) or Node.js (Node.js app,
  Create with AI, or a static website whose files are built before they are served).
  6amMart projects always run on the server's own PHP.
- For a PHP version: about 6–9 MB of download and 25–40 MB of disk per version.
- For a Node.js version: about 20–32 MB of download and 140–210 MB of disk per version.
- To install or remove a version, or change a version's extensions and settings: the
  owner's login. A temporary login can move a website between the versions already
  installed, and turn that website's own extensions on or off.

---

## Server → PHP

Open **Server** and the **PHP** tab.

**PHP versions on this server** lists what is installed. The first row is the
server's own (marked **server's own**); beside each version you see whether it is
running, how long php.net supports it, and which websites (and, for the server's own,
which 6amMart projects) use it. **Manage** — or a click on the *used by* count — opens
that version below the table: its websites (each one movable from there), its extensions
and its server-wide settings. **Remove** appears only on a version no website uses — the
server's own can never be removed.

**Download another PHP version** lists every version available for this server — from
5.6 to the newest — with its size and support:

- *supported until …* — php.net still fixes bugs in it;
- *security fixes only, until …* — still safe to run, no more bug fixes;
- *end of life since …* — no fixes at all any more. Use it only for an old application
  that cannot run on anything newer;
- *pre-release* — a version that is not out yet. For testing only.

Versions past their end of life are folded away under **Show versions past their end of
life**, so the list opens on the ones worth choosing.

Press **Install** on the one you need. The download takes about a minute and runs as a
job you can watch. When it finishes, the new version is running beside the server's
own, with SixPanel's settings (the same tuned limits and code cache as the server's
own PHP) and the same sandbox, and every website can choose it. Those settings follow the
server's own PHP from then on: when **Auto-tune** or a SixPanel update changes them, every
extra version gets the same values — your own lines for a version (below) still win.

The versions come from packages.sury.org, the repository Debian's own PHP maintainer
publishes. SixPanel pins it so that **only** the extra PHP versions come from there:
the web server, the database and the server's own PHP keep coming from your
distribution's updates.

### Websites of one version

The first part of **Manage** lists every website on that version. Beside each one,
**Move to** offers the other installed versions — choose one and press **Move**; it is
the same move as on the website's own **PHP** page (below), with the same checks.
6amMart projects are named under the server's own version and have no **Move**: they
always run on the server's own PHP.

### Extensions of one version

Each installed extension of a version is either loaded for **every website** on that
version, or **left to each website** — then only the websites that switch it on load
it. Install one, then choose **Leave to each website** if only some websites need it.
The extensions every website counts on (MySQL, curl, mbstring, intl, gd, zip, redis,
imagick and the rest of SixPanel's set) are always on and cannot be removed.

### Server-wide settings of one version

`php.ini` lines for every website on that version, one `name = value` per line —
for example `max_input_vars = 10000`. They win over SixPanel's tuned values, which are
shown above them, and a SixPanel update never undoes them. A website's own PHP page can
still change most settings for itself. Lines that load extensions, change how the code
cache behaves or move SixPanel's folders are refused here; the page says which.

The three **sizes** of the code cache are the exception, and they can only be raised:
`opcache.memory_consumption` (megabytes — up to a quarter of the server's memory, because
one cache is shared by every project and website on that version),
`opcache.interned_strings_buffer` (megabytes — up to a quarter of the line before) and
`opcache.max_accelerated_files`. Write whole numbers with no unit. What you save replaces
what was in the box, so keep the `opcache.memory_consumption` line you raised when you add
the second one — without it the cache goes back to the size SixPanel gave it, and the
second line is checked against that. You only need them when
**Health** says the compiled-code cache is full or getting tight: that row names the exact
line to add here. Saving reloads PHP and the cache starts again at the new size.

## Move a PHP website to another version

From **Server → PHP**: open the version it runs on with **Manage**, choose the new
version under **Move to** beside the website, and press **Move**. Or open the website,
then **PHP**: the **PHP version** card shows the version it runs on — choose another
installed version and press **Move to this version**.

What happens, in order:

1. The website's pool is written into the new version, which reloads.
2. The new version must **answer a test request for this website** through its own
   socket — and load every extension the website turned on.
3. Only then are visitors sent to it, and the old version stops serving the website.

If step 1 or 2 fails, nothing changes: the website keeps running on the version it had.
Composer, WP-CLI, WordPress's scheduled tasks, your scheduled jobs and your deploy
commands move with the website — a `php artisan …` line runs on the new version too.

**Check the website afterwards.** Code written for one PHP version does not always run
on another; if it does not, move it back the same way.

### Extensions for this website only

Under the version card, **Extensions for this website only** lists the extensions that
are installed for the website's version but left to each website. Tick the ones this
website needs and press **Save extensions**. The panel reloads PHP and asks the website's
pool whether each one is now loaded — if one is not, the previous list stays.

## Server → Node.js

Open **Server** and the **Node.js** tab.

The first row is the server's own Node.js — the version SixPanel itself runs on — with
the websites that use it. Below it are the versions you installed, each with how its
download was checked:

- *signature by …* — the download matched nodejs.org's published checksums, and those
  checksums carry a valid signature from one of the Node.js release team's keys;
- *checksum only* — the download matched the checksums, but their signature could not
  be checked at the time (the keys could not be fetched). Hover to see why.

**Download another Node.js version** lists the newest release of every Node.js line,
with its support (the server's own version is marked *server's own* there, not offered
again):

- *LTS "…" until …* — long-term support, the right choice for a live website;
- *LTS, maintenance until …* — still supported, near the end of its life;
- *Current* — the newest line, before it becomes LTS;
- *end of life since …* — no security fixes (folded away under **Show versions past
  their end of life**).

Press **Install**, or type an exact version under **Or a specific version** (for example
`20.11.1`). The download is checked against nodejs.org's signed checksums before it is
unpacked; a download that does not match is never installed. Versions up to Node.js 24
also bring pnpm and yarn (corepack); from Node.js 25 on, pnpm and yarn run through npx,
as they do on the server's own Node.js.

**Websites and their Node.js**, at the bottom of the tab, lists every website that runs
on Node.js or builds with it, and the version it uses. Choose another version beside it
and press **Move** — the same rebuild as on the website's own **Settings** (below).

## Choose a Node.js version for a website

Open the website, then **Settings**. The **Node.js version** card shows what the website
builds and runs on. If its `package.json` asks for a version (`"engines": { "node": … }`),
the card says whether the server's own fits, or which installed version does — and marks
it with ✓ in the list.

Choose a version and press **Build with this version**. The live version's files are
copied into a new version, its packages are installed again for the new Node.js, it is
built, and it starts beside the running one. Visitors move over only when it answers —
if the build fails, nothing changes and the website keeps its old version.

The version is part of each build: **Deploys** marks the new one *built again with
Node.js …*, and rolling back to an older version runs it on the Node.js it was built with.

A **static website** whose files are a source project (a `package.json` with a `build`
script — SixPanel builds it before nginx serves the result) has the same card, and the
version is used for its build only. A static website with no build step runs no Node.js
and has no card.

## Remove a version

**Remove** is offered only on a version no website uses (for Node.js: no website and no
live version was built with it). Move those websites first. The server's own PHP and
Node.js cannot be removed from these pages.

**Uninstalling SixPanel** (`sixpanel server uninstall`) removes the extra PHP and Node.js
versions SixPanel downloaded — only the packages its own installs added, never one you
installed yourself — together with the packages.sury.org source, and puts php-common back
on your distribution's version when apt can do that without removing anything. A PHP
version a website still runs on stays (nginx keeps serving that website after the
uninstall), and so does a Node.js version a website was built with while the panel's data
is kept. The uninstall's output lists what stayed and why.

## How to check it worked

- **Server → PHP**: the new version shows *running*; after moving a website, its row
  counts the website.
- The website's **PHP** page shows the version in its badge; **Show phpinfo()** reports
  it.
- **Server → Health** has a row for the extra versions: each PHP version must be running
  and accept its own configuration; each Node.js version must start and report the
  version its folder is named for.

## If it went wrong

- **"PHP x.y did not answer for this website"** — the move stopped before visitors were
  sent anywhere; the website is unchanged. Open **Server → Health** for the version's
  state, or **Logs** on the website.
- **"this version of the site was built with Node.js x, which is no longer installed"**
  — install that version again on **Server → Node.js**, or deploy again.
- **A version is stopped** — Health shows it, and its row on **Server → PHP** has a
  **Start** button. If it will not start, the usual cause is a server-wide setting you
  added to that version: open **Manage**, clear the line under **Server-wide settings**,
  and press **Start** again.
- **apt says another package run is using it** — the install waits up to ten minutes for
  the other run (an automatic update) to finish, then goes on.
