# PHP applications

> Install Joomla, OpenCart, PrestaShop, phpBB, MediaWiki or Laravel in one click, find each admin area, and run other PHP apps you upload yourself.

Source: https://zopanel.net/docs/php-apps  
Updated: 2026-10-09

ZoPanel installs popular PHP applications into an empty PHP website in one click: it downloads the latest stable release from the official source, creates a MariaDB database and runs the application's own command-line installer as the hosting account. Use it to start a new site quickly; for code you develop in Git, use [Git deploy](/docs/git-deploy) instead, and for WordPress see [WordPress Toolkit](/docs/wordpress).

## Before you start

- **An empty PHP website.** Create a website of type **PHP** in **Websites → New website** (see [Websites and PHP](/docs/hosting)). The installer refuses a folder that already holds files; only the default `index.html`, `.well-known` and `.user.ini` are allowed.
- **A free database.** Each application gets its own database, which counts toward the package's database limit and the license (Free: 10 databases, see [Licensing](/docs/licensing)).
- **A suitable PHP version** installed under **Runtimes** (see the table below). Laravel also needs **Composer**, installed under **Runtimes → Composer**.
- The package must include **App installer & WordPress tools**. Without it, the card below is not shown.

Point the domain to the server and keep SSL on before you install: the application is configured with `https://` only when the website already has a certificate.

## Supported applications

| Application | Category | PHP range in the panel | Web server | Admin area |
| --- | --- | --- | --- | --- |
| Joomla | Content management | 8.3+ | nginx | `/administrator/` |
| OpenCart | Online store | 8.1+ | Apache mode | `/admin/` |
| PrestaShop | Online store | 7.4–8.1 | Apache mode | `/admin<random>/` (secret) |
| phpBB | Forum | 7.2+ | nginx | `/adm/` |
| MediaWiki | Wiki | 8.3+ | nginx | `/index.php/Special:SpecialPages` |
| Laravel | PHP framework | 8.2+ | nginx, document root `public` | `/` (no admin area) |

The panel checks the range above, which follows the release it installs:

