WordPress is a free, open-source, and the world’s most popular CMS built entirely in PHP. It is used by thousands of people around the globe for running blogs, business websites, and e-commerce stores. It has some great features including, a simple and easy-to-use admin panel, thousands of plugins, a huge community, in-depth theming, customization, and more.

In this guide, we will show you how to install WordPress with Apache and Let’s Encrypt SSL on AlmaLinux 8.

Prerequisites

  • A server running AlmaLinux 8.
  • A valid domain name pointed with your server IP.
  • A root password is configured on the server.

Install LAMP Server

WordPress requires the LAMP server to be installed in your server. You can install it using the following command:

dnf install httpd mariadb-server php php-mysqlnd php-dom php-simplexml php-xml php-xmlreader php-curl php-exif php-ftp php-gd php-iconv php-json php-mbstring php-posix php-sockets php-tokenizer unzip -y

After installing the LAMP server, start the Apache and MariaDB service, and enable them to start at system reboot:

systemctl start mariadb

systemctl start httpd

systemctl enable mariadb

systemctl enable httpd

Once you are done, you can proceed to the next step.

Configure MariaDB Database

First, you will need to set the MariaDB root password and secure the MariaDB installation. You can do it using the following command:

mysql_secure_installation

Answer all the questions as shown below:

Enter current password for root (enter for none): 
Set root password? [Y/n] Y
New password: 
Re-enter new password: 
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Once you are done, log in to MariaDB with the following command:

mysql -u root -p

Once you are log in, create a database and user for WordPress:

MariaDB [(none)]> CREATE DATABASE wordpress;

MariaDB [(none)]> CREATE USER `wordpress`@`localhost` IDENTIFIED BY 'password';

Next, grant all the privileges to the WordPress database using the command below:

MariaDB [(none)]> GRANT ALL ON wordpress.* TO `wordpress`@`localhost`;

Next, flush the privileges and exit from the MariaDB shell with the following command:

MariaDB [(none)]> FLUSH PRIVILEGES;

MariaDB [(none)]> EXIT;

Once you are done, you can proceed to the next step.

Download WordPress

Next, change the directory to the Apache web root and download the latest version of WordPress using the following command:

cd /var/www/html

wget https://wordpress.org/latest.tar.gz

Once the download is completed, extract the downloaded file with the following command:

tar -xvzf latest.tar.gz

Next, change the directory to the wordpress and rename the sample configuration file:

cd wordpress

mv wp-config-sample.php wp-config.php

Next, edit the configuration file with the following command:

nano wp-config.php

Define your database configuration as shown below:

/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );

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

/** MySQL database password */
define( 'DB_PASSWORD', 'password' );

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

Save and close the file when you are finished then set proper permission to the WordPress directory:

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

Once you are finished, you can proceed to the next step.

Configure Apache for WordPress

Next, you will need to create an Apache virtual host configuration file for WordPress. You can create it with the following command:

nano /etc/httpd/conf.d/wordpress.conf

Add the following lines:

   ServerAdmin [email protected]
   DocumentRoot "https://www.howtoforge.com/var/www/html/wordpress"
   ServerName wordpress.example.com
   ErrorLog "https://www.howtoforge.com/var/log/httpd/example.com-error_log"
   CustomLog "https://www.howtoforge.com/var/log/httpd/example.com-access_log" combined


   DirectoryIndex index.html index.php
   Options FollowSymLinks
   AllowOverride All
   Require all granted


Save and close the file then restart the Apache service to apply the changes:

systemctl restart httpd

You can check the status of the Apache with the following command:

systemctl status httpd

You should get the following output:

? httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-07-09 03:30:47 EDT; 3s ago
     Docs: man:httpd.service(8)
 Main PID: 4153 (httpd)
   Status: "Started, listening on: port 80"
    Tasks: 213 (limit: 12524)
   Memory: 24.5M
   CGroup: /system.slice/httpd.service
           ??4153 /usr/sbin/httpd -DFOREGROUND
           ??4155 /usr/sbin/httpd -DFOREGROUND
           ??4156 /usr/sbin/httpd -DFOREGROUND
           ??4157 /usr/sbin/httpd -DFOREGROUND
           ??4158 /usr/sbin/httpd -DFOREGROUND

