Based on Debian 10 "Buster" environment.


Concrete5 is a CMS (Content Management System). Unlike WordPress, it focuses on independent pages than blog posts (seems so to me).

The installation process is documented at the Concrete5 official site. Here I add some details of how to integrate with nginx.

Download Concrete5

Download file is available at Concrete5 official site. Check the URL of latest version.
Move to the directory you want to store the Concrete5 files and download.

$ wget ''

Once you download, you’ll get the zip file named “index.html”. Never mind about the filename and just unzip it.

$ unzip index.html

The unzipped index.php will be the site top.
Before starting the Concrete5 installation, some directories have to be writable by the webserver.

# chown www-data:www-data application/files/ application/config/ packages/ updates/

Prepare database

Make a database on MariaDB for this Concrete5. Just an empty database and a user with full access to it is enough. Remember the database name, username, and password.

# mariadb <- Login MariaDB as root
MariaDB [(none)]> create database concrete5;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> create user 'concrete5'@'localhost' identified by 'password';
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> grant all on concrete5.* to 'concrete5'@'localhost';
Query OK, 0 rows affected (0.000 sec)

Configuration for nginx

The example for PHP enabled site configuration is already shown at the nginx installation article. For the Concrete5, the small tweak is required to run from that example.

server {
        listen 80;
        listen [::]:80;
        return 301$request_uri;

server {
        listen 443 ssl;
        listen [::]:443 ssl;

        include snippets/snakeoil.conf;


        root /var/www/html;

        index index.html index.php;

        location / {
                try_files $uri $uri/ =404;

        # pass PHP scripts to FastCGI server
        location ~ \.php($|/) {
                include snippets/fastcgi-php.conf;
                # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/run/php/php7.3-fpm.sock;

The point is “\.php$” has to be changed to “\.php($|/)”. Since Concrete5 URL looks ~/index.php/pagename, regex “\.php$” is not enough.

Setup Concrete5

Now you should see the installation screen by accessing the designated URL.
The installer will check the PHP modules and show the missing ones. In my, the missing modules and packages to install are as follows. (? mark will show you the hint which packages you need.)

  • DOM Extension Enabled
    -> php-xml
  • Image Manipulation Available
    -> php-gd
  • XML Support
    -> php-xml (same as DOM Extension)
  • Internationalization Support
    -> php-mbstring
  • Zip Support
    -> php-zip

At next screen, the site information is required. The database server is localhost, and other data is what you’ve just set above.

The install process will go on and you will be logged in as “admin”. Next time you log in, you need to be “admin”, not the mail address you typed at the installation screen.