Server and virtual machine images
This page is for bundlers who publish a ready server: a cloud marketplace image, a virtual machine template, a preinstalled dedicated server. The guidance is generic; Exponential does not ship image build files.
Contents
Choose the operating system
Operating system support sorts systems into four tiers, from "tested here" to "not possible today". Build images on a tier 1 or tier 2 system (The four tiers). Notes for Red Hat Enterprise Linux and its rebuilds, for Debian and Ubuntu, and for Plesk are in 2.9 Operating system notes.
PHP: Exponential 6.0.15 supports PHP 8.0 to 8.5, Velocity included, and is usable without support on PHP 7.4; "Velocity, the recommended web server, needs PHP 8.1" (Database support). The required PHP extensions are in 2.3.
At build time
- Install PHP, its extensions, Composer, and the database server if the image carries one.
- Create the site's system user.
- Put the code in place from your lock file, as that user (Getting the code).
- Import your site packages (Offline bundles).
- Regenerate autoloads (Caches and autoloads after building).
- Install the web server configuration or the Velocity unit (Web server and engine choices).
- Install the crontab for
runcronjobs.php, disabled until the site is installed (Cron jobs). - Add the first-boot script; leave every secret out.
- Clean: package caches, shell history, logs, SSH host keys if your platform regenerates them.
At first boot
The first-boot script does what First boot and install once
describes: wait for the database, check ownership, skip if installed, read secrets from the platform (instance
metadata, a cloud-init user-data field), run exp:install with the recipient's URL and e-mail, hand over the password
and delete var/log/initial-admin-password, start serving, enable cron.
Where the recipient's URL is not known at first boot, either ask for it in your platform's launch form or install on
the server's address and document how to change SiteURL afterwards
(10.2 Siteaccesses and site addresses).
Services the image runs
| Service | Notes |
|---|---|
| Velocity, or Apache/nginx with PHP-FPM | one user for all of them, or a common group (File permissions) |
| The database server, if inside | its own backups (Database backups per engine) |
Cron for runcronjobs.php | the site's user's crontab |
| Backups | the database and var/storage, settings/override, settings/siteaccess |
| Log rotation | var/log and per-site logs (Log viewer and rotation) |
| Health check | an HTTP check that treats 503 during install as "installing" (Health checks and uptime) |
Image checklist
- To do: Operating system on tier 1 or 2; PHP and extensions checked with
exp:velocity ext check. - To do: Code from the lock file; ownership set; autoloads fresh.
- To do: No secrets, no installed site, no
kickstart.ini, no logs in the image. - To do: First boot installs once, as the site's user, and hands over the password.
- To do: Cron, backups, log rotation and the health check are set up and documented.
- To do: Security defaults applied (Security defaults of a bundle).
- To do: License notices and the source offer are in the image and its listing (GPL obligations).
- To do: The update path is documented (Updates and upgrade paths).
Related pages
- VPS hosting, Dedicated servers
- New server checklist
- Appliances
- Free documentation: this page is free to copy, translate and improve under the GNU FDL 1.3.
Become an Exponential Partner
Partners share their information, provide funding, contribute back and develop the products with us, and that is how Exponential grows. A partner website and dashboard are planned for mid-2027: please become a partner today to speed up our growth rate and land new features faster.