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.
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 instead, and for WordPress see WordPress Toolkit.
Before you start
- An empty PHP website. Create a website of type PHP in Websites → New website (see Websites and PHP). The installer refuses a folder that already holds files; only the default
index.html,.well-knownand.user.iniare 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).
- 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) |
| 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) |
| 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 " needs PHP ; 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
- Open the website (Websites → Manage) and stay on the Overview tab.
- In the Applications card, click the application. The card is shown while the website runs PHP, its document root is inside
public_htmland no application is installed yet. - Check the badges: the PHP range, Apache mode (.htaccess) when the app needs it, and a link to the project's website.
- 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. |
- Click Install. A task window shows the progress.
What the task does:
- Turns on Apache mode for OpenCart and PrestaShop (Apache is installed on the server the first time, see Apache mode).
- Creates a database and user named
<account>_<two letters><four random characters>with a random 24-character password, linked to the website. - Downloads the release over HTTPS (resuming if the connection drops), unpacks it and runs the installer. Passwords never appear on a command line.
- Removes the
install/installationfolder and makes the files holding the database password readable by the account only. - 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
.envfrom.env.examplewithAPP_NAME(the site title),APP_ENV=production,APP_DEBUG=false,APP_URLand the MySQL connection (DB_CONNECTION=mysql,DB_HOST=localhost, the new database and user); - runs
php artisan key:generate --force,php artisan migrate --forceandphp artisan storage:link; - sets the website's document root to
public_html/publicand 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.
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).
| Application | How to update |
|---|---|
| Joomla | System → Update → Joomla in the administrator (docs). |
| OpenCart | Follow the upgrade guide of your version (docs). |
| PrestaShop | The Update Assistant module (docs). |
| phpBB | Follow the update instructions in the release package (docs). |
| MediaWiki | Replace the files, then run php maintenance/run.php update (docs). |
| Laravel | composer update over SSH, then php artisan migrate --force. |
Run command-line steps in the 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:
- Create a PHP website with the PHP version the application needs.
- Upload the files to
public_htmlwith the File Manager or SFTP. - Create a database under Databases and run the application's web installer.
- If the application serves from a subfolder (for example
publicorweb), set Document root on the PHP & config tab, for examplepublic_html/public. It must stay insidepublic_html. - If it relies on
.htaccessrewrites, turn on .htaccess support (Apache mode) on the Tools tab. With the Standard rules, nginx already sends unknown URLs toindex.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):
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 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.