Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,075 of 9,075 pages
About the help in other languages
All help pages

4. Eine Installationsmethode wählen

Exponential 6.0 lässt sich auf drei Arten installieren, die alle zur gleichen Art von Installation führen: mit dem Setup-Assistenten im Browser, mit dem Kickstarter auf der Kommandozeile, gesteuert durch eine Datei…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/install/04-choosing-an-install-method.md

On this page

This page is a translation. Read the English original

4. Eine Installationsmethode wählen

Exponential 6.0 lässt sich auf drei Arten installieren, die alle zur gleichen Art von Installation führen: mit dem Setup-Assistenten im Browser, mit dem Kickstarter auf der Kommandozeile, gesteuert durch eine Datei kickstart.ini, und mit der Konsoleninstallation exp:install in einem einzigen Befehl, die diese Datei aus Optionen erzeugt. Unter allen dreien läuft dieselbe Engine: die Schrittklassen in kernel/setup/steps/, in der Reihenfolge der Schritttabelle in kernel/setup/steps/ezstep_data.php, und ein Site-Paket, dessen Installationsskripte die neue Website formen. Dieses Kapitel erklärt diese gemeinsame Engine, vergleicht die drei Methoden, führt genau auf, was eine Installation auf die Festplatte und in die Datenbank schreibt, und empfiehlt für jede Situation eine Methode, einschließlich unbeaufsichtigter Installationen in CI-Pipelines und Containern. Wenn Sie bereits wissen, welche Methode Sie möchten, springen Sie direkt zu deren Kapitel; wenn Sie mehr als einmal installieren oder die Installation automatisieren werden, lesen Sie zuerst 4.4 und 4.6, denn dort steht, was eine Neuinstallation zerstört.

Inhalt · Zurück: 3. Den Code beschaffen · Weiter: 5. Der Setup-Assistent

4.1 Ein Installer, drei Frontends

Jede Installationsmethode durchläuft dieselbe Folge von Schritten. Jeder Schritt ist eine Klasse eZStep<Name> in kernel/setup/steps/ezstep_<file>.php, und die Reihenfolge wird durch eZStepData::$StepTable festgelegt:

#SchrittklasseDateiFragt nach
0Welcomeezstep_welcome.phpder Sprache des Assistenten selbst
1SystemCheckezstep_system_check.phpnichts: führt die kritischen Systemtests aus
2SystemFinetuneezstep_system_finetune.phpnichts: führt auf Anforderung die optionalen Tests aus
3EmailSettingsezstep_email_settings.phpsendmail/MTA oder SMTP
4DatabaseChoiceezstep_database_choice.phpdem Datenbanksystem
5DatabaseInitezstep_database_init.phpServer, Port, Datenbank, Benutzer, Passwort, Socket
6LanguageOptionsezstep_language_options.phpder Hauptsprache und den weiteren Sprachen
7SiteTypesezstep_site_types.phpdem Site-Paket
8PackageLanguageOptionsezstep_package_language_options.phpdem Umgang mit Paketsprachen, die Sie nicht gewählt haben
9SiteAccessezstep_site_access.phpder Zuordnung der Siteaccesses: über URL, Port oder Hostname
10SiteDetailsezstep_site_details.phpTitel, URL, Zuordnungswerten, Datenbank und dem Umgang mit vorhandenen Daten
11SiteAdminezstep_site_admin.phpName, E-Mail-Adresse und Passwort des Administrators
12Securityezstep_security.phpnichts: gibt Hinweise, wenn die Website nicht im Virtual-Host-Modus läuft
13Registrationezstep_registration.phpnichts im Browser; eine optionale Registrierungs-E-Mail aus kickstart.ini
14CreateSitesezstep_create_sites.phpnichts: schreibt die Datenbank, die Pakete und die Einstellungen
15Finalezstep_final.phpnichts: zeigt die Adressen der neuen Website

CreateSites ist mit count_step => false markiert: Dieser Schritt wird nie als Seite angezeigt und zählt nicht im Fortschrittsbalken des Assistenten. Er ist der einzige Schritt, der die Datenbank, das Site-Paket und die Siteaccess-Einstellungen installiert; die Schritte davor sammeln und prüfen Antworten (DatabaseInit öffnet die Datenbank zum Test, wodurch eine leere SQLite-Datei angelegt wird, falls keine existiert, und im Browser schreibt LanguageOptions den Zeichensatz nach settings/override/i18n.ini.append.php) und halten ihre Ergebnisse für die nachfolgenden Schritte im Speicher. Deshalb lässt sich eine Installation nicht auf halbem Weg in einem neuen Prozess fortsetzen: Der Kickstarter verweigert einen --start-step, der diese Ergebnisse bräuchte (Kapitel 6).