Jul 09 03:30:47 AlmaLinux systemd[1]: Stopped The Apache HTTP Server.
Jul 09 03:30:47 AlmaLinux systemd[1]: Starting The Apache HTTP Server...

Once you are finished, you can proceed to the next step.

Secure WordPress with Let’s Encrypt SSL

Next, you will need to install the Certbot client to install the Let’s Encrypt SSL for WordPress. You can install it with the following command:

dnf install epel-release -y
dnf install certbot python3-certbot-apache

Next, obtain and install an SSL certificate for your lets domain with the following command:

certbot --apache -d wordpress.example.com

You will be asked to provide your email address and accept the term of service:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): [email protected]

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Account registered.
Requesting a certificate for wordpress.example.com
Performing the following challenges:
http-01 challenge for wordpress.example.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/httpd/conf.d/wordpress.conf
Redirecting all traffic on port 80 to ssl in /etc/httpd/conf.d/wordpress.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://wordpress.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Subscribe to the EFF mailing list (email: [email protected]).


IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/wordpress.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/wordpress.example.com/privkey.pem
   Your certificate will expire on 2022-02-09. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again with the "certonly" option. To non-interactively
   renew *all* of your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Configure Firewall

Next, you will need to allow ports 80 and 443 through the firewalld. You can allow them with the following command:

firewall-cmd --permanent --zone=public --add-service=http

firewall-cmd --permanent --zone=public --add-service=https

Next, reload the firewalld to apply the changes:

firewall-cmd --reload

Once you are finished, you can proceed to the next step.

Access WordPress Dashboard

Next, open your web browser and access the WordPress admin panel using the URL https://wordpress.example.com. You will be redirected to the following page:

<img alt="Choose language" data-ezsrc="https://kirelos.com/wp-content/uploads/2021/07/echo/p1.png60edb67ebd8b5.jpg" ezimgfmt="rs rscb3 src ng ngcb3" height="485" loading="lazy" src="data:image/svg xml,” width=”750″>

Select your language and click on the Continue. You should see the WordPress site configuration page:

<img alt="Site details" data-ezsrc="https://kirelos.com/wp-content/uploads/2021/07/echo/p2.png60edb67ed233a.jpg" ezimgfmt="rs rscb3 src ng ngcb3" height="503" loading="lazy" src="data:image/svg xml,” width=”750″>Advertisement

Provide your site information and click on Install WordPress button. Once the installation has been completed, you should see the following page:

<img alt="WordPress installation successful" data-ezsrc="https://kirelos.com/wp-content/uploads/2021/07/echo/p3.png60edb67ee52d8.jpg" ezimgfmt="rs rscb3 src ng ngcb3" height="367" loading="lazy" src="data:image/svg xml,” width=”750″>

Click on the Login button. You will be redirected to the WordPress login page:

<img alt="Log into WordPress" data-ezsrc="https://kirelos.com/wp-content/uploads/2021/07/echo/p4.png60edb67f073a2.jpg" ezimgfmt="rs rscb3 src ng ngcb3" height="451" loading="lazy" src="data:image/svg xml,” width=”750″>

Provide your admin username, password and click on the Login button. You should see the WordPress dashboard on the following page:

<img alt="WordPress Dashboard" data-ezsrc="https://kirelos.com/wp-content/uploads/2021/07/echo/p5.png60edb67f1fc12.jpg" ezimgfmt="rs rscb3 src ng ngcb3" height="391" loading="lazy" src="data:image/svg xml,” width=”750″>

Conclusion

Congratulations! you have successfully installed WordPress with Apache and Let’s Encrypt SSL on AlmaLinux 8. You can now create your own website easily using WordPress. Feel free to ask me if you have any questions.