4.1.11 TYPO3: Install on Server

TYPO3 Banner The Host

TYPO3 is a free CMS (Content Management System) for enterprise-level websites with a flexible architecture, extensions, and a powerful permissions system. It’s written in PHP, uses MySQL/MariaDB or PostgreSQL, and works great with Nginx or Apache. This guide uses a “clean” install approach via Composer and configuration of Nginx + PHP-FPM.

Preparation

Requirements

  • An active Virtual or Dedicated server service.
  • CPU: 2–4 vCPU; RAM: 4–8 GB; SSD: from 20 GB.
  • OS: Ubuntu 24.04 LTS with sudo or root privileges.
  • Web server Nginx, PHP-FPM 8.2/8.3 with typical extensions, DBMS MySQL 8.0+/MariaDB 10.5+ or PostgreSQL 12+, Composer 2.
  • Open ports 80/443; A/AAAA records configured for DOMAIN_NAME.

Environment variables

  • DOMAIN_NAME — site domain
  • SERVER_IP — public IP address of the server
  • DB_NAME, DB_USER, DB_PASSWORD — DB parameters
  • TYPO3_PATH — project path, for example /var/www/typo3
  • PHP_FPM_SOCKET — socket path, for example /run/php/php8.2-fpm.sock

Installing TYPO3 on the server

Package updates
sudo apt update && sudo apt -y upgrade
sudo apt -y install curl gnupg2 software-properties-common unzip ca-certificates

Classic prep: fresh packages and a set of utilities for repositories and artifact downloads.

Install PHP-FPM and required extensions

Install PHP 8.2 with extensions
sudo apt -y install php8.2 php8.2-fpm php8.2-cli php8.2-mbstring php8.2-xml php8.2-gd php8.2-intl php8.2-zip php8.2-curl php8.2-mysql php8.2-opcache
php -v

TYPO3 v13 LTS supports PHP 8.2/8.3. The php -v check confirms the installed version.

Install Nginx

Install and start Nginx
sudo apt -y install nginx
sudo systemctl enable --now nginx

Nginx will be the frontend that proxies PHP scripts to PHP-FPM.

Install and prepare the DBMS (example: MySQL/MariaDB)

Install MySQL server
sudo apt -y install mysql-server
mysql --version

Create the DB and user:

Create database
sudo mysql <<'SQL'
CREATE DATABASE DB_NAME CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'DB_USER'@'localhost' IDENTIFIED BY 'DB_PASSWORD';
GRANT ALL PRIVILEGES ON DB_NAME.* TO 'DB_USER'@'localhost';
FLUSH PRIVILEGES;
SQL

We use utf8mb4 for full Unicode and emoji support in content.

Install Composer 2

Install Composer 2
php -r "copy('https://getcomposer.org/installer','composer-setup.php');"
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
php -r "unlink('composer-setup.php');"
composer --version

Composer manages dependencies, updates, and the TYPO3 skeleton project.

Deploy the TYPO3 project

Create TYPO3 13 LTS project
sudo mkdir -p TYPO3_PATH && sudo chown -R $USER:$USER TYPO3_PATH
cd TYPO3_PATH
composer create-project typo3/cms-base-distribution:^13.4 .

We use the LTS branch ^13.4 without :latest. The structure will be created in TYPO3_PATH.

Configure DB connection and basic parameters

Initial ENV setup
cp .env.example .env || true
sed -i 's/^DB_DRIVER=.*/DB_DRIVER=mysqli/' .env
sed -i 's/^DB_HOST=.*/DB_HOST=127.0.0.1/' .env
sed -i 's/^DB_NAME=.*/DB_NAME=DB_NAME/' .env
sed -i 's/^DB_USER=.*/DB_USER=DB_USER/' .env
sed -i 's/^DB_PASSWORD=.*/DB_PASSWORD=DB_PASSWORD/' .env

In cms-base-distribution a .env is available for DB connection. We use the mysqli driver.

Project ownership and permissions

File permissions
sudo chown -R www-data:www-data TYPO3_PATH
sudo find TYPO3_PATH -type d -exec chmod 755 {} \;
sudo find TYPO3_PATH -type f -exec chmod 644 {} \;

