How to Install WordPress with LEMP Stack on CentOS 8

In this tutorial, we will be installing WordPress using the LEMP stack (Linux, Nginx, MySQL, and PHP) on a CentOS 8 VPS.

WordPress is a free and open-source CMS based on the PHP programming language, with MySQL being used for the backend where the data is stored. Used by millions of people, it is the world’s most popular content management system (or CMS for short). You can extend the functionality of WordPress site with the help of its free and premium plugins and themes.

With thousands of plugins available, you can morph your website to be anything you need it to – blogs, online stores, almost anything! WordPress is also the most user-friendly CMS compared to other content management systems, with many years of experience leading to tweaks that make tasks take just a few clicks. The installation is pretty easy, too – all you need is to closely follow the steps in this tutorial. Let’s get started.

Step 1 – Log in and Update any out-of-date Server Packages

Log in to your CentOS 8 server via SSH as the root user:

ssh root@IP_Address -p Port_number

where ‘IP_Address‘ and ‘Port_number‘ are the actual IP address of your server and the SSH port (the default port is 22)

Next, run the following commands to upgrade all installed packages on your VPS:

dnf update -y

Updating packages regularly is a good idea because it improves the security and feature set of your Linux VPS.

Step 2 – Install the Nginx Web Server

WordPress needs a web server with PHP support to run and render the web pages dynamically. For this, we will install and use the Nginx web server, a popular and highly customizable web server. It can easily be installed using the following command:

dnf -y install nginx

Once the installation is completed, start Nginx and enable it to start automatically after a reboot:

systemctl start nginx
systemctl enable nginx

You can check if the web server is running with this command:

systemctl status nginx

The output should look something like this:

● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/nginx.service.d
   Active: active (running)
 Main PID: 31987 (nginx)
    Tasks: 5 (limit: 24007)
   Memory: 10.7M
   CGroup: /system.slice/nginx.service
           ├─31987 nginx: master process /usr/sbin/nginx
           ├─31988 nginx: worker process
           ├─31989 nginx: worker process
           ├─31990 nginx: worker process
           └─31991 nginx: worker process

You can also verify if Nginx is running by accessing http://Server_IP_Address in your preferred web browser.

Step 3 – Install and Configure PHP

The version of PHP supplied by default in CentOS 8 from the AppStream repository is 7.2.11 – this is the latest version at the time of this article being written. The following command will install the latest version of PHP and essential PHP extensions required by WordPress in order for it to function properly:

dnf install php php-common php-mbstring php-gd php-intl php-xml php-json php-mysqlnd php-fpm

Once all the packages are installed, open the php.ini file and tweak some settings (nano is our text editor of choice, you can use your own if you wish):

nano /etc/php.ini

Make the following changes:

post_max_size = 64M
memory_limit = 256M
max_execution_time = 300
upload_max_filesize = 32M
date.timezone = America/Chicago

Save and close the file.

Now open the /etc/php-fpm.d/www.conf configuration file:

sudo nano /etc/php-fpm.d/www.conf

Look for the user and group directives. Make the following changes from apache to nginx:


Save and close the file, then restart the PHP-FPM service to apply the configuration changes:

systemctl restart php-fpm

Step 4 – Install the MySQL Database Server and Create a Database

The next step will be to install the MySQL database server (one of the most popular database servers in the world) and create a user and database in MySQL for the WordPress installation. CentOS 8 is distributed with MySQL 8.0 at the time of this article being written.

MySQL 8 server can be installed using the following command:

dnf install mysql-server

After the installation is completed, start MySQL and enable it to start automatically after a reboot:

systemctl start mysqld
systemctl enable mysqld

After the installation completes, you can check the version of the installed MySQL database server:

mysql -V
mysql  Ver 8.0.17 for Linux on x86_64 (Source distribution)

Additionally, you can run the mysql_secure_installation post-installation script to strengthen the security of the database server.

Next, log in to the MySQL server as user root:

mysql -u root -p

Provide your root password when prompt then create a new MySQL user and database with the following command:

mysql> CREATE DATABASE wordpress;
mysql> CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'strong_password';
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
mysql> exit;

Don’t forget to replace ‘strong_password’ with an actual, strong password. You can also replace ‘wp-user‘ with a username of your choice, if you wish.

Step 5 – Download and Install WordPress

Now that we have our prerequisites installed and configured for WordPress, we can start with its installation. The latest release of WordPress can be downloaded from their official website. At the moment of writing this article, it is version 5.4.1. It can easily be downloaded onto your CentOS 8 server using the following command (this downloads the latest version):


Once the downloading of the WordPress archive is completed, unpack it to the document root directory of your web server (/var/www/html/):

unzip -d /var/www/html/

Copy your wp-sample-config.php file to  wp-config.php.

cp /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php

Open your config file and update the database information.

nano /var/www/html/wordpress/wp-config.php

You need to modify entries according to the created database, user, and password. Leave the ‘localhost’ field intact – this is because our MySQL server is running on the same host as the WordPress instance.

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' ); 

/** MySQL database username */ 
define( 'DB_USER', 'wpuser' ); 

/** MySQL database password */ d
efine( 'DB_PASSWORD', 'strong_password' ); 

/** MySQL hostname */ 
define( 'DB_HOST', 'localhost' );

We now need to make the Nginx user as the owner of the WordPress directory, so that it has access and is able to serve the files.

This will create a new ‘wordpress’ directory which will contain all files of the WordPress installation.

chown -R nginx:nginx /var/www/html/wordpress

Step 6 – Configure Nginx

Next, we will need to create a virtual block configuration file for WordPress. You can create a new virtual block configuration file with the following command:

nano /etc/nginx/conf.d/wordpress.conf

Add the following lines:

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

Now just $43 .99

server {
listen 80;

root /var/www/html/wordpress;
index index.php index.html index.htm;

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

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

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;

location = /robots.txt {
allow all;
log_not_found off;
access_log off;

location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

NOTE: Don’t forget to replace with your unique registered domain name.

You can test if everything is properly configured using the following command:

nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Once you confirm that everything is OK, restart Nginx for the changes to take effect:

systemctl restart nginx.service

Step 7 – Complete the WordPress installation

Once all steps above are done, the installation from the command line is completed. You can open your favorite web browser and point it to You should get the following screen:

WordPress LAMP

Select your language and follow the installation wizard to complete the WordPress installation and create your administrative account. Congratulations, you now have WordPress installed on CentOS 8 with a LEMP stack.

Of course, if you are one of our Managed WordPress Hosting customers, you don’t have to install WordPress with LEMP Stack on CentOS 8, simply ask our admins, sit back, and relax. Our admins will install WordPress with LEMP Stack on your CentOS 8 VPS for you immediately, configuring it to your exact specifications.

PS. If you liked this post on how to install WordPress with LEMP Stack on CentOS 8, please share it with your friends on the social networks using the buttons below, or simply leave a comment in the comments section. Thank you.

1 thought on “How to Install WordPress with LEMP Stack on CentOS 8”

  1. You have to open ports 80 and 443:

    # firewall-cmd –zone=public –add-service=http
    # firewall-cmd –zone=public –add-service=https
    Note, the above firewald commands will open HTTP and HTTPS port only temporarily.

    Open port 80 and port 443 port permanently. Execute the below commands to open both ports permanently, hence, make the settings persistent after reboot:
    # firewall-cmd –zone=public –permanent –add-service=http
    # firewall-cmd –zone=public –permanent –add-service=https
    # firewall-cmd –reload


Leave a Comment