4.1.11 TYPO3: Install on Server

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
sudoorrootprivileges. - 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/AAAArecords configured forDOMAIN_NAME.
Environment variables
DOMAIN_NAME— site domainSERVER_IP— public IP address of the serverDB_NAME,DB_USER,DB_PASSWORD— DB parametersTYPO3_PATH— project path, for example/var/www/typo3PHP_FPM_SOCKET— socket path, for example/run/php/php8.2-fpm.sock
Installing TYPO3 on the server
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
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
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)
sudo apt -y install mysql-server
mysql --version
Create the DB and user:
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
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
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
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
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
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:
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.
- Download the latest stable version from the official TYPO3 website.
- Upload the archive to your domain folder (
/var/www/DOMAIN_NAME) via FTP or the hosting panel’s file manager. - Unpack the archive and make sure files are accessible to the web server.
- Create a database.
- 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:
- Create a file named
FIRST_INSTALLin the root directory, then refresh the page

- Specify
DB_NAME,DB_USERfrom the database created earlier

- Choose the previously created database
DB_PASSWORDor create a new one

- Create an administrative user and specify the site name

- Go to the administrative panel

Verifying operation
- Go to
http://DOMAIN_NAME/typo3and 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:
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:
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).
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 Settings → Configuration Presets → Image Handling.
Task scheduler (Scheduler)
Add a cron for cache cleanup, indexing, etc.:
(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 |
Useful links
Official documentation


