TYPO3 development image based on netinventors/php-base.
At the first start TYPO3 is installed automatically, including database, admin user, site configuration,
dotenv support, Psalm and Webpack Encore. TYPO3 is set up with vendor/bin/typo3 setup.
| Tag | Content |
|---|---|
<typo3-version>, latest | All PHP versions of the base image, PHP 8.2 is the default |
<typo3-version>-php<X.Y>, latest-php<X.Y> | Only PHP <X.Y> (smaller image), e.g. 13.4.37-php8.4 |
Currently maintained is TYPO3 13.4 with PHP 8.2, 8.3, 8.4 and 8.5. 13.4.12 is still built, but has known security
issues, use the latest 13.4 release instead. Tags of TYPO3 11.5 are still available, but are no longer updated.
The versions below refer to the images based on netinventors/php-base 1.5.0.
-php<X.Y> suffix)
ENABLE_XDEBUG)n 11.0.0)TYPO3 13 requires PHP 8.2 or higher.
The TYPO3 sources are based on typo3/cms-base-distribution with these additional packages:
bat alias for the web user)| Port | Service |
|---|---|
| 22 | SSH |
| 80 | HTTP |
| 443 | HTTPS (self-signed certificate for localhost) |
| 3306 | MariaDB |
| 8080 | Webpack Encore dev-server (not exposed) |
Port 8080 has to be published explicitly for task dev-server, e.g. -p 8080:8080.
The container health check requests http://127.0.0.1/ping.
All described environment variables are displayed with their default values.
| Variable name | Default value |
|---|---|
| TZ | Europe/Berlin |
The web user is created at the first container start. The user belongs to the group www-data,
runs Apache, the TYPO3 scheduler and the installation, and can log in via SSH.
| Variable name | Default value |
|---|---|
| WEB_USER_UID | 1000 |
| WEB_USER_USERNAME | "netinventors" |
| WEB_USER_PASSWORD | "athene" |
At each start the ownership and permissions of the cache, log, backup and local-repository directories are fixed.
| Variable name | Default value | Possible values | Description |
|---|---|---|---|
| SKIP_PERMISSION_FIXER | "false" |
| Skips the permission fixer completely |
| SKIP_HTML_PERMISSION_FIXER | "true" |
| Skips the ownership fix of /var/www/html |
The currently available PHP versions are:
The tags with a -php<X.Y> suffix only contain one PHP version, which is also the default value of PHP_VERSION.
| Variable name | Default value | Possible values |
|---|---|---|
| PHP_INI_SCAN_DIR | ":/usr/local/etc/php/cli/conf.d" | |
| APACHE_PHP_INI_SCAN_DIR | ":/usr/local/etc/php/apache2/conf.d" | |
| PHP_VERSION | 8.2 |
|
| ENABLE_XDEBUG | "true" |
|
The leading : keeps the default scan directory of the PHP version and adds the given directory.
The Apache PHP configuration contains these TYPO3 specific settings:
| Setting | Value |
|---|---|
| memory_limit | 512M |
| max_execution_time | 300 |
| max_input_vars | 1500 |
| post_max_size | 25M |
| upload_max_filesize | 25M |
| realpath_cache_ttl | 3600 |
| xdebug.max_nesting_level | 512 |
| Variable name | Default value | Possible values |
|---|---|---|
| COMPOSER_HOME | /usr/local/share/composer | |
| COMPOSER_VERSION | 2 |
|
| UPDATE_COMPOSER | "false" |
|
Both versions are available as composer-1 and composer-2, composer links to the selected one.
| Variable name | Default value | Possible values |
|---|---|---|
| NODE_VERSION | 24.22.2 | |
| NPM_VERSION | 11.19.1 | |
| UPDATE_NODE | "false" |
|
| UPDATE_NPM | "false" |
|
| UPDATE_N | "false" |
|
If NODE_VERSION or NPM_VERSION differs from the preinstalled version, the requested version is installed at
container start (internet access required). NODE_VERSION accepts every version n understands, e.g. 22 or lts.
The value -1 skips the installation.
| Variable name | Default value | Possible values | Description |
|---|---|---|---|
| TYPO3_AUTO_INSTALL | "true" |
| Installs TYPO3 at start if install.lock is missing |
| TYPO3_FORCE_INSTALL | "false" |
| Reinstalls TYPO3 at every start, see below |
| TYPO3_CONTEXT | "Development" | TYPO3 application context | |
| TYPO3_SITE_URL | "https://localhost" | Base URL of the site configuration | |
| TYPO3_SITE_NAME | "TYPO3-Site" | ||
| TYPO3_SITEPACKAGE_NS | "netinventors" | Identifier of the site configuration and default sitepackage namespace | |
| TYPO3_ADMIN_USERNAME | "admin" | ||
| TYPO3_ADMIN_PASSSWORD | "typo3" | Backend admin and install tool password, three "S" in the name | |
| TYPO3_ADMIN_EMAIL | "admin@localhost" | ||
| PUPPETEER_SKIP_CHROMIUM_DOWNLOAD | "true" |
| Puppeteer < 22 |
| PUPPETEER_SKIP_DOWNLOAD | "true" |
| Puppeteer >= 19 |
TYPO3_FORCE_INSTALL="true" drops the database and overwrites the files in /var/www/html at every start.
The installation runs at container start. Meanwhile a preview page is shown on port 80 and 443.
If MYSQL_HOST is localhost or 127.0.0.1 a local MariaDB server instance will be started automatically and the
user and database are created during the installation. For an external server the user must already exist.
| Variable name | Default value |
|---|---|
| MYSQL_HOST | "localhost" |
| MYSQL_PORT | "3306" |
| MYSQL_USER | "netinventors" |
| MYSQL_PASSWORD | "athene" |
| MYSQL_DATABASE | "typo3" |
| MYSQL_DRIVER | "pdo_mysql" |
The installation can be repeated manually with install-typo3.sh -f as root. If a step fails, the installation is
aborted and install.lock is not created, so it is retried at the next start.
| Step | Description |
|---|---|
| start-mysql | Starts the local MariaDB server and waits until it accepts connections |
| create-mysql-user | Creates the database and the user on the local MariaDB server |
| copy-sources | Copies the TYPO3 sources to /var/www/html |
| install-typo3 | Runs typo3 setup, sets the admin and install tool password, creates the site |
| install-dotenv | Installs helhum/dotenv-connector, creates .env files and config/system/additional.php |
| install-psalm | Installs Psalm 6 in dev-ops/psalm (composer psalm, composer test) |
| install-typo3-encore | Installs ssch/typo3-encore and Webpack Encore 6 with Stimulus |
| stop-mysql | Stops the MariaDB server, it is started again by supervisor |
task sitepackage:install creates a sitepackage extension in local-repository/sitepackage and installs it via
Composer. It provides the site set <namespace>/sitepackage (depends on typo3/fluid-styled-content), which is
added to the site configuration. TypoScript records on the root page are deleted, so the TypoScript of the site set
is used. Its assets are built with Webpack Encore (task build, task dev-server) and included via typo3_encore.
task sitepackage:install -- -f reinstalls the sitepackage and overwrites all changes in
local-repository/sitepackage.
Supervisor runs Apache, Cron, the SSH server and, with a local MYSQL_HOST, MariaDB.
Cron runs the TYPO3 scheduler (vendor/bin/typo3 scheduler:run) every minute as web user.
| Location | Description |
|---|---|
| /var/www/html | TYPO3 installation, document root is /var/www/html/public |
| /var/www/html/local-repository | Local Composer path repository, e.g. for the sitepackage |
| /var/www/html/config/system | TYPO3 configuration (settings.php, additional.php) |
| /usr/local/share/skel.d/typo3 | TYPO3 sources, copied to /var/www/html during the installation |
| /usr/local/etc/install.d | Installation steps (*.sh) |
| /usr/local/share/composer | Composer home and cache directory |
| /usr/local/etc/php/apache2/conf.d | Additional loaded PHP configuring *.ini files for the Apache |
| /usr/local/etc/php/cli/conf.d | Additional loaded PHP configuring *.ini files for the CLI |
| /usr/local/etc/boot.d | Shell scripts (*.sh) executed in sorted order at container start |
| /usr/local/etc/supervisor/conf.d | Additional supervisor program configurations (*.conf) |
| /usr/local/share/permission-fixer | Shell scripts (*.sh) fixing permissions at container start |
| /usr/local/share/certs | CA (ca.pem, trusted in the container) and localhost certificate |
| /usr/local/var/log | Directory where all the logs go to |
| /usr/local/var/backup | Directory storing created snapshots |
The log directory contains the logs of Apache, MariaDB and supervisor and is linked as ~/log into the home
directory of the web user.
Some mapped volumes will now locate in different places.
| Old location | New location |
|---|---|
| /certs | No longer required |
| /etc/ssl/openssl.cnf | No longer required |
| /etc/apache2/sites-enabled | No longer required |
| /home/netinventors/.composer | /usr/local/share/composer |
| /usr/local/etc/php/conf.d | /usr/local/etc/php/cli/conf.d |
| /var/log/app | /usr/local/var/log |
You can run different commands directly via task in /var/www/html.
Executing task without an argument is an alias for task --list and shows the available commands.
| Command | Description |
|---|---|
| install-dependencies | Installs the npm dependencies of the project and the extensions |
| sitepackage:install | Installs the sitepackage Example: task sitepackage:install -- -n netinventors, -f reinstalls it |
| dev-server | Starts the Webpack Encore dev-server |
| dev | Builds the assets for development |
| build | Builds the assets for production |
| build:full | Installs the npm dependencies and builds the assets |
| typo3 | Runs "vendor/bin/typo3" Example: task typo3 -- cache:flush |
| cache:flush | Clears the cache |
| extension:setup | Sets up the extensions (database schema, default data) |
| snapshot:list | Lists available snapshots |
| snapshot:create | Creates a snapshot Example: task snapshot:create -- "Comment" |
| snapshot:restore | Restores a snapshot Example: task snapshot:restore -- "810511133700" |
| snapshot:restore:files | Restores a snapshots files Example: task snapshot:restore:files -- "810511133700" |
| snapshot:restore:database | Restores a snapshots database Example: task snapshot:restore:database -- "810511133700" |
| snapshot:remove | Removes a snapshot Example: task snapshot:remove -- "810511133700" |
| snapshot:purge | Purges all snapshots |
Content type
Image
Digest
sha256:4cefd09bc…
Size
628.7 MB
Last updated
about 22 hours ago
docker pull netinventors/typo3