Die drei Frontends unterscheiden sich nur darin, woher die Antworten kommen und wie die Schritte gesteuert werden:

                 browser forms             kickstart.ini               command-line options
                 (one page per step)       (one section per step)      (exp:install --db=... --url=...)
                        |                          |                                 |
                        |                          |                  bin/php/install.php writes a
                        |                          |                  temporary kickstart.ini
                        v                          v                                 v
   kernel/setup/ezsetup.php           expKickstarter (kernel/classes/expkickstarter.php)
   (module setup, view init)          runs the same step classes in one CLI process
                        \                          |                                 /
                         \_________________________|________________________________/
                                                   v
                       eZStep* classes in kernel/setup/steps/  ->  CreateSites
                                                   v
                         site package install scripts (eZSitePreInstall, eZSitePostInstall, ...)

Daraus ergeben sich zwei Folgen:

  • Eine Korrektur oder ein Standardwert in einem Schritt gilt überall. Die Prüfungen der SQLite-Datei, die Validierung der Sprachen und das erzeugte Administratorpasswort verhalten sich im Browser und auf der Kommandozeile gleich (mit den Unterschieden, auf die dieses Handbuch dort hinweist, wo es sie gibt).
  • kickstart.ini wird auch vom Setup-Assistenten im Browser gelesen. Der Konstruktor jedes Schritts (eZStepInstaller) liest kickstart.ini im Installationsverzeichnis. Findet der Assistent einen Abschnitt für einen Schritt, füllt er diese Seite vorab aus oder überspringt sie, wenn der Abschnitt Continue=true enthält. Siehe Kapitel 5.

4.2 Die drei Methoden im Überblick

Setup-AssistentKickstarterKonsoleninstallation
Einstiegspunktjede Seite der Website, solange [SiteAccessSettings] CheckValidity=true giltphp bin/php/console exp:kickstarter run --apply --force (auch php bin/php/kickstarter.php run --apply --force)php bin/php/console exp:install --apply (auch php bin/php/install.php --apply)
Antworten kommen ausden Formularen, eine Seite pro Schrittkickstart.ini im Installationsverzeichnis, ein Abschnitt pro SchrittKommandozeilenoptionen, jede mit einem Standardwert
Braucht während der Installation einen Webserverjaneinnein
Braucht vorab eine geschriebene Dateinein (kickstart.ini optional)ja: kickstart.ini (exp:kickstarter ini schreibt sie)nein
Interaktivjanur exp:kickstarter ini stellt Fragen; run nichtnein
Probelaufneinrun --dry-run--dry-run, und --print, um die Konfiguration anzuzeigen
Teilläufe„Zurück“ und „Weiter“ im Browserrun --start-step=<Step> und --stop-step=<Step>, zur Diagnose; eine Installation läuft ab Welcome, und ein späterer Start, der die Ergebnisse früherer Schritte bräuchte, wird verweigertnein; erneut mit denselben Optionen ausführen
Schutz vor Überschreibenstartet nur, solange CheckValidity=true gilt--force erforderlich, sobald die Schritte CreateSites einschließenverweigert die Ausführung, wenn settings/override/site.ini.append.php einen Abschnitt [DatabaseSettings] enthält, außer mit --force
Wartungsseite während des Laufsja, für jeden Besucher außer dem Browser des Assistentenjaja (sie führt den Kickstarter aus)
Laufprotokollvar/log/setup.logvar/log/setup.log und var/log/kickstart.logvar/log/setup.log und var/log/exp-install-<date>.ini (sie gibt nur auf dem Terminal aus; es gibt kein kickstart.log)
Administratorpasswortim Formular eingegebenaus kickstart.ini; erzeugt, wenn leer oder allgemein bekannterzeugt, sofern nicht --password angegeben und annehmbar ist
Am besten geeignet füreine erste Installation, das Ausprobieren von Exponential, Hosts ohne Shell-Zugangwiederholbare Installationen aus einer geprüften Datei, Staging-Kopien, Offline-Paketsätzedie schnellste Installation; Skripte, CI, Container, Demos
Kapitel567

Der Setup-Assistent

Der Assistent startet von selbst. settings/site.ini wird ausgeliefert mit:

