How to Install TYPO3 CMS on AlmaLinux 10

How to Install TYPO3 CMS on AlmaLinux 10

TYPO3 is a popular open-source CMS (Content Management System) for managing large-scale websites, especially among large companies or projects requiring complex features. Built with high flexibility and scalability, TYPO3 allows users to manage various types of content, complex page structures, and many additional features more easily. This CMS can handle large projects with complex technical requirements, such as internal system integration, high-level security, and multi-site management. In this article, we will show you how to install TYPO3 on AlmaLinux 10.

Prerequisites

Conventions

# – given commands should be executed with root privileges either directly as a root user or by use of sudo command
$ – given commands should be executed as a regular user

Step 1: Update the System

First, you will need to log in to your AlmaLinux 10 VPS via SSH:

ssh root@IP_Address -p Port_number

You will need to substitute ‘IP_Address’ and ‘Port_number’ with your server’s corresponding IP address and SSH port number. Furthermore, substitute ‘root’ with the username of the system user with sudo privileges.

You can verify whether you have the correct AlmaLinux version installed on your server with the subsequent command:

# cat /etc/almalinux-release 

You will see this message:

AlmaLinux release 10.2 (Lavender Lion)

Step 2. Install PHP

TYPO3 supports PHP 8.3, and AlmaLinux 10 ships with PHP 8.3. So, we can install PHP directly using the default AlmaLinux repository.

# dnf install php php-{bz2,ctype,curl,fpm,gd,intl,json,fileinfo,libxml,mbstring,mysqlnd,openssl,posix,session,simplexml,xmlreader,xmlwriter,zip,zlib}

Once the installation is completed, the PHP-FPM service is running but is not enabled upon server reboot. You can check and verify the installed PHP version with this command.

# php -v

It will return an output like this:

PHP 8.3.31 (cli) (built: May  5 2026 13:35:55) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.3.31, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.31, Copyright (c), by Zend Technologies

Next, we need to modify the following settings in the /etc/php.ini file:

memory_limit = 512M
max_execution_time = 240
max_input_vars = 1500
pcre.jit = 1
post_max_size = 10M
upload_max_filesize = 10M

Those are the recommended values shown in the TYPO3 documentation page at https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/Administration/Installation/SystemRequirements/Index.html#php-requirements-and-configuration

You can set them higher than the ones we provided here. To edit the file, run this command:

# nano /etc/php.ini

Save the file, then exit from the editor. Now, let’s enable and start PHP-FPM.

# systemctl enable --now php-fpm

Step 3. Install MariaDB Server

TYPO3 supports MySQL, MariaDB, PostgreSQL, and SQLite as the database server. In this step, we will install MariaDB from the default AlmaLinux repository. To install the MariaDB server, execute the command below:

# dnf install mariadb-server

Let’s execute the command below to start MariaDB and let it start automatically upon server reboot.

# systemctl enable --now mariadb

At this point, we can proceed to create a new database and user for our SuiteCRM website.

# mariadb 

After logging in to the MySQL shell, we can run these.

mysql> CREATE USER 'typo3'@'localhost' IDENTIFIED BY 'm0d1fyth15';
mysql> CREATE DATABASE typo3 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
mysql> GRANT ALL PRIVILEGES ON typo3.* TO 'typo3'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> \q

Step 4. Download TYPO3

To install TYPO3, we need to download the installation file first. Let’s download it now.

# wget https://get.typo3.org/14.3.4/tar.gz -O typo3.tar.gz

To get the more recent version, you can check their download page at https://get.typo3.org/

Once downloaded, we can extract the file.

# tar -xzvf typo3.tar.gz -C /var/www/html/typo3/ --strip-components=1

Now, we need to change the permissions.

# chown -R apache: /var/www/html/typo3

Step 5. Install and Configure Nginx

TYPO3 CMS supports Apache, Nginx, and IIS. In this article, we will use Nginx as the web server. Let’s install it now.

# dnf install nginx -y

Then, we need to create an nginx server block for our TYPO3 website.

# nano /etc/nginx/conf.d/typo3.conf

Insert the following into the file.

upstream typo3 {
server unix:/run/php-fpm/www.sock;
}

map $http_accept $webp_suffix {
    default   "";
    "~*webp"  ".webp";
}

map $typo3_index_exists $typo3_index {
    default   "/index.php";
    1         "/typo3/index.php";
}