| Application | Release installed | Upstream PHP requirement |
| --- | --- | --- |
| Joomla | Latest stable (Joomla 6) | PHP 8.3 or newer ([requirements](https://manual.joomla.org/docs/next/get-started/technical-requirements/)) |
| OpenCart | Latest release package (4.1) | PHP 8.1 or newer |
| PrestaShop | Latest release that ships a download package (8.2) | PHP 7.2–8.1 |
| phpBB | Latest stable (3.3) | PHP 7.2 or newer |
| MediaWiki | Latest stable branch | PHP 8.3 or newer for 1.46 ([compatibility](https://www.mediawiki.org/wiki/Compatibility)) |
| Laravel | Newest version Composer can install on the chosen PHP | Laravel 13 needs PHP 8.3; on PHP 8.2 Composer installs an older major |

If the website's PHP version is outside the panel range, ZoPanel switches the website to the newest installed version inside the range. If none is installed, the install stops with "*<App>* needs PHP *<range>*; ask the administrator to install a suitable PHP version". To choose the version yourself, set **PHP version** on the **PHP & config** tab before you install.

## Install an application

1. Open the website (**Websites → Manage**) and stay on the **Overview** tab.
2. In the **Applications** card, click the application. The card is shown while the website runs PHP, its document root is inside `public_html` and no application is installed yet.
3. Check the badges: the PHP range, **Apache mode (.htaccess)** when the app needs it, and a link to the project's website.
4. Fill in the fields:

| Field | Applications | Rules |
| --- | --- | --- |
| Site title | All | 1 to 100 characters. Defaults to the domain. |
| Admin email | Joomla, OpenCart, PrestaShop, phpBB | A valid address. Defaults to your account's email. |
| Admin username | All except Laravel | 3 to 40 letters, digits, `.`, `_` or `-`. Defaults to `admin`; choose another name. |
| Admin password | All except Laravel | 8 to 128 characters, no `:`. A random 16-character password is proposed. |

5. Click **Install**. A task window shows the progress.

What the task does:

1. Turns on Apache mode for OpenCart and PrestaShop (Apache is installed on the server the first time, see [Apache mode](/docs/hosting#apache-mode-for-htaccess)).
2. Creates a database and user named `<account>_<two letters><four random characters>` with a random 24-character password, linked to the website.
3. Downloads the release over HTTPS (resuming if the connection drops), unpacks it and runs the installer. Passwords never appear on a command line.
4. Removes the `install`/`installation` folder and makes the files holding the database password readable by the account only.
5. Ends with the line `Admin area: https://<domain>/<path>`.

If any step fails, the half-installed files and the database are removed and the website is restored as it was, so you can fix the cause and try again.

**Note:** the database password is not shown in the panel. It is in the application's configuration file (see the next section). Change it under **Databases** only if you also update that file.

## After the install

Once an application is installed, the website header shows an **Admin area** button that opens the admin URL (PrestaShop excepted, see below). All applications are installed in English; change the language in each admin area.

| Application | Sign in with | Config file | First steps |
| --- | --- | --- | --- |
| Joomla | Admin username | `configuration.php` | Turn on **Use URL Rewriting** in Global Configuration for clean URLs (nginx already routes them to `index.php`). Install a language pack if needed. |
| OpenCart | Admin username | `config.php`, `admin/config.php` | `.htaccess.txt` is already renamed to `.htaccess`, so SEO URLs work in Apache mode. Set up store details, payment and shipping. |
| PrestaShop | **Admin email** and password | `app/config/parameters.php` | Copy the admin URL from the task log. The country is preset to Vietnam; change it under International settings. Emails were not sent during install. |
| phpBB | Admin username | `config.php` | Email is disabled at install: turn it on in the ACP under Board configuration → Email settings. |
| MediaWiki | Admin username (first letter capitalised by MediaWiki) | `LocalSettings.php` | Pages use `/index.php/Title` URLs. Edit `LocalSettings.php` for uploads, skins and permissions. |
| Laravel | – | `.env` | See below. |

**Important:** PrestaShop's admin folder is renamed to `admin` followed by 8 random characters, as PrestaShop requires. The address appears only in the task log (**Tasks**). Save it; if you lose it, find the folder whose name starts with `admin` in `public_html` with the File Manager.

### Laravel

The Laravel installer runs `composer create-project laravel/laravel` with the website's PHP version, then:

- writes `.env` from `.env.example` with `APP_NAME` (the site title), `APP_ENV=production`, `APP_DEBUG=false`, `APP_URL` and the MySQL connection (`DB_CONNECTION=mysql`, `DB_HOST=localhost`, the new database and user);
- runs `php artisan key:generate --force`, `php artisan migrate --force` and `php artisan storage:link`;
- sets the website's document root to `public_html/public` and the **Laravel** rewrite rules.

The project lives in `public_html`, outside the document root, so `.env` and `vendor` cannot be downloaded. For scheduler, queue and deployment details, see [Laravel](/docs/laravel).

The installer works on a **PHP** website and on a **Laravel** website alike: the project always goes into `public_html`, and the document root becomes `public_html/public`.

## Update an application

ZoPanel installs the applications but does not update them: use each project's own updater. Take a backup of the website and its database first (see [Backups](/docs/backups)).

| Application | How to update |
| --- | --- |
| Joomla | System → Update → Joomla in the administrator ([docs](https://docs.joomla.org/)). |
| OpenCart | Follow the upgrade guide of your version ([docs](https://docs.opencart.com/)). |
| PrestaShop | The Update Assistant module ([docs](https://devdocs.prestashop-project.org/8/basics/keeping-up-to-date/)). |
| phpBB | Follow the update instructions in the release package ([docs](https://www.phpbb.com/support/docs/en/3.3/ug/upgradeguide/)). |
| MediaWiki | Replace the files, then run `php maintenance/run.php update` ([docs](https://www.mediawiki.org/wiki/Manual:Upgrading)). |
| Laravel | `composer update` over SSH, then `php artisan migrate --force`. |

Run command-line steps in the [SSH terminal](/docs/ssh-terminal) as the hosting account, with the same PHP version as the website, for example `php8.3 maintenance/run.php update`.

## Other PHP applications

Any PHP application that is not in the list can be installed by hand:

1. Create a **PHP** website with the PHP version the application needs.
2. Upload the files to `public_html` with the [File Manager](/docs/file-manager) or [SFTP](/docs/ftp-sftp).
3. Create a database under **Databases** and run the application's web installer.
4. If the application serves from a subfolder (for example `public` or `web`), set **Document root** on the **PHP & config** tab, for example `public_html/public`. It must stay inside `public_html`.
5. If it relies on `.htaccess` rewrites, turn on **.htaccess support (Apache mode)** on the **Tools** tab. With the **Standard** rules, nginx already sends unknown URLs to `index.php`, which is enough for most front controllers.

### Composer

When the project has a `composer.json`, install its dependencies over SSH with the website's PHP version (Composer must be installed under **Runtimes**):

```bash
cd ~/domains/example.com/public_html
php8.3 /usr/local/bin/composer install --no-dev --optimize-autoloader
```

If the project is in a Git repository, [Git deploy](/docs/git-deploy) runs Composer for you on every release and detects Laravel and Symfony.

PHP options such as `upload_max_filesize` are set in **Tools → PHP settings for this website**; `php_value` lines in `.htaccess` are ignored.

## Troubleshooting

| Message or symptom | What to do |
| --- | --- |
| "the website folder is not empty: install applications into a new, empty website" | Install into a new PHP website, or empty `public_html` first. |
| "this website already runs an application; create a new website for …" | One application per website. Create another website. |
| "applications need a PHP website" | The website has no PHP version or is a proxy website. Set a **PHP version** or create a PHP website. |
| "… needs PHP …; ask the administrator to install a suitable PHP version" | Install a PHP version in the range under **Runtimes**. |
| "database limit reached" | The package allows no more databases. Delete one or ask for a bigger package. |
| "cannot find the latest … release" | The server could not reach GitHub or the project's download site. Try again later. |
| Laravel: an older major version was installed | The website runs PHP 8.2, so Composer installed the newest Laravel that supports it. For the latest Laravel, use PHP 8.3 or newer. |
| Laravel: `composer failed` | Make sure Composer is installed under **Runtimes** and the PHP version is 8.2 or newer. |
| The **Applications** card is missing | The website already has an application, has no PHP, its document root is outside `public_html`, or the package does not include **App installer & WordPress tools**. |

The full installer output is kept in **Tasks**.

## Related

- [Websites and PHP](/docs/hosting)
- [Laravel](/docs/laravel)
- [Git deploy](/docs/git-deploy)
- [Databases](/docs/databases)
- [Backups](/docs/backups)
- [File Manager](/docs/file-manager)