The www-data owner allows PHP-FPM to write cache and generated files.

Nginx configuration for TYPO3

/etc/nginx/sites-available/typo3.conf
server {
  listen 80;
  server_name DOMAIN_NAME;

  root TYPO3_PATH/public;
  index index.php index.html;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

  location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_pass unix:PHP_FPM_SOCKET;
  }

  location ~* \.(?:css|js|jpg|jpeg|gif|png|svg|webp|ico)$ {
    expires 30d;
    access_log off;
  }

  location ~ /\. {
    deny all;
  }
}

Activate the site and reload Nginx:

Activate site
sudo ln -s /etc/nginx/sites-available/typo3.conf /etc/nginx/sites-enabled/typo3.conf
sudo nginx -t && sudo systemctl reload nginx

root points to public, where the TYPO3 index.php front controller is located.

Installing TYPO3 on a server with a control panel

Important! If your server is managed by a panel like ISPmanager, cPanel, or Plesk, install PHP and MySQL using the panel tools, not manual commands.

  1. Download the latest stable version from the official TYPO3 website.
  2. Upload the archive to your domain folder (/var/www/DOMAIN_NAME) via FTP or the hosting panel’s file manager.
  3. Unpack the archive and make sure files are accessible to the web server.
  4. Create a database.
  5. Open http://DOMAIN_NAME/ in your browser — the installation wizard will appear.

Run the TYPO3 web installer

Open http://DOMAIN_NAME/ and follow the installation wizard:

  1. Create a file named FIRST_INSTALL in the root directory, then refresh the page

The Host TYPO3 web installation

  1. Specify DB_NAME, DB_USER from the database created earlier

The Host TYPO3 web installation db

  1. Choose the previously created database DB_PASSWORD or create a new one

  1. Create an administrative user and specify the site name

  1. Go to the administrative panel

Verifying operation

  • Go to http://DOMAIN_NAME/typo3 and log in as admin.
  • In “Environment,” check the status of PHP extensions — all key modules should be green.
  • Create a page and a content element, make sure it’s displayed on the frontend.
  • Control commands:
Quick checks
php --version
php -m | grep -E 'mbstring|intl|xml|gd|curl|zip'
php vendor/bin/typo3 extension:list | head -n 20

Configuring additional TYPO3 features

SSL/TLS (HTTPS)

To work over secure HTTPS, use Let’s Encrypt or a commercial SSL certificate

Caching and performance

Enable opcache and tune php parameters in php.ini:

/etc/php/8.2/fpm/php.ini
opcache.enable=1
opcache.validate_timestamps=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.interned_strings_buffer=16

Restart PHP-FPM: sudo systemctl restart php8.2-fpm.

Image processing (GD and Imagick)

TYPO3 uses graphics libraries to generate thumbnails, resize, and process images. Two drivers are available: GD (part of standard PHP) and Imagick (preferred under high load or for complex formats).

Install GD and Imagick
sudo apt -y install php8.2-gd imagemagick php8.2-imagick
sudo systemctl restart php8.2-fpm

Recommendation! Use GD if the server is resource-constrained — it’s simpler and already built into PHP. For high-quality resizing and support for TIFF/WEBP/PNG with alpha channel, enable Imagick.

Check available extensions with:

php -m | grep -E 'gd|imagick'

In TYPO3, choose the driver under SettingsConfiguration PresetsImage Handling.

Task scheduler (Scheduler)

Add a cron for cache cleanup, indexing, etc.:

Cron for TYPO3
(crontab -l 2>/dev/null; echo "*/5 * * * * cd TYPO3_PATH && php vendor/bin/typo3 scheduler:run >/dev/null 2>&1") | crontab -
Common issues
Error / Symptom Cause Solution
502 Bad Gateway Incorrect PHP_FPM_SOCKET or PHP-FPM is not running Correct the socket path, restart php8.2-fpm
White screen PHP fatal error/missing extensions Enable logs, install missing modules
No write in fileadmin/var Incorrect file and folder permissions preventing www-data processes from writing to the specified directory Assign project owner/permissions
DB connection error Incorrect DB_* in .env Check values, user, and privileges
Installer doesn’t create tables Insufficient DB user privileges Grant ALL PRIVILEGES on DB_NAME