Die Systemeinstellungen verabschieden sich langsam aber sicher aus dem Backend. Grundlegende Systemeinstellungen
beeinflussen Contao als Applikation und somit besteht auch die Chance, dass durch eine falsche Einstellung das System
in einen funktionsuntüchtigen Zustand gebracht wird. Sollte dies geschehen, hast du keine Möglichkeit mehr,
die Einstellungen rückgängig zu machen und das System wiederherzustellen, da du dich nicht mehr einloggen kannst.
Aus diesem Grund werden die meisten Einstellungen außerhalb von Contao über die config.yml
vorgenommen bzw. können
zukünftig über den Contao Manager vorgenommen werden.
E-Mail-Adresse des Systemadministrators: An diese Adresse werden z. B. Benachrichtigungen über gesperrte Konten oder neu registrierte Benutzer geschickt. Du kannst auch folgende Notation verwenden, um einen Namen zur E-Mail-Adresse hinzuzufügen:
Kevin Jones [kevin.jones@example.com]
Datums- und Zeitformat: Alle Datums- und Zeitformate müssen wie in der PHP-Funktion date eingegeben werden. Contao verarbeitet im Backend ausschließlich numerische Formate, also die Buchstaben j, d, m, n, y, Y, g, G, h, H, i und s.
Hier sind einige Beispiele gültiger Datums- und Zeitangaben:
Angaben | Erklärung |
---|---|
Y-m-d | JJJJ-MM-TT, international ISO-8601, z. B. 2005-01-28 |
m/d/Y | MM/TT/JJJJ, Englisches Format, z. B. 01/28/2005 |
d.m.Y | TT.MM.JJJJ, Deutsches Format, z. B. 28.01.2005 |
y-n-j | JJ-M-T, ohne führende Nullen, z. B. 05-1-28 |
Ymd | JJJJMMTT, Zeitstempel, z. B. 20050128 |
H:i:s | 24 Stunden, Minuten und Sekunden, z. B. 20:36:59 |
g:i | 12 Stunden ohne führende Nullen sowie Minuten, z. B. 8:36 |
Zeitzone: Die Zeitzone solltest du unbedingt vor dem Erstellen deiner Webseite einstellen, da Contao alle Zeitangaben als Unix-Zeitstempel speichert und Contao diese Zeitstempel bei einer Änderung der Zeitzone nicht automatisch anpasst.
Elemente nicht verkürzen: Im »Parent View« stellt Contao die Elemente aus Gründen der Übersichtlichkeit verkürzt dar, wobei einzelne Elemente über ein Navigationsicon bei Bedarf ausgeklappt werden können. Wähle diese Option, um das Feature komplett zu deaktivieren.
Elemente pro Seite: Im Abschnitt Datensätze auflisten hast du gelernt, dass Contao die Anzahl der Datensätze pro Seite standardmäßig auf 30 begrenzt. Diesen Wert kannst du hier beliebig anpassen. Höhere Werte bedeuten jedoch eine längere Ladezeit.
Maximum Datensätze pro Seite: Um zu verhindern, dass ein unbedarfter Benutzer sich 5000 Datensätze auf einmal anzeigen lässt und damit das PHP Memory Limit überschreitet, kannst du festlegen, wie viele Datensätze maximal pro Seite angezeigt werden dürfen.
Diese Funktion ist erst ab Contao 4.11 verfügbar.
Ein paar zusätzliche Parameter können über die config/config.yml
konfiguriert werden.
Key | Description |
---|---|
attributes |
Fügt dem <body> -Tag im Backend HTML-Attribute hinzu. Der Attributname muss ein gültiger HTML-Attributname sein. Für den üblichen Gebrauch sollte den Namen data- vorangestellt werden. |
custom_css |
Fügt dem Backend individuelle Stylesheets hinzu. Die Assets müssen per URL öffentlich zugänglich sein! |
custom_js |
Fügt dem Backend individuelle JavaScript-Dateien hinzu. Die Assets müssen per URL öffentlich zugänglich sein! |
badge_title |
Konfiguriert den Titel des Badge im Backend. |
Die folgende Konfiguration definiert einige Beispielwerte:
# config/config.yaml
contao:
backend:
attributes:
data-app-name: 'Meine App'
data-app-version: 1.2.3
custom_css:
- files/backend/custom.css
custom_js:
- files/backend/custom.js
badge_title: develop
Ordner-URLs verwenden: Hier kannst du Ordnerstrukturen in Seitenaliasen aktivieren. Damit werden die in der
Seitenhierarchie vorhandenen Aliase in den Alias mit übernommen z. B. die Seite »Download« im Seitenpfad
»Docs > Install« zu docs/install/download.html
anstatt nur download.html
.
Leere URLs nicht umleiten: Bei einer leeren URL die Webseite anzeigen anstatt auf den Startpunkt der Sprache weiterzuleiten (nicht empfohlen).
Den Command-Scheduler deaktivieren: Hier kannst du den Periodic Command Scheduler deaktivieren und die
_contao/cron
-Route mittels eines echten Cronjobs (den du selbst einrichten musst) ausführen. Seit Contao 4.9 kann
auch folgendes Kommando benutzt werden:
php vendor/bin/contao-console contao:cron
Anfrage-Tokens deaktivieren: Hier kannst du aktivieren, dass die Anfrage-Token beim Absenden eines Formulars nicht geprüft werden (unsicher!).
Erlaubte HTML-Tags: Standardmäßig erlaubt Contao keine HTML-Tags in Formularen und entfernt diese beim Speichern automatisch. Für Eingabefelder, bei denen die Nutzung von HTML erwünscht ist, kannst du hier eine Liste erlaubter HTML-Tags festlegen.
Erlaubte Download-Dateitypen: Hier kannst du festlegen, welche Dateitypen von deinem Server heruntergeladen werden dürfen (Download).
Maximale GD-Bildbreite: Hier kannst du festlegen, wie breit Bilder sein dürfen, damit sie von der GD Bildbearbeitungs-Bibliothek noch verarbeitet werden können. Jegliche Bilder, die diesen Wert übersteigen, werden nicht verarbeitet.
Maximale GD-Bildhöhe: Hier kannst du festlegen, wie hoch Bilder sein dürften, damit sie von der GD Bildbearbeitungs-Bibliothek noch verarbeitet werden können. Jegliche Bilder, die diesen Wert übersteigen, werden nicht verarbeitet.
Erlaubte Upload-Dateitypen: Hier kannst du festlegen, welche Dateitypen auf deinen Server übertragen werden dürfen (Upload).
Maximale Upload-Dateigröße: Hier kannst du festlegen, wie groß eine mit der Dateiverwaltung auf deinen Server übertragene Datei maximal sein darf. Die Eingabe erfolgt in Bytes (1 MiB = 1024 KiB = 1.048.567 Bytes). Größere Dateien werden abgelehnt.
Maximale Bildbreite: Beim Upload von Bildern prüft die Dateiverwaltung automatisch deren Breite und vergleicht diese Werte mit deiner hier festgelegten Vorgabe. Überschreitet ein Bild die maximale Breite, wird es automatisch verkleinert.
Maximale Bildhöhe: Beim Upload von Bildern prüft die Dateiverwaltung automatisch deren Höhe und vergleicht diese Werte mit deiner hier festgelegten Vorgabe. Überschreitet ein Bild die maximale Höhe, wird es automatisch verkleinert.
Suche aktivieren: Wenn du diese Option auswählst, indiziert Contao die fertigen Seiten deiner Webseite und erstellt daraus einen Suchindex. Mit dem Frontend-Modul »Suchmaschine« kannst du diesen Index dann durchsuchen.
Geschützte Seiten indizieren: Wähle diese Option, um auch geschützte Seiten für die Suche zu indizieren. Nutze dieses Feature mit Bedacht, und achte darauf, personalisierte Seiten grundsätzlich von der Suche auszuschließen.
Ab Version 4.9 kommt ein neuer Such-Indexer zum Einsatz. Die Einstellungen Suche aktivieren und
Geschützte Seiten indizieren werden nun über die config/config.yml
konfiguriert:
contao:
search:
default_indexer:
enable: true
index_protected: false
Standardbesitzer: Hier kannst du vorgeben, welchem Benutzer standardmäßig die Seiten gehören, für die keine Zugriffsrechte definiert wurden. Weitere Informationen dazu findest du im Abschnitt Zugriffsrechte.
Standardgruppe: Hier kannst du festlegen, welcher Gruppe standardmäßig die Seiten gehören, für die keine Zugriffsrechte definiert wurden. Weitere Informationen dazu findest du im Abschnitt Zugriffsrechte.
Standardzugriffsrechte: Hier kannst du festlegen, welche Zugriffsrechte standardmäßig für die Seiten gelten, für die keine speziellen Zugriffsrechte definiert wurden. Weitere Informationen dazu findest du im Abschnitt Zugriffsrechte.
In der Contao Managed Edition werden die Parameter (z. B. Datenbankdaten) in der parameters.yml
abgelegt.
Auf diese Daten greift auch das Contao-Installtool zurück. Diese Datei wird normalerweise von der Versionierung
ausgenommen und kann auch zusätzliche Einträge wie z. B. die Angaben für den E-Mail-Versand über SMTP enthalten.
Die Datei parameters.yml
findest du im Ordner app/config/
und wird bei der Installation von Contao automatisch
angelegt.
Ab der Version 4.8 von Contao befindet sich die Datei direkt im Wurzelverzeichnis der Installation unter config/
.
Die parameters.yml
nach der Installation von Contao:
# This file has been auto-generated during installation
parameters:
database_host: …
database_port: …
database_user: …
database_password: …
database_name: …
secret: …
Die normale Bundle Config gehört in die config.yml
und befindet sich im Ordner app/config/
.
Falls die Datei noch nicht vorhanden ist, muss diese angelegt werden. Contao lädt automatisch die config_prod.yml
bzw. config_dev.yml
und falls nicht vorhanden die config.yml
.
Damit kannst du unterschiedliche Konfigurationen für deine Test- bzw. Produktionsumgebung (dev/prod) realisieren (z. B.
mehr Logging im Debug Modus). Außerdem committest du die config.yml
im Gegensatz zur parameters.yml
in dein
Repository. Ein Repository kannst du verwenden, um deine Projekt-Versionen abzulegen, z. B. mit Git.
Ab der Version 4.8 von Contao befindet sich die Datei direkt im Wurzelverzeichnis der Installation unter config/
.
Über die Kommandozeile kommst du an die Standard-Konfiguration für Contao:
php vendor/bin/contao-console config:dump-reference contao
Informationen zur aktuelle Konfiguration erhältst du so:
php vendor/bin/contao-console debug:config contao
# Default configuration for extension with alias: "contao"
contao:
csrf_cookie_prefix: csrf_
csrf_token_name: contao_csrf_token
encryption_key: '%kernel.secret%'
# The error reporting level set when the framework is initialized.
error_level: 8183
# Allows to set TL_CONFIG variables, overriding settings stored in localconfig.php. Changes in the Contao back end will not have any effect.
localconfig: ~
# Allows to configure which languages can be used within Contao. Defaults to all languages for which a translation exists.
locales:
# Defaults:
- en
- cs
- de
- es
- fa
- fr
- it
- ja
- lv
- nl
- pl
- pt
- ru
- sl
- sr
- zh
# Whether or not to add the page language to the URL.
prepend_locale: false
# Show customizable, pretty error screens instead of the default PHP error messages.
pretty_error_screens: false
# An optional entry point script that bypasses the front end cache for previewing changes (e.g. preview.php).
preview_script: ''
# The folder used by the file manager.
upload_path: files
editable_files: 'css,csv,html,ini,js,json,less,md,scss,svg,svgz,txt,xliff,xml,yml,yaml'
url_suffix: .html
# Absolute path to the web directory. Defaults to %kernel.project_dir%/web.
web_dir: '%kernel.project_dir%/web'
image:
# Bypass the image cache and always regenerate images when requested. This also disables deferred image resizing.
bypass_cache: false
imagine_options:
jpeg_quality: 80
jpeg_sampling_factors:
# Defaults:
- 2
- 1
- 1
png_compression_level: ~
png_compression_filter: ~
webp_quality: ~
webp_lossless: ~
interlace: plane
# Contao automatically uses an Imagine service out of Gmagick, Imagick and Gd (in this order). Set a service ID here to override.
imagine_service: null
# Reject uploaded images exceeding the localconfig.gdMaxImgWidth and localconfig.gdMaxImgHeight dimensions.
reject_large_uploads: false
# Allows to define image sizes in the configuration file in addition to in the Contao back end.
sizes:
# Prototype
name:
width: ~
height: ~
resize_mode: ~ # One of "crop"; "box"; "proportional"
zoom: ~
css_class: ~
lazy_loading: ~
densities: ~
sizes: ~
# If the output dimensions match the source dimensions, the image will not be processed. Instead, the original file will be used.
skip_if_dimensions_match: ~
# Allows to convert one image format to another or to provide additional image formats for an image (e.g. WebP).
formats:
# Examples:
jpg:
- webp
- jpg
gif:
- png
# Prototype
source: []
items:
# Prototype
-
width: ~
height: ~
resize_mode: ~ # One of "crop"; "box"; "proportional"
zoom: ~
media: ~
densities: ~
sizes: ~
resizeMode: ~ # One of "crop"; "box"; "proportional", Deprecated (Using contao.image.sizes.*.items.resizeMode is deprecated. Please use contao.image.sizes.*.items.resize_mode instead.)
resizeMode: ~ # One of "crop"; "box"; "proportional", Deprecated (Using contao.image.sizes.*.resizeMode is deprecated. Please use contao.image.sizes.*.resize_mode instead.)
cssClass: ~ # Deprecated (Using contao.image.sizes.*.cssClass is deprecated. Please use contao.image.sizes.*.css_class instead.)
lazyLoading: ~ # Deprecated (Using contao.image.sizes.*.lazyLoading is deprecated. Please use contao.image.sizes.*.lazy_loading instead.)
skipIfDimensionsMatch: ~ # Deprecated (Using contao.image.sizes.*.skipIfDimensionsMatch is deprecated. Please use contao.image.sizes.*.skip_if_dimensions_match instead.)
# The target directory for the cached images processed by Contao.
target_dir: '%kernel.project_dir%/assets/images' # Example: %kernel.project_dir%/assets/images
target_path: null # Deprecated (Use the "contao.image.target_dir" parameter instead.)
valid_extensions:
# Defaults:
- jpg
- jpeg
- gif
- png
- tif
- tiff
- bmp
- svg
- svgz
- webp
security:
two_factor:
enforce_backend: false
search:
# The default search indexer, which indexes pages in the database.
default_indexer:
enable: true
# Enables indexing of protected pages.
index_protected: false
# The search index listener can index valid and delete invalid responses upon every request. You may limit it to one of the features or disable it completely.
listener:
# Enables indexing successful responses.
index: true
# Enables deleting unsuccessful responses from the index.
delete: true
crawl:
# Additional URIs to crawl. By default, only the ones defined in the root pages are crawled.
additional_uris: []
# Allows to configure the default HttpClient options (useful for proxy settings, SSL certificate validation and more).
default_http_client_options: []
Wie bereits in der oben stehenden Referenz erwähnt erlaubt contao.localconfig
jegliche Variablen einzustellen, die über
$GLOBALS['TL_CONFIG']
definiert sind. Diese Werte können teilweise über das Contao-Backend in den Systemeinstellungen
überschrieben und in der system/config/localconfig.php
gespeichert werden. Allerdings wird diese Art der Speicherung
Schritt für Schritt aus Contao entfernt. Einige der Einstellungen haben bereits ein Pendant in der Bundle Konfiguration
während andere Einstellungen nun bspw. in den Benutzereinstellungen oder im Startpunkt einer Webseite vorgenommen werden
können.
Je nach Contao-Version werden aber immer noch Einstellungen aus der localconfig
benutzt. Daher kann es nützlich sein zu
wissen, wie man diese Einstellungen über die Applikationskonfiguration (also die config.yml
) überschreiben könnte,
anstatt die veraltete localconfig.php
dafür zu benutzen. Dies kann für den eigenen Deployment-Flow wichtig sein, aber
auch weil es gewisse Einstellungen gibt, die nur manuell gesetzt werden können, weil diese weder eine Bundle Einstellung
noch eine andere Einstellungsmöglichkeit im Backend haben.
Das folgende Beispiel zeigt, wie man die E-Mail-Adresse des Systemadministrators über eine Umgebungsvariable definieren und die Wiederherstellungsperiode auf 60 Tage verlängern könnte:
# config/config.yaml
contao:
localconfig:
adminEmail: '%env(ADMIN_EMAIL)%'
undoPeriod: 5184000
Im Folgenden befindet sich eine vollständige Liste an localconfig Konfigurationen, die noch benutzt werden, und deren Beschreibung.
Key | Description |
---|---|
adminEmail |
E-Mail-Adresse des Systemadministrators. |
allowedDownload |
Erlaubte Download-Dateitypen. |
allowedTags |
Erlaubte HTML-Tags. |
characterSet |
Der von Contao benutzte Zeichensatz. Standard: utf-8 |
dateFormat |
Datumsformat. |
datimFormat |
Datums- und Zeitformat. |
defaultChmod |
Standard-Zugriffsrechte. |
defaultGroup |
Standardgruppe. |
defaultUser |
Standardbesitzer. |
disableCron |
Den Command-Scheduler deaktivieren. |
disableInsertTags |
Erlaubt es das Ersetzen von Insert-Tags global zu deaktivieren. |
disableRefererCheck |
Erlaubt es die Request Token Überprüfung komplett zu deaktivieren (veraltet). |
doNotCollapse |
Elemente nicht verkürzen. |
folderUrl |
Ordner-URLs verwenden. |
gdMaxImgHeight |
Maximale GD-Bildhöhe. |
gdMaxImgWidth |
Maximale GD-Bildbreite. |
imageHeight |
Maximale Bildhöhe. |
imageWidth |
Maximale Bildbreite. |
installPassword |
Speichert den Hash-Wert des Passwortes für das Contao-Installtool. |
licenseAccepted |
Speichert ob die Lizenz im Contao-Installtool bereits akzeptiert wurde. |
logPeriod |
Zeitspanne in Sekunden wie lange Einträge im System-Log behalten werden sollen. Standard: 604800 . |
maxFileSize |
Maximale Upload-Dateigröße. |
maxImageWidth |
Erlaubt es eine maximale Bildbreite für das Frontend zu setzen (veraltet). |
maxPaginationLinks |
Erlaubt es die Anzahl an Links in den automatisch generierten Blätternavigationen zu ändern. Standard: 7 . |
maxResultsPerPage |
Maximum Datensätze pro Seite. |
minPasswordLength |
Erlaubt es die minimale Passwortlänge für Frontend-Mitglieder und Backend-Nutzer zu ändern. Standard: 8 . |
requestTokenWhitelist |
Erlaubt es die Request Token Überprüfung für Anfragen von den definierten Hosts zu deaktivieren (veraltet). |
resultsPerPage |
Elemente pro Seite. |
sessionTimeout |
Zeitspanne in Sekunden wie lange eine Nutzer-Session (Frontend und Backend) gültig bleiben soll. Falls dieser Wert erhöht wird müssen ggf. auch die Session-Einstellungen von PHP geändert werden (session.cookie_lifetime und session.gc_maxlifetime ). Standard: 3600 . |
timeFormat |
Zeitformat. |
timeZone |
Zeitzone. |
undoPeriod |
Zeitspanne in Sekunden wie lange gelöschte Einträge wiederhergestellt werden können. Standard: 2592000 . |
uploadTypes |
Upload-Dateitypen. |
useAutoItem |
Erlaubt es das sogenannte »Auto Item« zu deaktivieren (nicht empfohlen). |
versionPeriod |
Zeitspanne in Sekunden wie lange ältere Versionen von geänderten Einträgen behalten werden sollen. Standard: 7776000 . |
Um den E-Mail Versand über einen SMTP-Server einzurichten, brauchst du folgende Angaben von deinem Hoster:
Diese fügst du dann unterhalb der bereits bestehenden Daten in die parameters.yml
ein:
# This file has been auto-generated during installation
parameters:
…
mailer_transport: smtp
mailer_host: host.example.com
mailer_user: mail@example.com
mailer_password: 'mein-passwort'
mailer_port: 465
mailer_encryption: ssl
Cache leeren
Damit die Änderungen aktiv werden, muss am Ende der Anwendungs-Cache über den Contao Manager (»Systemwartung« >
»Prod.-Cache erneuern«) oder alternativ über die Kommandozeile geleert werden. Dazu muss man sich im Contao
Installationsverzeichnis befinden.
php vendor/bin/contao-console cache:clear --env=prod --no-warmup
Danach kannst du den Mailversand auf der Kommandozeile testen.
php vendor/bin/contao-console swiftmailer:email:send --from=absender@example.com --to=empfaenger@example.com --subject=testmail --body=testmail
Dieses Kommando steht ab Contao 4.10 nicht mehr zur Verfügung.
Diese Funktion ist erst ab Contao 4.10 verfügbar.
In vielen Fällen erlauben SMTP-Server nicht den Versand von beliebigen Absenderadressen. Meist muss die Absenderadresse zu den verwendeten SMTP-Server Zugangsdaten passen. Vor allem in Multidomain-Installationen von Contao kann es jedoch wichtig sein, dass die Absenderadresse der E-Mails, die Contao verschickt, zur jeweiligen Domain passt.
Ab Contao 4.10 besteht daher die Möglichkeit, mehrere E-Mail Konfigurationen in Contao zu benutzen. Diese Konfigurationen können dann pro Webseiten-Startpunkt, pro Formular und pro Newsletter-Kanal ausgewählt werden. Pro E-Mail Konfiguration kann dann außerdem auch der Absender gesetzt werden, welcher dann für jede E-Mail benutzt wird, die über die ausgewählte E-Mail Konfiguration gesendet wird.
Die Konfiguration benötigt zwei Schritte. Zuerst müssen die verfügbaren E-Mail Versandmethoden über die Symfony Framework
Konfiguration in der config.yml
als sogenannte »Transports« eingestellt werden. Dabei können bspw. ein oder mehrere
SMTP-Server über die sogenannte »DSN«-Syntax definiert werden. Diese Syntax ist grundsätzlich sehr einfach aufgebaut:
smtp://<BENUTZERNAME>:<PASSWORT>@<HOSTNAME>:<PORT>
Man ersetzt die <PLATZHALTER>
mit den Angaben des verwendeten SMTP-Servers, oder entfernt sie dementsprechend. Siehe
dazu auch die Informationen in der offiziellen Symfony Dokumentation.
Falls der Benutzername oder das Passwort Sonderzeichen verwendet, müssen diese “URL enkodiert” werden. Es gibt verschiedene Online-Services, mit denen man auf einfache Weise eine beliebige Zeichenfolgen URL-encoden kann, z. B. urlencoder.org. Enkodiere den Benutzernamen und das Passwort separat, nicht gemeinsam mit dem Doppelpunkt.
Anstatt smtp://
kann auch smtps://
verwendet werden, um automatisch SSL Verschlüsselung über Port 465
zu verwenden.
# config/config.yml
framework:
mailer:
transports:
application: smtps://exampleuser:examplepassword@example.com
website1: smtps://email@example.org:foobar@example.org
website2: smtps://email@example.de:foobar@example.de
Im zweiten Schritt können die konfigurierten Transports über die Contao Framework Konfiguration im Backend verfügbar
gemacht werden. Im folgenden Beispiel werden die Transports website1
und website2
verfügbar gemacht:
# config/config.yml
contao:
mailer:
transports:
website1: ~
website2: ~
Wenn danach der Symfony Application Cache erneuert wurde, stehen diese E-Mail Konfigurationen zur Selektion im Contao Backend zur Verfügung.
Wird kein Transport konfiguriert, gelten nach wie vor die Informationen aus der parameters.yml
. Werden Transports
konfiguriert, aber es wird kein Transport im Contao Backend ausgewählt, wird automatisch der erste definierte Transport
verwendet.
Optional kann man nun pro Transport auch die Absenderadresse überschreiben:
# config/config.yml
contao:
mailer:
transports:
website1:
from: email@example.org
website2:
from: Lorem Ipsum <email@example.de>
Es besteht außerdem die Möglichkeit, für die Beschreibungen der Optionen für die Selektion im Backend über Übersetzungen pro Sprache zu definieren:
# translations/mailer_transports.en.yml
website1: 'SMTP for Website 1'
website2: 'SMTP for Website 2'
# translations/mailer_transports.de.yml
website1: 'SMTP für Webseite 1'
website2: 'SMTP für Webseite 2'
Cache leeren
Damit die Änderungen im Backend sichtbar werden, muss am Ende der Anwendungs-Cache über den Contao Manager (»Systemwartung« >
»Prod.-Cache erneuern«) oder alternativ über die Kommandozeile geleert werden. Dazu muss man sich im Contao
Installationsverzeichnis befinden.
php vendor/bin/contao-console cache:clear --env=prod --no-warmup