Linux distribution packaging
This page is for packagers who want Exponential installable with apt or dnf. It states what exists and what
packagers must decide themselves. The project publishes no deb or rpm package of the Exponential CMS; it does
publish deb and rpm packages of Velocity, its web server.
Warning
.htaccess slows down every request. When .htaccess files are enabled (AllowOverride anything but None), let alone
used, Apache looks for them and reads and evaluates them on every request, in every directory of the path, and
page loading times go up drastically (measured). The only real fix is to switch the feature off for
the virtual host: AllowOverride None in the HTTPS virtual host, and the rules in the virtual host's own
configuration as mod_rewrite rules. That is far faster in production speed tests and well worth the time it takes
to optimize a production configuration. Switch over right away: copy the rules of the
example HTTPS virtual host into your virtual host (with the static cache, also
staticcache_offload.conf), set AllowOverride None, run apachectl configtest, reload Apache and
test the site. The same rules for other servers: nginx, LiteSpeed,
Caddy, IIS, Velocity (built in); where virtual host rules go in a control
panel: Plesk, cPanel, DirectAdmin, ISPConfig.
On LiteSpeed or OpenLiteSpeed, the server's own page cache can also answer anonymous visitors and crawlers without PHP: Page caching with LiteSpeed and OpenLiteSpeed.
Contents
- What the project publishes
- How the installation is laid out
- Composer and distribution policy
- The post-install step
- Updates through the package manager
- Before you publish
What the project publishes
| Item | Form | Source |
|---|---|---|
| Exponential 6 | Git tags and the Composer package se7enxweb/exponential | 3.1 |
| Extensions | Composer packages, one per extension | composer.json |
| Velocity | Composer package, deb for Debian 12/13 and Ubuntu 22.04/24.04, rpm for Enterprise Linux 9/10, Docker images, binaries | Velocity packages |
The Velocity packages are a working model of how the project packages: architecture-independent, "Nothing starts on
install", a qbix system user, settings in /etc/default/exponential-velocity.
How the installation is laid out
Exponential is "a directory of PHP files" whose document root is the installation root (Web server examples). It writes into its own tree:
| Directory | Written | Note |
|---|---|---|
var/ | always | caches, logs, uploads, autoload arrays, the SQLite database |
settings/, settings/override, settings/siteaccess | by the installers and the administration | ManagedByDeployment=enabled stops the administration from writing settings |
design/, extension/ | while packages are installed from the administration | |
autoload/, var/autoload/ | by ezpgenerateautoloads.php | kernel and extension arrays |
Source: Writable directories and permissions.
What this means for a package:
- Install the tree in one place (for example under
/usr/share/<name>/) and symlink or bind the writable parts to/var/lib/<name>/and/etc/<name>/only after testing that every writer follows the links. The documentation does not describe a split layout; you own that test. site.ini [FileSettings] VarDiris set per siteaccess by the installer (var/<package>orvar/site), and extra extension roots can be added with[ExtensionSettings] AdditionalExtensionDirectories[](Additional extension directories). Those are the settings a layout can lean on.- The web server configuration you ship must keep the routing of
.htaccess_root. .htaccessandconfig.phpare installation files, not package files: ship the templates (.htaccess_root,.htaccess_root_static,config.php-RECOMMENDED) and let the administrator, or your post-install step, copy them withexp:setup:htaccessandexp:setup:config. An update then never overwrites a changed copy: the commands show the diff and refuse unless given--force(Setting up .htaccess and config.php from the console).
Composer and distribution policy
Exponential depends on many Composer packages (vendor/) and on extensions installed by a Composer plugin into
extension/. Distributions differ in whether they accept vendored dependencies. Decide with your distribution's
policy, and note:
- the extension set is defined by
composer.jsonrequire; leaving required extensions out changes the product (Adding and removing extensions); composer licensesgives the license of every Composer package for your copyright file (Third-party components).
The post-install step
A distribution package should not install a site by itself:
Do: create the system user, set ownership of the writable directories, install a disabled web server and cron configuration, regenerate autoloads, print where the documentation and the install command are. Putting
.htaccessandconfig.phpinto place is safe here, because both commands leave an existing file alone and change nothing on a second run; run as root they need--allow-root-userand--owner=<user>:<group>for the site's user:php bin/php/console exp:setup:htaccess --apply --allow-root-user --owner=www-data:www-data php bin/php/console exp:setup:config --apply --allow-root-user --owner=www-data:www-dataDo not: create a database, run
exp:installwith defaults, or start a web server. The administrator runs the install once, with their own URL, database and e-mail (Unattended install with exp:install).
Updates through the package manager
A package update replaces code; Exponential updates have a second half, the database update files and the checklist of each period (Chapter 11.6). The package can:
- clear caches and regenerate autoloads after the update (Caches and autoloads);
- tell the administrator when
.htaccessno longer matches the new.htaccess_root:exp:setup:htaccesswithout--applyexits 1 and prints the diff, andexp:config:listshows settings new inconfig.php-RECOMMENDEDas(not set); - tell the administrator that a database update may be due, with the link;
- never run database updates unattended on a site it does not know.
Before you publish
- To do: Copyright file lists Exponential (GPL-2.0-or-later), every extension and every vendored package.
- To do: Source package available, as distributions require anyway.
- To do: The package name and description follow Naming and branding a bundle.
- To do: Installation, upgrade and removal tested on a clean system.
- To do: Security fixes have a path: you track releases and rebuild (Updates and upgrade paths).
Related pages
- Operating system support
- Velocity packages, Docker images and binaries
- GPL obligations when you distribute
- 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.