PyroCMS is an open-source CMS based on PHP and Laravel web frameworks. It is a powerful content management system with MySQL/MariaDB as the database and also provides intuitive and simple web administration for easier management.

In this tutorial, we’ll walk you through the installation of PyroCMS on Ubuntu 24.04 with the LEMP Stack (Linux, Nginx, MySQL/MariaDB, and PHP-FPM) and Composer.

Prerequisites

Before you start, make sure you have the following:

  • An Ubuntu 24.04 server.
  • A non-root user with administrator privileges.
  • A domain name pointed to the server IP address.

Installing dependencies

PyroCMS is a Laravel-based content management system with MySQL/MariaDB as the database. Before installing PyroCMS, you’ll install the LEMP Stack (Linux, Nginx, MySQL/MariaDB, and PHP-FPM) and Composer to your Ubuntu system.

First, run the following apt command to update your package index and install the LEMP Stack (Linux, Nginx, MySQL/MariaDB, and PHP-FPM) and Composer.

sudo apt update sudo apt install nginx mariadb-server composer php-cli php-fpm php-mysql php-curl php-sqlite3 php-mbstring php-gd php-xml

Input Y to confirm with the installation.

<img alt="install deps" data-ezsrc="https://kirelos.com/wp-content/uploads/2024/08/echo/1-install-deps.png66b6491385f32.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="292" loading="lazy" src="data:image/svg xml,” width=”750″>

After the installation, check LEMP Stack services to ensure those services are running.

Check the Nginx web server with the systemctl command below.

sudo systemctl is-enabled nginx

sudo systemctl status nginx

Now check the MariaDB server status with the following:

<img alt="check nginx" data-ezsrc="https://kirelos.com/wp-content/uploads/2024/08/echo/2-check-nginx.png66b64913ac3ee.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="221" loading="lazy" src="data:image/svg xml,” width=”750″>

sudo systemctl is-enabled mariadb

sudo systemctl status mariadb

<img alt="check mariadbn" data-ezsrc="https://kirelos.com/wp-content/uploads/2024/08/echo/3-check-mariadb.png66b64913df0de.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="246" loading="lazy" src="data:image/svg xml,” width=”750″>

Next, run the following command to check the PHP-FPM service.

sudo systemctl is-enabled php8.3-fpm

sudo systemctl status php8.3-fpm

<img alt="check php-fpm" data-ezsrc="https://kirelos.com/wp-content/uploads/2024/08/echo/4-check-php-fpm.png66b649141d3b9.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="228" loading="lazy" src="data:image/svg xml,” width=”750″>

Lastly, check the Composer version using the command below. You’ll see Composer 2.4.7 is installed.

sudo -u www-data composer --version

<img alt="check composer" data-ezsrc="https://kirelos.com/wp-content/uploads/2024/08/echo/5-check-composer.png66b649144dc9a.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="97" loading="lazy" src="data:image/svg xml,” width=”539″>

Configuring PHP-FPM

After you’ve installed dependencies, you’ll configure the PHP-FPM by changing some default configuration through the php.ini file and restarting the PHP-FPM service.

Open the php.ini file for PHP-FPM with the nano editor.

sudo nano /etc/php/8.3/fpm/php.ini

Change the default configuration with the following and adjust the date.timezone and memory_limit options with your current environment.

date.timezone = Europe/Amsterdam

max_execution_time = 130

memory_limit = 256M

allow_url_fopen = On

allow_url_include = Off

post_max_size = 128M

upload_max_filesize = 128M

max_input_vars = 5000

When finished, save the file and exit the editor.

Now run the systemctl command below to restart the PHP-FPM service and apply your changes on php.ini.

sudo systemctl restart php8.3-fpm

Configuring MariaDB server

Now that you’ve configured PHP-FPM, you’ll secure MariaDB server installation and create a new database and user for the PyroCMS.

Secure your MariaDB server installation with the mariadb-secure-installation command below.

sudo mariadb-secure-installation

You’ll be asked about the following configurations:

  • Switch to unix_socket authentication? Input n and press ENTER.
  • The default MariaDB root user is already protected. optionally, you can also enable it by typing y for yes.
  • Change the root password. Input y to confirm and set up your new MariaDB root password.
  • Remove anonymous users? Input y to confirm.
  • Disallow root login remotely? Input y to confirm. Only local connection will be allowed if you are using the MariaDB
  • Remove the test database and access it. Input y to confirm and remove the default database ‘test’.
  • Lastly, input y again to reload all table privileges on your MariaDB server and apply new changes.

After you’ve configured MariaDB, you’ll create a new database and user for PyroCMS.

Log in to the MariaDB server with the mariadb command below. Enter your root password when prompted.

sudo mariadb -u root -p

Now run the following queries to create a new database pyrocmsdb, a new user pyrocms@localhost, and the password is passw0rd. Change details database name, username, and password as needed.

CREATE DATABASE pyrocmsdb;

GRANT ALL PRIVILEGES ON pyrocmsdb.* TO pyrocms@localhost IDENTIFIED BY 'passw0rd';

FLUSH PRIVILEGES;

<img alt="create database and user" data-ezsrc="https://kirelos.com/wp-content/uploads/2024/08/echo/6-create-database.png66b649147307e.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="158" loading="lazy" src="data:image/svg xml,” width=”750″>

Next, run the query below to verify privileges for user pyrocms@localhost. You’ll see the pyrocmsdb database is accessible with the user pyrocms@localhost.

SHOW GRANTS FOR pyrocms@localhost;

Lastly, type quit to exit from the MariaDB server.