[SiteAccessSettings]
CheckValidity=true

Solange dieser Wert true ist, leitet der Kernel (ezpKernelWeb) jede Anfrage an das Modul setup, View init, mit dem Pagelayout [SetupSettings] PageLayout=setup_pagelayout.tpl und ohne Sitzung oder Datenbank. CreateSites schreibt CheckValidity=false nach settings/override/site.ini.append.php, und ab der nächsten Anfrage wird die Website ausgeliefert. Der Assistent braucht zuerst einen funktionierenden Webserver (Kapitel 8), und er ist die einzige Methode, die jede Entscheidung auf einer Seite mit einer Erklärung zeigt. Er wird in Kapitel 5 Seite für Seite beschrieben.

Der Kickstarter

Der Kickstarter (bin/php/kickstarter.php, Konsolenname exp:kickstarter) führt die Schrittklassen in einem einzigen PHP-Prozess auf der Kommandozeile aus und liest jede Antwort aus kickstart.ini. Er hat zwei Unterbefehle: ini schreibt die Datei (interaktiv oder mit Standardwerten über --yes oder --defaults), und run installiert daraus. Er ist die Methode der Wahl, wenn dieselbe Installation mehr als einmal angelegt werden muss, wenn die Antworten als Datei geprüft werden sollen, bevor sie angewendet werden, oder wenn das Site-Paket aus einem lokalen Paket-Repository stammt. Er wird in Kapitel 6 beschrieben.

Die Konsoleninstallation

exp:install (bin/php/install.php) ist ein Frontend für den Kickstarter. Es wandelt seine Optionen in eine temporäre kickstart.ini um, führt expKickstarter im selben Prozess aus, entfernt die temporäre Datei und stellt eine zuvor vorhandene kickstart.ini wieder her. Jede Option hat einen Standardwert, sodass

php bin/php/console exp:install --apply

allein das Site-Paket sevenx_multisite auf SQLite (var/storage/sqlite3/exponential.db) installiert, mit dem Administrator admin und einem erzeugten Passwort, das am Ende einmal angezeigt wird. Sie wird in Kapitel 7 beschrieben.

4.3 Site-Pakete: was installiert wird

Die Schritte installieren ein Site-Paket: ein Exponential-Paket vom Typ site (package.xml mit <type value="site" />) sowie die Pakete, die es verlangt. Pakete liegen im Paket-Repository unterhalb von var/storage/packages/; das Anbieterverzeichnis wird durch settings/package.ini [RepositorySettings] Vendor (7x) festgelegt, sodass ein importiertes Paket in var/storage/packages/7x/<name>/ landet.

