# Requirements

Check the server before uploading the package. The web installer checks the PHP side; the scheduler, HTTPS and outbound access are yours to arrange.

| Requirement | Minimum or recommended setup |
| --- | --- |
| Web server | Apache with mod\_rewrite, Nginx, or LiteSpeed. Point the document root at `public/` . |
| PHP | PHP 8.2 or newer. |
| PHP extensions | BCMath, Ctype, Fileinfo, JSON, Mbstring, OpenSSL, PDO, Tokenizer, XML, cURL, exif and GD. |
| PHP setting | `allow_url_fopen` enabled. |
| Database | MySQL 5.7.7+ or MariaDB 10.3.17+, with the PDO MySQL driver. Search in the published docs uses the database's full-text search. |
| Writable paths | `storage/` and `bootstrap/cache/` writable by the web server user. |
| Scheduler | A cron job that runs `php artisan schedule:run` every minute. |
| HTTPS | Required. Customers' domains, Git webhooks and sign-in with Google all depend on it. |
| Outbound access | HTTPS to the services you turn on: your mail provider, cloud storage, AI providers, GitHub or GitLab, Cloudflare, the country database. |

**What you don't need.** There is no queue worker to keep alive, no Redis, no WebSocket server and no Node.js on the server. Publishing runs inside the request as one database transaction, and everything else runs from the scheduler. Shared hosting works as long as it can run a cron job every minute and serve `public/` as the document root.

Redis can take over the cache later if a very busy install wants it; a setting in the configuration is enough, nothing in the product assumes it.
