In this guide, we will go through Setting up Mysql 8 and the latest wordpress in Centos 8 with Nginx serving traffic and terminating ssl.
WordPress is a free and open-source content management system written in PHP and paired with a MySQL or MariaDB database.
Welcome to the world’s most popular website builder. 42% of the web is built on WordPress.
Related Content:
Prerequisites
To follow along this guide, ensure that you have the following:
- Centos 8 Server
- Root access or user with sudo access
- Domain name with A DNS records mapped to the server
- Internet access from the server
Table of Content
- Updating the system
- Installing mysql 8 database server
- Create Mysql wordpress usr
- Install the Nginx Web Server
- Install PHP with dependencies
- Configure PHP and PHP FPM Settings
- Download and Install WordPress
- Configuring wordpress
- Configure Nginx to serve the site
- Complete the WordPress installation
1. Updating the system
Ensure that your system is up to date before proceeding. Use the following command to update the packages:
sudo dnf -y update
Output:
$ sudo dnf -y update
Last metadata expiration check: 1:18:02 ago on Tue 17 Aug 2021 11:20:55 AM UTC.
Dependencies resolved.
Nothing to do.
Complete!
2. Install the MySQL 8 Database Server
Note: To see a detailed guide on installing mysql server, check this guide here.
Now that the system is updated, lets install mysql server. Mysql is available in the Centos 8 repositories as mysql-server
package. Install it with this command:
sudo dnf install -y mysql-server
Once installation is done, start the service using this command:
sudo systemctl start mysqld
Enable the service to start on boot:
sudo systemctl enable mysqld
Finally, use the mysql provided secure installation command to set up the initials and the password for mysql user.
sudo mysql_secure_installation
Note down the root password.
3. Create Mysql wordpress user
It is always a good practice to create a dedicated user to use when connecting to the database from mysql. Login as the root user and use these commands to create a user:
Create a database to be used by our site:
create database wp_db;
Create a user:
create user 'wp_user'@'%' identified by 'strongpass';
Grant the created user privileges to the db:
grant all privileges on wp_db.* to 'wp_user'@'%';
Now save the database, user and the password for use when we have wordporess installed.
4. Install the Nginx Web Server
We will use nginx to serve traffic comming in from the designated domain to our wordpress site. We will need to have a virtual host and a domain already mapped to the server that we will use to serve wordpress.
To install Nginx:
sudo 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:
sudo systemctl status nginx
Output
$ sudo systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2021-08-17 12:40:45 UTC; 21s ago
Main PID: 70209 (nginx)
Tasks: 3 (limit: 23800)
Memory: 5.4M
CGroup: /system.slice/nginx.service
├─70209 nginx: master process /usr/sbin/nginx
├─70210 nginx: worker process
└─70211 nginx: worker process
Aug 17 12:40:45 app-server.citizix.com systemd[1]: Starting The nginx HTTP and reverse proxy server...
Aug 17 12:40:45 app-server.citizix.com nginx[70206]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Aug 17 12:40:45 app-server.citizix.com nginx[70206]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Aug 17 12:40:45 app-server.citizix.com systemd[1]: Started The nginx HTTP and reverse proxy server.
5. Install PHP with dependencies
WordPress is Coded in PHP. We will need php runtime to serve wordpress in our server.
WordPress works in PHP 7.4. The latest version of php is not available in the default Centos Repositories. Let’s enable it with this command:
sudo dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm
Now enable php 7.4 with this command:
sudo dnf module enable php:remi-7.4
Now let’s install phpuse this command to install:
sudo dnf install -y php \
php-common \
php-mbstring \
php-gd \
php-intl \
php-xml \
php-json \
php-mysqlnd \
php-fpm
6. Configure PHP and PHP FPM Settings
Global php settings are stored in the /etc/php.ini
file. Lets update these settings.
Open php.ini with your favourite text editor, I will use vim
sudo vim /etc/php.ini
Search for the following and update the values like shown below:
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300
upload_max_filesize = 32M
date.timezone = Africa/Nairobi
php-fpm
is responsible for serving our php content, its config file is located here: /etc/php-fpm.d/www.conf
.
Now open the /etc/php-fpm.d/www.conf
configuration file:
sudo vim /etc/php-fpm.d/www.conf
Look for the user and group directives. Make the following changes from apache to nginx:
user = nginx
group = nginx
Save and close the file, then restart the PHP-FPM service to apply the configuration changes:
sudo systemctl restart php-fpm
7. Download and Install WordPress
Now that we have the servers set up, let’s download and install wordpress on the server. The latest release of WordPress can be downloaded from their official website.
Let’s create a directory where our wordpress content willl be served:
sudo mkdir /var/www/dev-citizix
Ensure that the nginx
user owns the content:
sudo chown -R nginx.nginx /var/www/dev-citizix
Download the latest wordpress content:
cd /tmp
curl -LO https://wordpress.org/latest.zip
Sample Output:
$ curl -LO https://wordpress.org/latest.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 15.7M 100 15.7M 0 0 6650k 0 0:00:02 0:00:02 --:--:-- 6647k
$ ls
latest.zip
Extract and move the content to our server directory:
unzip latest.zip
mv wordpress/* /var/www/dev-citizix
8. Configuring wordpress
Now that the wordpress content has been copied to the site directory, lets update the db configuration using the sample file provided.
Switch to the site directory:
cd /var/www/dev-citizix/
Copy your wp-config-sample
file to wp-config.php
.
cp wp-config-sample.php wp-config.php
Open the config file in a text editor:
vim wp-config.php
Update these vars: DB_NAME
, DB_USER
, DB_PASSWORD
, DB_HOST
:
<?php
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'xxx' );
/** MySQL database username */
define( 'DB_USER', 'xxx' );
/** MySQL database password */
define( 'DB_PASSWORD', 'xxx' );
/** MySQL hostname */
define( 'DB_HOST', 'xxx' );
/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );
/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
Save the text file once that is done.
Make the Nginx user as the owner of the WordPress directory, so that it has access and is able to serve the files.
sudo chown -R nginx:nginx /var/www/dev-citizix
9. Configure Nginx to serve the site
Now that the config is in place, lets configure an nginx virtual host to serve the content we just added to /var/www/dev-citizix
.
Let’s create virtual site in the directory that nginx serves content here /etc/nginx/conf.d
:
sudo vim /etc/nginx/conf.d/dev-citizix.conf
Add the following content:
server {
listen 80;
server_name dev.citizix.com;
root /var/www/dev-citizix;
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;
}
}
Ensure that the added config is good by using this command to test:
$ sudo 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:
sudo systemctl restart nginx
10. 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 http://dev.citizix.com. You should get the following screen:
From there you can follow the prompts to set up your wordpress.
Conclusion
We managed to set up Centos 8 with Mysql 8, Php 7.4 and Nginx to serve wordpress in this guide.