Der Paketindex dieser Version, [RepositorySettings] RemotePackagesIndexURL (https://exponential.packages.exponential.earth/exponential/6.0/6.0.15, dessen index.xml die Pakete auflistet), bietet zwölf Site-Pakete an. Diejenigen, die Sie am wahrscheinlichsten wählen:

Site-PaketZusammenfassung im IndexHinweise
sevenx_multisite7x MultiSite Default Installationder Standard von exp:install --package und von exp:kickstarter ini --yes; verlangt sevenx_classes (die Inhaltsklassen) und sevenx_multisite_democontent (die Demo-Inhalte), jeweils min-version 5.1
sevenx_multisite_clean7x MultiSite Default Installation (without demo content)dieselbe Website, leer
cjw_multisiteCJW Multisitedie Starter-Website des Designs CJW Themes Jumper: eine englische und eine deutsche Website mit den Starter-Inhalten und ihren Layouts
sevenx_site, sevenx_site_clean7x Simple Website Interfaceeine einfachere Website, mit oder ohne Demo-Inhalte
ezwebin_site, ezflow_site, ezdemo_site (jeweils auch als ..._clean), plain_siteWebsite Interface, eZ Flow, Exponential Demo Site, Plain sitedie älteren Site-Pakete, beibehalten für Websites, die darauf aufbauen

Ein _clean-Paket installiert dieselbe Struktur ohne die Demo-Artikel und -Bilder: Wählen Sie es für eine echte Website, die Sie selbst füllen werden, und das vollständige Paket, um Exponential auszuprobieren.

Woher die Pakete kommen:

  • Der entfernte Paketindex. SiteTypes lädt den Index von [RepositorySettings] RemotePackagesIndexURL in settings/package.ini herunter (wenn dieser Wert leer ist: RemotePackagesIndexURLBase plus x.y/x.y.z, etwa 6.0/6.0.15; vor 6.0.15 wurde das Wort stable angehängt, das es auf dem Paketserver nicht gibt) und bietet die dort aufgeführten Site-Pakete neben den bereits importierten an. Ein Paket, das entfernt aufgeführt, aber noch nicht importiert ist, wird heruntergeladen und importiert, gefolgt von den Paketen, die es verlangt.
  • Das lokale Repository. Ein Paket, das bereits unter var/storage/packages/ importiert ist, wird unverändert verwendet. Lässt sich der Index nicht herunterladen, sucht SiteTypes stattdessen im System-Repository nach einer index.xml; so funktioniert eine Offline-Installation.
  • Ein Upload. Die Seite „Site Paket“ des Assistenten hat ein Feld Paket hochladen für eine .ezpkg-Datei.

Installationsskripte der Pakete: der „Multi-Site-Installer“

Ein Site-Paket kann PHP-Installationsskripte als <settings-file>-Einträge in seiner package.xml mitbringen. CreateSites ruft die darin definierten Funktionen, sofern vorhanden, an festen Punkten auf:

FunktionAufgerufen von CreateSitesZweck
eZSitePreInstall( $siteType )bevor das Paket installiert wirdVorbereitung, zum Beispiel Klassen anlegen
eZSiteINISettings( $parameters )während die Einstellungen erzeugt werdenEinstellungen des öffentlichen Siteaccess
eZSiteAdminINISettings( $parameters )während die Einstellungen erzeugt werdenEinstellungen des Administrations-Siteaccess
eZSiteCommonINISettings( $parameters )während die Einstellungen erzeugt werdenEinstellungen, die nach settings/override/ geschrieben werden
eZSiteRoles( $parameters )nachdem die Inhalte eingespielt sindRollen und Richtlinien
eZSitePreferences( $parameters )nach den RollenBenutzereinstellungen
eZSitePostInstall( $parameters )am Endealles Übrige
eZSiteFinalText( $parameters )für die letzte SeiteText, der auf der Seite „Beendet“ des Assistenten angezeigt wird

sevenx_multisite führt ini-site.php, ini-admin.php, ini-common.php, sevenx-multi-site-installer.php, install-scripts.php, roles.php und preferences.php auf. Seine install-scripts.php definiert eZSitePreInstall() und eZSitePostInstall(), die jeweils einen sevenxMultiSiteInstaller (eine Unterklasse von eZSiteInstaller des Kernels in kernel/classes/ezsiteinstaller.php) erzeugen und preInstall() bzw. postInstall() aufrufen. Dieser „Multi-Site-Installer“ ist daher keine vierte Installationsmethode: Er ist der Teil des Site-Pakets an jeder Installation, gleich welches Frontend sie gestartet hat. Bricht seine Nachinstallation mittendrin ab, meldet CreateSites den Fehler EZSW-080 („The post-install of site package '...' stopped at step N of M (...): the steps after it did not run“).

Weitere Installer-Skripte, denen Sie begegnen können

SkriptWas es tutZum Installieren einer neuen Website verwenden?
exp:ezwebininstall (bin/php/ezwebininstall.php)installiert das Site-Paket ezwebin in eine konfigurierte Installation; Optionen --repository, --package, --package-dir, --url, --admin-siteaccess, --user-siteaccess, --auto-modenein: Es setzt eine bereits vorhandene Installation voraus
extension/expsite_installer/bin/php/install.php (Extension expsite_installer, sofern vorhanden)aktiviert die Extensions explayouts*/expsite* in settings/override/site.ini.append.php und führt expSiteInstaller::runFullInstall() mit den Daten in extension/expsite_data_media/data ausnein: Es legt Layout-Daten über eine bestehende Installation, und dieser Datensatz ist veraltet; installieren Sie stattdessen neu aus den Site-Paketen

4.4 Was eine Installation schreibt

Alle drei Methoden enden in CreateSites und schreiben daher dasselbe. Wenn Sie es kennen, wird klar, was eine Neuinstallation ersetzt und was gesichert werden muss.

Einstellungen

DateiGeschrieben vonInhalt
settings/override/site.ini.append.phpCreateSites[SiteAccessSettings] CheckValidity=false, MatchOrder (uri, host oder port), HostMatchMapItems[], AvailableSiteAccessList[]; [PortAccessSettings] für die Zuordnung über den Port; [SiteSettings] SiteList[] und DefaultAccess; [MailSettings] AdminEmail, Transport (sendmail oder SMTP) mit TransportServer, TransportUser, TransportPassword für SMTP; [DesignSettings] DesignLocationCache=enabled; sowie die globalen site.ini-Einstellungen, die das Site-Paket zurückgibt (zum Beispiel [ExtensionSettings] ActiveExtensions[])
settings/override/i18n.ini.append.phpLanguageOptions (Browser) und CreateSites[CharacterSettings] Charset (bei einer neuen Website immer utf-8)
settings/override/image.ini.append.phpCreateSites[ImageMagick] IsEnabled sowie ExecutablePath/Executable, wenn die Systemprüfung ImageMagick gefunden hat
settings/override/mailpreferences.ini.append.phpCreateSitesdas Website-Geheimnis der E-Mail-Einstellungen sowie den Namen und die Postanschrift der Organisation aus „Seitendetails“
settings/override/<file>.ini.append.phpCreateSitesjede weitere INI-Datei, die eZSiteCommonINISettings() des Pakets zurückgibt
settings/siteaccess/site/CreateSitesder öffentliche Siteaccess: site.ini.append.php mit [DatabaseSettings] (DatabaseImplementation, Server, Port, Database, User, Password, Socket, Charset), [SiteSettings] SiteName und SiteURL, [RegionalSettings], [FileSettings] VarDir, [DesignSettings] SiteDesign, dazu die Siteaccess-Einstellungen des Pakets
settings/siteaccess/admin/CreateSitesder Administrations-Siteaccess, mit denselben [DatabaseSettings]
settings/siteaccess/editor/CreateSites (createEditorSiteAccess())eine Kopie der *.ini.append.php-Dateien des Administrations-Siteaccess mit SiteDesign=editor, AdditionalSiteDesignList[] admin4l, admin4, admin3, admin2, admin, ExtensionSettingsSiteAccess=admin, SiteName=Editor, einer eigenen SiteURL und [SiteAccessRules], die die Module setup, visual, explayouts_ui, explayouts_ui_api, git_manager, xrowextract und bccie abschalten; dazu Appends für menu.ini, toolbar.ini und admininterface.ini
settings/siteaccess/adminui/CreateSites (createAdminUISiteAccess()) oder die Nachinstallation des Multisite-Pakets mit derselben Funktion; nur wenn extension/exp_adminui vorhanden isteine Kopie der *.ini.append.php-Dateien des Administrations-Siteaccess mit SiteDesign=adminui, AdditionalSiteDesignList[] admin4l, admin4, admin3, admin2, admin, ActiveAccessExtensions[]=exp_adminui, SiteName=Admin UI, als SiteURL die Adresse der Administration mit dem Pfad /adminui, sowie eine icon.ini und eine ezoe.ini ohne Einstellungen. Aufgeführt in AvailableSiteAccessList[] und SiteList[], zugeordnet nur über die URI (keine Host-Zuordnungszeile, kein Port; uri wird zu MatchOrder hinzugefügt). Siehe Exponential Admin UI

Die Verzeichnisnamen der Siteaccesses lauten immer site, admin und editor, dazu adminui, wenn die Extension exp_adminui in der Installation vorhanden ist. Was Sie im Assistenten, in kickstart.ini oder mit exp:install --site-access= wählen, ist der Zuordnungswert: der URL-Pfad, der Port oder der Hostname, der zu jedem Siteaccess führt. Access=www im URL-Modus bedeutet daher „der Pfad /www liefert den Siteaccess site aus“, nicht einen Siteaccess namens www.

Das Datenbankpasswort landet in settings/siteaccess/site/site.ini.append.php und settings/siteaccess/admin/site.ini.append.php (sowie in den Kopien für editor und adminui), ein SMTP-Passwort in settings/override/site.ini.append.php. Halten Sie settings/override/ und settings/siteaccess/ aus der Versionsverwaltung heraus und nur für den Benutzer des Webservers lesbar; Kapitel 13 behandelt das.

Datenbank

Was mit der Datenbank geschieht, entscheidet die Datenbankaktion: der Schlüssel DatabaseAction in kickstart.ini, --db-action bei exp:install oder die Auswahlliste Aktion, die der Assistent anzeigt, wenn die Datenbank bereits Tabellen enthält.

AktionBeschriftung im AssistentenWirkung in CreateSites
removeBestehende Daten entferneneZDBTool::cleanup() löscht die Tabellen des Kernels; bei SQLite wird die ganze Datei geleert. Danach werden das Schema (share/db_schema.dba), die Basisdaten (share/db_data.dba) und die Pakete installiert. Alles, was in der Datenbank war, geht verloren.
ignoreDie Daten belassen und neue hinzufügenSchema, Daten und Pakete werden hinzugefügt, ohne vorher aufzuräumen
skipDie Daten belassen und nichts weiteres tunEs werden weder Schema noch Daten eingefügt; die Einstellungen werden trotzdem geschrieben. SiteAdmin wird ebenfalls übersprungen, sodass der bestehende Administrator erhalten bleibt.

Das Laden des Schemas legt jede Tabelle an, die der Kernel deklariert, importiert dann die eigenen .dba-Daten jedes Datentyps (auf anderen Engines als SQLite) und, sofern die Datenbank es unterstützt, den Volltextteil des Audit-Index. Danach werden das Site-Paket und die von ihm verlangten Pakete in die Datenbank installiert. Die Datenbank-Engines selbst sind Gegenstand von Kapitel 9.

Dateien und Protokolle

PfadGeschrieben vonHinweise
var/storage/sqlite3/<file>DatabaseInit / CreateSitesdie SQLite-Datenbank, mit den Dateien -wal und -shm daneben
var/storage/packages/SiteTypesheruntergeladene und importierte Pakete
design/<package>/override/templates/CreateSitesleere Override-Verzeichnisse für das nach dem Paket benannte Website-Design
var/<package>/ oder var/site/die WebsiteCreateSites schreibt [FileSettings] VarDir=var/<package identifier> in die Siteaccess-Einstellungen, und ein Site-Paket kann ein eigenes festlegen: sevenx_multisite setzt var/site für den öffentlichen Siteaccess. Hochgeladene Dateien und die Inhalts-Caches liegen darunter
var/maintenance.jsonalle Methodenexistiert nur, solange die Installation läuft (siehe unten)
var/log/setup.logalle Methodenein lesbarer Eintrag pro Lauf; frühere Läufe rotieren nach setup.log.1, .2 ...
var/log/setup-run.stateder Assistenterlaubt jeder Anfrage des Assistenten, denselben Lauf fortzusetzen
var/log/kickstart.logexp:kickstarter runalles, was der Lauf ausgegeben hat, Passwörter maskiert; neun frühere Läufe bleiben als kickstart.log.1 bis .9 erhalten
var/log/exp-install-<date>.iniexp:installdie verwendete Konfiguration, Passwörter maskiert
var/log/initial-admin-passwordKickstarter, exp:installnur wenn ein Passwort erzeugt wurde; Modus 0600. Lesen Sie die Datei, melden Sie sich an, ändern Sie das Passwort und löschen Sie die Datei

Wartungsmodus während der Installation

Jede Methode schaltet während ihrer Arbeit den Wartungsmodus ein, damit kein Besucher auf eine halb aufgebaute Datenbank trifft: var/maintenance.json existiert, und die Front-Controller (index.php, index_rest.php, index_treemenu.php) beantworten jede Anfrage mit share/maintenance.html (oder errors/maintenance.html des aktiven Themes), HTTP 503 und einem Retry-After-Header, bevor die Einstellungen oder die Datenbank berührt werden.

  • Der Kickstarter (und damit exp:install) schaltet ihn zu Beginn des Laufs ein und aus, wenn die Installation fertig ist. Nach einem fehlgeschlagenen Schritt bleibt er eingeschaltet: Der Lauf meldet das, und php bin/php/maintenance.php off beendet ihn.
  • Der Assistent schaltet ihn bei seiner ersten Anfrage ein, für jeden Browser außer seinem eigenen (das Cookie exp_setup_wizard), und auf seiner Seite „Beendet“ wieder aus; ein verlassener Assistent gibt die Website nach 30 Minuten frei (Kapitel 5).
  • Ein Probelauf schaltet ihn nicht ein.

4.5 Welche Methode für welche Situation

SituationEmpfohlenWarum
Ein erster Blick auf Exponential auf einem Laptopexp:installein Befehl, SQLite, nichts zu beantworten
Erste Produktivinstallation, von Hand durchgeführtder Assistent oder exp:install mit ausdrücklichen Optionender Assistent erklärt jede Entscheidung; exp:install hinterlässt einen maskierten Eintrag dessen, was verwendet wurde
Shared Hosting ohne Shell-Zugangder Assistenter braucht nur einen Browser und FTP-Zugang
Dieselbe Website wird immer wieder neu aufgebaut (Staging, Test, Schulung)der Kickstarterdie geprüfte kickstart.ini ist die Spezifikation der Installation
CI-Pipeline, Container-Image, automatisierte Testumgebungexp:installOptionen oder Umgebungsvariablen, Exit-Status, keine Datei als Vorlage nötig
Mehrere Umgebungen, die sich nur in Hostnamen und Zugangsdaten unterscheidender Kickstarter mit einer kickstart.ini pro Umgebung oder exp:install mit Optionen pro Umgebungbeide sind deterministisch
Kein Internetzugang auf dem Serverder Kickstarter oder der Assistent mit den Paketen bereits in var/storage/packages/das Site-Paket wird aus dem lokalen Repository genommen, wenn der Index nicht erreichbar ist
Die Einstellungen für eine bestehende Datenbank neu erzeugender Kickstarter mit DatabaseAction=skip oder exp:install --db-action=skip --forceskip schreibt die Einstellungen und lässt die Daten unberührt
Neuinstallation über eine bestehende Installationexp:kickstarter run --apply oder exp:install --force, nach einer Sicherungbeide sagen klar, dass sie die Datenbank ersetzen

Entscheidungshilfe

  1. Haben Sie Shell-Zugang? Nein: Verwenden Sie den Assistenten. Ja: Weiter.
  2. Muss eine Person jede Antwort prüfen, bevor irgendetwas geschieht? Ja: Schreiben Sie kickstart.ini mit exp:kickstarter ini, prüfen Sie die Datei, dann exp:kickstarter run --dry-run und run --apply.
  3. Ist die Installation Teil eines Skripts, einer Pipeline oder eines Container-Starts? Ja: Verwenden Sie exp:install mit ausdrücklichen Optionen, das Passwort in EXP_INSTALL_DB_PASSWORD, und prüfen Sie den Exit-Status.
  4. Andernfalls ist exp:install der kürzeste Weg und der Assistent der am besten erklärte.

4.6 Unbeaufsichtigte Installationen: CI und Container

Die Kommandozeilenmethoden wurden für den unbeaufsichtigten Einsatz gebaut. Diese Regeln halten solche Installationen sicher und wiederholbar.

Bevorzugen Sie in der Automatisierung exp:install. Es braucht keine Datei, prüft seine Optionen, bevor irgendetwas geschrieben wird, und gibt bei jedem Fehler einen Exit-Status ungleich null zurück (Kapitel 7). Der Kickstarter lässt sich genauso gut in Skripten verwenden, wenn die Konfiguration besser als geprüfte Datei aufbewahrt wird.

Halten Sie Geheimnisse aus der Kommandozeile heraus. exp:install liest das Datenbankpasswort aus der Umgebungsvariablen EXP_INSTALL_DB_PASSWORD, wenn --db-password nicht angegeben ist; so erscheint es weder in der Prozessliste noch in der Shell-History. kickstart.ini enthält Passwörter im Klartext: Legen Sie die Datei mit dem Modus 0600 an, committen Sie sie nie, und entfernen Sie sie nach der Installation (der Assistent würde sie bei einem späteren Lauf lesen).

Wählen Sie das Administratorpasswort bewusst. Ohne --password erzeugt exp:install ein Passwort mit 24 Zeichen und schreibt es nach var/log/initial-admin-password (Modus 0600). Übergeben Sie in einer Pipeline entweder ein Passwort aus Ihrem Secret Store mit --password= (mindestens [UserSettings] MinPasswordLength Zeichen, also 10, und kein allgemein bekanntes), oder lesen Sie das erzeugte Passwort aus dieser Datei und ändern Sie es anschließend.

Führen Sie die Installation als Benutzer des Webservers aus. Der Installer legt Dateien in settings/, var/ und design/ an. Führen Sie ihn als der Benutzer aus, unter dem der Webserver oder Velocity läuft, oder korrigieren Sie die Eigentümerschaft danach; die Systemprüfung testet die Verzeichnisrechte als der Benutzer, unter dem sie läuft. Weder der Kickstarter noch exp:install verweigern die Ausführung als root (beide akzeptieren --allow-root-user und ignorieren es), aber von root angelegte Dateien können später für den Webserver nicht beschreibbar sein. Die meisten anderen Befehle, darunter exp:velocity, verweigern root, sofern nicht --allow-root-user angegeben ist.

Machen Sie die Datenbankaktion ausdrücklich. Sowohl exp:install (als Standard) als auch die Kickstarter-Dateien, die die meisten Leute schreiben, verwenden remove. Genau das will ein frischer Container, und genau das darf niemals auf eine Datenbank zeigen, die Daten enthält, die Sie brauchen.

Rechnen Sie nur mit remove mit einem idempotenten Lauf. Wird dieselbe Konfiguration erneut mit DatabaseAction=remove ausgeführt, entsteht wieder dieselbe Installation. Mit ignore fügt ein zweiter Lauf eine zweite Kopie der Daten hinzu.

Ein minimaler Container-Einstiegspunkt (installiert einmal, startet dann den Server und bleibt im Vordergrund, solange dieser läuft):

#!/usr/bin/env bash
set -euo pipefail
cd /srv/exponential
if ! grep -q '^\[DatabaseSettings\]' settings/override/site.ini.append.php 2>/dev/null; then
    php bin/php/console exp:install --apply \
        --db=mysql --db-host="${DB_HOST}" --db-name="${DB_NAME}" --db-user="${DB_USER}" \
        --url="${SITE_URL}" --email="${ADMIN_EMAIL}" --password="${ADMIN_PASSWORD}"
fi
php bin/php/console exp:velocity start
# exp:velocity start runs the server in the background and returns; status exits 0 while it runs
while php bin/php/console exp:velocity status >/dev/null 2>&1; do sleep 30; done
echo "Velocity stopped" >&2
exit 1

Der Test grep -q '^\[DatabaseSettings\]' settings/override/site.ini.append.php ist derselbe Test, mit dem exp:install selbst entscheidet, ob ein Verzeichnis bereits eine Installation enthält. Übergeben Sie EXP_INSTALL_DB_PASSWORD in der Umgebung des Containers. Die Schleife am Ende ist wichtig: exp:velocity start löst den Server ab und kehrt zurück, sobald er antwortet; ein Einstiegspunkt, der damit endete, würde daher den Hauptprozess des Containers beenden und mit ihm den Container. Die Schleife hält den Einstiegspunkt am Leben, solange exp:velocity status den Server als laufend meldet (Exit-Status 0), und beendet den Container, wenn der Server stoppt, sodass die Container-Laufzeitumgebung ihn neu starten kann. Läuft der Einstiegspunkt als root, fügen Sie den beiden exp:velocity-Befehlen --allow-root-user hinzu. Das Starten und Konfigurieren von Velocity ist Gegenstand von Kapitel 8.

Ein CI-Smoke-Test, der auf SQLite installiert und den Job bei jedem Fehler scheitern lässt:

php bin/php/console exp:install --dry-run          # configuration and packages, nothing written
php bin/php/console exp:install --apply --force --title="CI build ${CI_PIPELINE_ID:-local}"
test -f settings/siteaccess/site/site.ini.append.php
tail -n 20 var/log/setup.log

4.7 Bevor Sie beginnen, gleich mit welcher Methode

  • Der Code ist vorhanden und die Abhängigkeiten sind installiert (Kapitel 3), und PHP 7.4 oder neuer mit den Erweiterungen aus Kapitel 2 steht zur Verfügung.
  • Bei einem Datenbankserver: Die Datenbank und ihr Benutzer existieren, und der Benutzer darf Tabellen anlegen (Kapitel 9). SQLite braucht nur ein beschreibbares var/storage/sqlite3/.
  • settings/, var/ und design/ sind für den Benutzer beschreibbar, unter dem die Installation läuft.
  • Für den Assistenten: Die Website wird ausgeliefert (Kapitel 8); Exponential Velocity ist die empfohlene Engine für jede Phase.
  • Sie haben eine Sicherung jeder Datenbank, die die Installation berühren könnte.

Eine öffentliche Demo installieren. Jede Methode eignet sich für eine öffentliche Demo, deren Administratorpasswort veröffentlicht ist: Führen Sie sie mit der Umgebungsvariablen EXP_DEMO_MODE=1 aus und geben Sie das veröffentlichte Passwort an; die Installer installieren es dann wie angegeben, auch publish oder publishing. Für eine Demo, die nach Zeitplan neu aufgebaut wird, ist exp:install auf SQLite die übliche Wahl (Rezept: eine öffentliche Demo auf LiteSpeed und Plesk betreiben, Demo-Modus).

Referenzen

In diesem Repository:

Extern:

Inhalt · Zurück: 3. Den Code beschaffen · Weiter: 5. Der Setup-Assistent

Werden Sie Exponential-Partner

Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x