TYPO3 - Getting started
The supported way to run TYPO3 on Platform.sh is through Composer . If you do not already have it installed then you should do so before proceeding.
A default TYPO3 installation has a risk of deadlocks when run on low-worker PHP-FPM configurations. Specifically, TYPO3 handles 403 and 404 error pages by issuing a full HTTP request back to itself with no timeout, which can lead to process starvation. There are two required steps to avoid this problem:
Add the line
$GLOBALS['TYPO3_CONF_VARS']['HTTP']['timeout'] = 3;
typo3config/AdditionalConfiguration.phpfile, which will set an HTTP timeout of 3 seconds instead of the default several minutes. (You may select a different number, but keep it under 10 seconds.)
Install and enable the Local Page Error Handler plugin for TYPO3. The easiest way to do so is through composer:
composer require pixelant/pxa-lpeh
that will provide a non-loopback way to handle error pages which avoids this race condition entirely.
Both of these steps are already set in the Platform.sh TYPO3 template , although you will need to enable the plugin yourself post-install.
.platform.app.yaml file will vary from project to project, and you are free to customize yours as needed. A recommended baseline TYPO3 configuration is listed below, and can also be found in our
TYPO3 template project
# This file describes an application. You can have multiple applications # in the same project. # The name of this app. Must be unique within a project. name: app # The type of the application to build. type: php:7.4 build: flavor: composer # The relationships of the application with services or other applications. # The left-hand side is the name of the relationship as it will be exposed # to the application in the PLATFORM_RELATIONSHIPS variable. The right-hand # side is in the form `<service name>:<endpoint name>`. relationships: database: 'db:mysql' rediscache: 'cache:redis' # The configuration of app when it is exposed to the web. web: locations: '/': # The public directory of the app, relative to its root. root: 'public' passthru: '/index.php' index: - 'index.php' allow: false rules: # Allow access to common static files. '\.(jpe?g|png|gif|svgz?|css|js|map|ico|bmp|eot|woff2?|otf|ttf)$': allow: true '^/robots\.txt$': allow: true '^/sitemap\.xml$': allow: true '/fileadmin': root: 'public/fileadmin' scripts: false allow: true passthru: '/index.php' '/typo3temp/assets': root: 'public/typo3temp/assets' scripts: false allow: true passthru: '/index.php' '/typo3conf/LocalConfiguration.php': allow: false '/typo3conf/AdditionalConfiguration.php': allow: false # The size of the persistent disk of the application (in MB). disk: 2048 # The mounts that will be performed when the package is deployed. mounts: "public/typo3temp": source: local source_path: "typo3temp" "public/fileadmin": source: local source_path: "fileadmin" "var": source: local source_path: "var" # The hooks that will be performed when the package is deployed. hooks: build: | set -e # Install the PhpRedis extension bash install-redis.sh 5.1.1 php vendor/bin/typo3cms install:setup --install-steps-config=src/SetupConfiguration.yaml --no-interaction --skip-extension-setup php vendor/bin/typo3cms install:generatepackagestates # Enable the install tool for 60mins after deployment touch public/typo3conf/ENABLE_INSTALL_TOOL # Keep the checked-in LocalConfiguration available, but make the actual file writable later-on # by creating a symlink which will be accesible below if [ -f public/typo3conf/LocalConfiguration.php ]; then mv public/typo3conf/LocalConfiguration.php public/typo3conf/LocalConfiguration.FromSource.php ln -sf ../../var/LocalConfiguration.php public/typo3conf/LocalConfiguration.php fi; # Clean up the FIRST_INSTALL file, that was created if [ -f public/FIRST_INSTALL ]; then rm public/FIRST_INSTALL fi; deploy: | set -e if [ ! -f var/platformsh.installed ]; then # copy the created LocalConfiguration into the writable location cp public/typo3conf/LocalConfiguration.FromSource.php var/LocalConfiguration.php # This creates the initial admin user with a default password. # *CHANGE THIS VALUE IMMEDIATELY AFTER INSTALLATION* php vendor/bin/typo3cms install:setup \ --install-steps-config=src/SetupDatabase.yaml \ --site-setup-type=no \ --site-name="TYPO3 on Platform.sh" \ --admin-user-name=admin \ --admin-password=password \ --skip-extension-setup \ --no-interaction php vendor/bin/typo3cms extension:setupactive || true touch var/platformsh.installed fi; crons: typo3: spec: "*/5 * * * *" cmd: "vendor/bin/typo3 scheduler:run"