Zodiac Tech CRM Docs

Server requirements

What a Zodiac Tech CRM server needs — PHP 8.4, MySQL, Composer, extensions, disk, cron — and how the installer verifies each one.

super-admin developer support Easy ⏱ 5 min Updated 2026-10-05

Zodiac Tech CRM runs on ordinary shared hosting. There is no Docker and no Nginx requirement — the supported target is cPanel (or Plesk/DirectAdmin) on Apache/LiteSpeed with PHP 8.4 and MySQL. This page lists exactly what the installer checks before it will proceed.

Who this is for

  • Super-admin / hosting admin — preparing a server before upload.
  • Support — triaging "installation fails at step 1" tickets.

Prerequisites: cPanel (or equivalent) access with the ability to create databases, set a PHP version, and add cron jobs.

Required server software

Requirement Minimum Notes
PHP 8.4 The installer refuses anything below 8.4.1 (the bundled vendor/ platform check requires PHP_VERSION_ID >= 80401); composer.json requires php: ^8.4
MySQL MySQL 8.x or MariaDB (utf8mb4-capable) The installer validates the connection using the utf8mb4 charset; all tables are created utf8mb4
Web server Apache (or LiteSpeed) with .htaccess support mod_rewrite required; the shipped .htaccess handles routing, headers and the Authorization header
Composer Composer 2 (only if you can run it) If cPanel has no Terminal, upload a pre-built vendor/ folder instead — see cPanel deployment walkthrough
Cron One entry, every minute Drives the scheduler and the queue drain. Without it, reminders, syncs, billing lifecycle and email sending stop

Required PHP extensions

The installer (public/install.php) hard-blocks until all of these are present:

pdo, pdo_mysql, mbstring, openssl, tokenizer, xml, ctype,
json, bcmath, fileinfo, curl, zip, gd

Why the notable ones:

  • pdo_mysql — database access (the only supported driver is MySQL).
  • zip — ZipArchive is used for backups (leadhub:backup), updates and module installs.
  • gd — image handling (logos, avatars, thumbnails).
  • curl — Meta Graph API, payment providers, IMAP-adjacent HTTP calls.
  • bcmath — precise money math for billing.

Most cPanel hosts enable all of these by default on PHP 8.4. Anything missing is visible under Select PHP Version → Extensions in cPanel.

Disk space

Plan for at least ~500 MB to start:

Consumes space Approximate
Application + vendor/ A few hundred MB
MySQL database Grows with leads/messages — small at first
storage/app/public Uploads, recordings (30-day retention), exports
storage/app/backups Each backup zip ≈ DB dump + uploaded files

Recordings are the growth driver Call recordings are purged after 30 days (leadhub:purge-recordings, nightly), and the nightly backup is off until you enable it — so a growing disk is usually recordings or a backup pile-up. See Backups & restore.

Permissions

Three directories must be writable by PHP:

  • storage/ and everything under it (app/public, framework/cache, framework/sessions, framework/views, logs)
  • bootstrap/cache/
  • public/ — tenant branding writes per-tenant CSS to public/tenant/<id>/

On cPanel, 775 (directories) is normally sufficient; some hosts need 755 with the file owner matching the PHP user. The installer's welcome screen re-checks writability and tells you exactly which folder fails.

Not required (despite what other stacks assume)

  • No Docker, no Kubernetes, no Nginx — this product ships as a plain PHP app.
  • No Redis — sessions, cache and queue default to database/file, which work on shared hosting. Redis is optional on VPS hosts.
  • No Node.js at runtime — front-end assets are pre-built and shipped in public/.
  • No SSH strictly required — the browser installer and the /cron.php runner exist for hosts without Terminal access.
  • SMTP account (hosting provider or transactional service) — without it, invitations, digests and automation e-mails cannot send; see Email & SMTP.
  • HTTPS certificate — required for Meta OAuth, WhatsApp webhooks and reliable mobile push; see Domain, subdomain & SSL.
  • mysqldump available to PHP — backups use it when reachable and fall back to a pure-PHP dump when exec() is disabled; either way works.

How the installer proves it

Upload everything, then open https://your-domain.com/install.php. Step 1 shows a checklist:

  • PHP version (>= 8.4.1)
  • Each required extension (pass/fail)
  • Writable directories (pass/fail, per folder)
  • Database connectivity (utf8mb4 handshake)

Only when every row is green does the installer enable the Continue button.

Installed already? Once storage/installed.lock exists, /install.php is no longer the entry point — the app boots normally. Keep the lock file; deleting it makes Laravel bounce every request back to the installer.

Common mistakes

  • Selecting PHP 8.2/8.3 in cPanel MultiPHP and wondering why the installer refuses.
  • Running composer install with the system PHP 7/8.1 CLI instead of the host's PHP 8.4 binary (php -v first).
  • Assuming the host blocks exec() forever — backups still work via the PDO fallback.
  • Forgetting cron entirely, then blaming "e-mails not sending" (the mail queue never drains).

Troubleshooting

Symptom Fix
Installer stuck below PHP 8.4 MultiPHP Manager → set the domain to PHP 8.4
Missing extension Enable it in Select PHP Version (some hosts require a support ticket)
"storage not writable" Set 775 (or 755 if the host's PHP runs as your user); re-check ownership
DB connection fails with utf8mb4 error Old MySQL/MariaDB — use a current version the host offers
Disk fills after a month Check storage/app/recordings, exports and backups

Technical details

  • Installer preflight: public/install.php ($minPhp = '8.4.1', $requiredExts = [...], writable checks for storage/ + bootstrap/cache + public/).
  • Framework/stack signature: composer.json (php: ^8.4, Laravel 13, Filament v4).
  • The cron runner alternative for no-SSH hosts: cron.php at the web root.

Was this page helpful?