▌PHPFoundry docs

Getting Started

Installation

Upload, point the document root at public_html/, run install.sh, and finish in the browser. No build step, no Composer, no Node — about 10 minutes.

Requirements

Tip · PHP extensions

Required: pdo, pdo_mysql, mbstring, json, curl, openssl, session. fileinfo is optional (image-upload validation). Verify everything with php app/bin/console check.

Install

  1. Extract the .zip as the user that will own the site — not root.
  2. Point the domain's document root at public_html/ (app/ stays above the web root and is never served).
  3. Run the helper — it creates the storage directories and fixes permissions:
    bash install.sh
  4. Open the wizard at https://your-domain/install.php and follow it.

The setup wizard

A self-contained, 5-step wizard (no dependency on the app bootstrap):

  1. Language — installer and panel default.
  2. Database — host, port, name, user, password. Test connection runs a live check and enforces MySQL 8.0+ / MariaDB 10.5+.
  3. Admin — name, email, and a password of at least 8 characters. This becomes the superadmin.
  4. Branding — panel name, short name, accent color, optional logo and favicon.
  5. Confirmation — review and install; optionally seed demo data (example users, roles, notifications).

On install it writes app/.env, runs the migrations, seeds settings, creates the admin, saves branding, and creates the storage directories. When it finishes it deletes install.php and check.php automatically.

After install

Notes & troubleshooting

Pointing the document root (subdomain / vhost)
Set the domain's document root to this installation's public_html/. On Apache: DocumentRoot /home/youraccount/public_html with AllowOverride All. On cPanel, set the subdomain's Document Root to that folder. Everything in app/ (your .env, logs, uploads) lives above it and is never served.
Permission errors / app/storage not writable
Re-run bash install.sh — it sets app/storage/ to 755, and when run as root it also fixes ownership to the hosting user. On shared hosting, make sure ownership matches your account user.
"PHPFoundry is already installed"
The installer refuses to run once app/.env exists, to protect an existing install. If you are done, just remove public_html/install.php. To reinstall intentionally, delete app/.env (and drop the database) first — destructive, so back up.
"Could not connect to the database"
Re-check host, port, name, user and password; the database must already exist and the user needs privileges on it. The host is usually localhost or 127.0.0.1, and on shared hosting the database/user are prefixed with your account name.
"Could not auto-delete install.php"
Install succeeded but the file could not remove itself (permissions). Delete public_html/install.php manually.
Logo / favicon uploads rejected
The Branding step uses the fileinfo extension to validate image MIME types. It is optional — without it the panel still works; enable fileinfo if you need upload validation.