server {
    listen 80;
    root /var/www/html/typo3/;


    index index.php index.htm index.html;

    location ~ /(?:fileadmin|uploads)/.*\.pdf$ {
        add_header Content-Security-Policy "default-src 'self' 'unsafe-inline'; script-src 'none'; object-src 'self'; plugin-types application/pdf;";
    }

    location ~ /(?:fileadmin|uploads)/.*(?<!\.pdf)$ {
        add_header Content-Security-Policy "default-src 'self'; script-src 'none'; style-src 'none'; object-src 'none';";
        try_files $uri$webp_suffix $uri =404;
    }

    location / {
        absolute_redirect off;
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location = /favicon.ico {
        access_log off;
        log_not_found off;
    }

    location = /robots.txt {
        access_log off;
        log_not_found off;
    }

    location = /typo3 {
        rewrite ^ /typo3/;
    }

    set $typo3_index_exists 0;
    if (-f $document_root/typo3/index.php) {
        set $typo3_index_exists 1;
    }

    location /typo3/ {
        absolute_redirect off;
        try_files $uri $typo3_index$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass typo3;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_intercept_errors off;
        # fastcgi_read_timeout should match max_execution_time in php.ini
        fastcgi_read_timeout 10m;
        fastcgi_param SERVER_NAME $host;
        # Pass the X-Accel-* headers to facilitate testing.
        fastcgi_pass_header "X-Accel-Buffering";
        fastcgi_pass_header "X-Accel-Charset";
        fastcgi_pass_header "X-Accel-Expires";
        fastcgi_pass_header "X-Accel-Limit-Rate";
        fastcgi_pass_header "X-Accel-Redirect";
    }

    location ~ \.js\.gzip$ {
        add_header Content-Encoding gzip;
        gzip off;
        types { text/javascript gzip; }
    }
    location ~ \.css\.gzip$ {
        add_header Content-Encoding gzip;
        gzip off;
        types { text/css gzip; }
    }

    location ~* /\.(?!well-known\/) {
        deny all;
    }

    location ~* (?:\.(?:bak|conf|dist|fla|in[ci]|log|psd|sh|sql|sw[op])|~)$ {
        deny all;
    }

    location ~* composer\.(?:json|lock) {
        deny all;
    }

    location ~* flexform[^.]*\.xml {
        deny all;
    }

    location ~* locallang[^.]*\.(?:xml|xlf)$ {
        deny all;
    }

    location ~* ext_conf_template\.txt|ext_typoscript_constants\.(?:txt|typoscript)|ext_typoscript_setup\.(?:txt|typoscript) {
        deny all;
    }

    location ~* /.*\.(?:bak|co?nf|cfg|ya?ml|ts|typoscript|dist|fla|in[ci]|log|sh|sql)$ {
        deny all;
    }

    location ~ _(?:recycler|temp)_/ {
        deny all;
    }

    location ~ fileadmin/(?:templates)/.*\.(?:txt|ts|typoscript)$ {
        deny all;
    }

    location ~ ^(?:vendor|typo3_src|typo3temp/var) {
        deny all;
    }

    location ~ (?:typo3conf/ext|typo3/sysext|typo3/ext)/[^/]+/(?:Configuration|Resources/Private|Tests?|Documentation|docs?)/ {
        deny all;
    }

    if (!-e $request_filename) {
        rewrite ^/(.+)\.(\d+)\.(php|js|css|png|jpg|gif|svg|gzip)$ /$1.$3 last;
    }
}

Make sure to replace typo3.yourdomain.com with your actual domain or subdomain name. Save the file then exit and start nginx.

# systemctl enable --now nginx

Step 6. Install TYPO3 CMS

After installing nginx and creating an nginx server block or virtual host, we should be able to access http://typo3.yourdomain.com. Let’s open it and start the installation.

Install TYPO3 CMS on AlmaLinux 10

As seen in the picture, we need to create an empty file called FIRST_INSTALL in the document root.

# touch /var/www/html/typo3/FIRST_INSTALL

Now, let’s refresh our web browser; you should see this.

Installing TYPO3 CMS on AlmaLinux 10

Click on the green button ‘No problems detected, continue with installation’

connect typo3 to database

In this step, fill in the database details we created in step 3 above.

Need a fast and easy fix?
✔ Unlimited Managed Support
✔ Supports Your Software
✔ 2 CPU Cores
✔ 2 GB RAM
✔ 50 GB PCIe4 NVMe Disk
✔ 1854 GeekBench Score
✔ Unmetered Data Transfer
NVME 2 VPS

Now just $43 .99
/mo

GET YOUR VPS
Selecting a database to Install TYPO3 CMS on AlmaLinux 10

In this step, we can choose the database we already created, then click on the Continue button.

Create TYPO 3 admin

Now, we can create an administrative user. Fill them all in and make sure to use a strong password.

Install TYPO3 CMS on AlmaLinux 10 complete

Click on Finish Installation. Once the admin user is created, you should be able to log in now.

Login to Typo3

Finally, you will be brought to the TYPO3 dashboard

Typo3 Dashboard

You Have Managed to Install TYPO3 CMS on AlmaLinux 10

You can now start working on your new TYPO3 website.

Of course, you don’t have to install TYPO3 CMS on AlmaLinux 10 yourself if you use one of our AlmaLinuxVPS Hosting services, in which case you can simply ask our expert Linux admins to install TYPO3 CMS on AlmaLinux 10 for you. Our experienced administrators are available 24×7 and will address your request immediately. Managing TYPO3 CMS instances is not just about the installation; we can help you optimize your TYPO3 CMS server if you have an active service with us.

If you liked this post on how to install TYPO3 CMS on AlmaLinux 10, please share it with your friends or leave a comment in the comments section.

Leave a Comment