<img alt="show db privileges" data-ezsrc="https://kirelos.com/wp-content/uploads/2024/08/echo/7-show-db-privileges.png66b6491499c28.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="290" loading="lazy" src="data:image/svg xml,” width=”747″>

Downloading PyroCMS source code

Create new directories for Composer and PyroCMS, go to the /var/www/pyrocms, and then change ownership of new directories to the user www-data. In this case, the /var/www/pyrocms will be used as the document root for PyroCMS.

mkdir -p /var/www/{.config,.cache,pyrocms}; cd /var/www/pyrocms

sudo chown -R www-data:www-data /var/www/{.config,.cache,pyrocms}

Now run the composer command below to download the PyroCMS source code, and install and update PHP dependencies.

sudo -u www-data composer create-project pyrocms/pyrocms .

sudo -u www-data composer update

Below you can see the installation of PyroCMS through the composer command:

<img alt="download and install pyrocms dependencies" data-ezsrc="https://kirelos.com/wp-content/uploads/2024/08/echo/8-download-install-pyrocms-composer.png66b64914d9395.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="588" loading="lazy" src="data:image/svg xml,” width=”750″>

After the installation is complete, move to the next section.

Setting up Nginx server block

In this section, you’ll create a new Nginx server block configuration for PyroCMS installation. So make sure you have a domain name pointed to your Ubuntu server IP address. In this example, you’ll be using a domain name howtoforge.local.

Create a new Nginx server block /etc/nginx/sites-available/pyrocms.conf with the nano editor.

sudo nano /etc/nginx/sites-available/pyrocms.conf

Copy and paste the following configuration and make sure to change the server_name with your domain name.

server {

listen 80;

server_name howtoforge.local;

index index.php index.html;

root /var/www/pyro/public;

location / {

try_files $uri $uri/ /index.php?$args;

}

location ~ .php$ {

include fastcgi_params;

fastcgi_pass unix:/run/php/php-8.3-fpm.sock;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_index index.php;

}

}


When done, save and exit the file.

Now run the command below to create a symlink of the pyrocms.conf file to the /etc/nginx/sites-enabled directory and verify your Nginx syntax.

sudo ln -s /etc/nginx/sites-available/pyrocms.conf /etc/nginx/sites-enabled/

sudo nginx -t

If you’ve proper Nginx syntax, you’ll see an output test is successful – syntax is ok.

<img alt="setup nginx" data-ezsrc="https://kirelos.com/wp-content/uploads/2024/08/echo/9-setup-nginx.png66b649150ab9d.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="181" loading="lazy" src="data:image/svg xml,” width=”750″>

Lastly, run the following systemctl command to restart the Nginx web server and apply your changes.

sudo systemctl restart nginx

Securing PyroCMS with HTTPS through Letsencrypt

To secure PyroCMS, you’ll implement HTTPS through Letsencrypt. For that, you must install Certbot to generate SSL/TLS certificates and automatically implement HTTPS on your PyroCMS installation.

Install certbot and python3-certbot-nginx packages with the following command. Input Y to confirm the installation.

sudo apt install certbot python3-certbot-nginx

Now run the certbot command below to generate SSL certificates and secure PyroCMS with HTTPS.

sudo certbot --nginx --agree-tos --no-eff-email --redirect --hsts --staple-ocsp --email [email protected] -d howtoforge.local

After the process is finished, you’ll get your certificates on the /etc/letsencrypt/live/domain.com directory, and your PyroCMS is now secured with HTTPS.

Installing PyroCMS using the web installer

Open your web browser and visit your domain name such as https://howtoforge.local/. Now you’ll see a single page of PyroCMS installation:

  • Select I Agree to accept the license for PyroCMS installation.
  • Input your database name, user, and password.
  • Input new admin user, email address, and password for your PyroCMS.
  • Input site details for your installation, such as domain name, language, and timezone.
  • Click Install to confirm the installation.

<img alt="install pyrocms" data-ezsrc="https://kirelos.com/wp-content/uploads/2024/08/echo/10-installation.png66b6491532b82.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="582" loading="lazy" src="data:image/svg xml,” width=”750″>

After the installation is complete, you’ll see the following page:

<img alt="install complete" data-ezsrc="https://kirelos.com/wp-content/uploads/2024/08/echo/12-install-complete.png66b6491550493.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="305" loading="lazy" src="data:image/svg xml,” width=”750″>

Click View Site to access the PyroCMS home page. Below you can see the default index page for PyroCMS.

<img alt="homepage" data-ezsrc="https://kirelos.com/wp-content/uploads/2024/08/echo/13-homepage.png66b649157d034.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="513" loading="lazy" src="data:image/svg xml,” width=”750″>

Click Login to access PyroCMS’s login screen. Input your admin user and password, and then click Login.

<img alt="login" data-ezsrc="https://kirelos.com/wp-content/uploads/2024/08/echo/14-login.png66b64915ae009.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="244" loading="lazy" src="data:image/svg xml,” width=”750″>

If successful, you’ll see the PyroCMS admin dashboard like the following:

<img alt="dashboard" data-ezsrc="https://kirelos.com/wp-content/uploads/2024/08/echo/15-dashboard.png66b64915d4699.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="455" loading="lazy" src="data:image/svg xml,” width=”750″>

Conclusion

Congratulations! You’ve completed the installation of PyroCMS on the Ubuntu 24.04 server. You have the PyroCMS installed with the LEMP Stack (Linux, Nginx, MySQL/MariaDB, and PHP-FPM). You’ve also downloaded PyroCMS with Composer and secured PyroCMS with HTTPS through Certbot and Letsencrypt.