Installing Exponential in one command
This page is for anyone who wants a working Exponential site in a few minutes, without writing a kickstart.ini and
without a database server.
./console exp:install --applyThat installs the multisite package on SQLite, in eng-US, with the
siteaccesses site and admin reached by URL, and prints a summary with the
site and administration login addresses, the user name, the e-mail, database,
package and siteaccesses, plus a short block you can copy and paste. exp:install
is the same as php bin/php/install.php --apply.
Choose a database
Supported databases (Exponential 6.0.x), in order of preference: 1. SQLite 3 (the default) · 2. PostgreSQL · 3. MongoDB · 4. MariaDB · 5. Oracle · 6. MySQL. Microsoft SQL Server is known to be possible with additional work at this time. Details: Database support.
--db= | Aliases | Default port | Default database name |
|---|---|---|---|
sqlite (default) | sqlite3 | none | exponential.db |
mysql | mysqli, mariadb | 3306 | exponential (user root) |
pgsql | postgresql, postgres | 5432 | exponential (user postgres) |
mongodb | mongo | 27017 | exponential |
oracle | oci8, ezoracle | 1521 | service FREEPDB1 |
For Oracle the connect string is built as host:port/service; a full connect
string or an @alias (TNS) is used as given. The Oracle driver lives in the
ezoracle extension; the installer loads that extension's settings for the run,
puts it first in the new site's ActiveExtensions, and talks UTF-8 to Oracle
during the checks.
./console exp:install --apply --db=mysql --db-host=127.0.0.1 --db-name=mysite \
--db-user=root --db-action=remove
EXP_INSTALL_DB_PASSWORD='...' ./console exp:install --apply --db=pgsqlGive the database password with --db-password or, better, with the
environment variable EXP_INSTALL_DB_PASSWORD, which keeps it out of the
process list and shell history.
All options
| Group | Options |
|---|---|
| Database | --db, --db-host, --db-port, --db-name, --db-user, --db-password, --db-socket, --db-action |
| Site | --package, --language, --languages, --title, --url, --access (url, host or port), --site-access, --admin-access, --host, --admin-host, --port, --admin-port |
| Administrator | --email, --password, --random-password, --first-name, --last-name |
| Control | --force, --dry-run, --print |
- Without options the administrator is
adminwith a generated password and the e-mail[email protected](from./console exp:install --help). - A generated password (the default, or
--random-password) has 24 characters. It is printed in the summary, with a note that it was generated and why, and written tovar/log/initial-admin-password(readable by the owner only). --password=<pass>is kept as given when it has at least 10 characters (MinPasswordLength) and is not a well-known one such aspublishoradmin. Otherwise a generated one replaces it. The summary always shows the password the installation really set: when the setup replaces a password it refuses, the summary reads the one it recorded invar/log/initial-admin-password.- It refuses to run over an existing installation unless you add
--force. --dry-runchecks the configuration and the packages and installs nothing.--printshows the configuration it would use, passwords masked.- A
kickstart.inialready present is moved aside for the run and put back afterwards. The configuration used is kept invar/logwith passwords masked.
Safer first login
A kickstart installation no longer ends with a guessable administrator
password. When the kickstart file sets no password, or one of the well-known
defaults, setup generates a random 20-character password, prints it once on the
console and writes it to var/log/initial-admin-password (readable by the owner
only). Change it after the first login and delete the file. The password is
applied even when no administrator e-mail is given; the shipped example and
dist kickstart files no longer carry a password.
What the logs tell you
| File | Content | Settings |
|---|---|---|
var/log/setup.log | One file per run of the kickstarter or web wizard: introduction, environment, every step with its duration and the errors and warnings it caused (repeats grouped with count, first and last time, a hint beside known problems), health checks after the install (database, declared tables, content classes, objects, content root, name lists, settings, siteaccesses, file ownership) and a framed RESULT and NEXT line. Earlier runs rotate to setup.log.1, .2 ... | EXP_SETUP_LOG_DIR moves it elsewhere (tests use this so a real log is not rotated away). |
var/log/kickstart.log | Everything the kickstarter printed (stdout and stderr), with kickstart.ini passwords masked and the start time, command and exit status around it. Nine earlier runs are kept as kickstart.log.1 to .9. | EXP_KICKSTART_LOG=0 turns it off. |
var/log/error.log | While a run goes on it shows BEGIN and END entries with the run id and result; every entry ends with the run and step it came from, and an entry written several times in a row is written once with its count. |
setup.log counts only what the installation itself logged. An error another
process wrote meanwhile (for example a visitor's request that reached the site
while its database was being built) is listed as "(not this run)", left out of
the counts and summed up in a NOTE line.
A failed query is now logged once, with the database's reason first and the
statement on one line. A site package's post-install reports the step it
stopped on (eZSiteInstaller::abortedStep()).
Defaults that changed
- SQLite first. The web setup wizard lists SQLite first and preselects it,
and the interactive kickstarter offers it first and uses it as the default
Typeof[database_choice]. The wizard checks the SQLite database file and asks for nothing a server needs. A kickstartdatabase_initblock without server, port, user, password or socket raises no warnings. - The bundled site is preselected, so pressing Next on every step installs the default site. Before, a person who accepted every default got "No site package chosen".
- Primary language
eng-USin both the wizard and the kickstart editor, the language the bundled data is in. Other primary languages install cleanly: the package language step no longer offers the clean data's own language for mapping, creating the language is the default for other package languages (mapping relabels content without translating it), and the site package receivesprimary_language,extra_language_codesandlanguage_mapby name. Siteaccesses made for two locales of one language get different names (engandeng_gb). See Translations and languages. DatabaseImplementationis not derived fromType. The kickstartTypechooses the driver the installer connects with; theDatabaseImplementationwritten tosettings/override/site.ini.append.phpcomes from the livesite.ini, because a driver has several names and a site may register its own alias. When you install onto a different engine, set the implementation first or the new site speaks the old engine's protocol to the new server.- GD first for images.
settings/image.ini [ImageConverterSettings] ImageConverters[]lists GD before ImageMagick; ImageMagick stays the fallback for formats and filters GD lacks (PSD, TIFF, PDF, WebP, flatten, swirl, noise) and when GD is missing. - No links to the former product's website in a new installation's link
list, and
ActiveExtensionslists each extension once with the site package'sSiteURLkept. - Maintenance mode wraps every run: see Maintenance mode.
Public demos. EXP_DEMO_MODE=1 ./console exp:install --apply --password=publishing installs the published demo password as given; in demo mode a well-known or short administrator password (publish too) is kept, an empty one is still refused. Keep the variable for the running site. Demo mode, Recipe: run a public demo on LiteSpeed and Plesk.
Related pages
- Kickstarter: install a whole site from one file (the file-driven variant of the same installer), Kickstarter on the command line
- The setup wizard's new look, and the editor siteaccess, maintenance mode
- SQLite database, database drivers, database drivers and installers, September 2026
- Installer logs and seed data
- Behaviour changes, 16 to 30 September 2026
- Changelog 6.0.15
- History: 16 to 30 September 2026, January 2024, second half
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.