Install WordPress on Ubuntu 18.04

Install Apache2 HTTP Server

Update your system,

sudo apt update

output:

root@vps:~# sudo apt update
Hit:1 http://security.ubuntu.com/ubuntu bionic-security InRelease
Hit:2 http://us.archive.ubuntu.com/ubuntu bionic InRelease                     
Hit:3 http://us.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:4 http://us.archive.ubuntu.com/ubuntu bionic-backports InRelease

Install apache2 server,

sudo apt install apache2

output:

root@vps:~# sudo apt install apache2
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
apache2-bin apache2-data apache2-utils libapr1 libaprutil1
libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.2-0 ssl-cert
Suggested packages:

Commands to stop, start and enable Apache2 service to always start up with the server boots.

sudo systemctl stop apache2.service

sudo systemctl start apache2.service

sudo systemctl enable apache2.service

Install MariaDB Database Server

sudo apt-get install mariadb-server mariadb-client

output:

root@vps:~# sudo apt-get install mariadb-server mariadb-client
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:

Commands to stop, start and enable MariaDB service to always start up when the server boots.

sudo systemctl stop mariadb.service

sudo systemctl start mariadb.service

sudo systemctl enable mariadb.service

Secure MariaDB server by creating a root password and disallowing remote root access.

sudo mysql_secure_installation

output:

sudo mysql_secure_installation
Set root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!

Restart MariaDB server

sudo systemctl restart mariadb.service

Install PHP 7.1 and Related Modules

sudo apt-get install software-properties-common

output:

root@vps:~# sudo apt-get install software-properties-common
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
python3-software-properties

We need to add php repository

sudo add-apt-repository ppa:ondrej/php

output:

root@vps:~# sudo add-apt-repository ppa:ondrej/php
Co-installable PHP versions: PHP 5.6, PHP 7.x and most requested extensions are included. Only Supported Versions of PHP (http://php.net/supported-versions.php) for Supported Ubuntu Releases (https://wiki.ubuntu.com/Releases) are provided. Don't ask for end-of-life PHP versions or Ubuntu release, they won't be provided.
Debian oldstable and stable packages are provided as well: https://deb.sury.org/#debian-dpa

Then update PHP 7.1

sudo apt update

output:

root@vps:~# sudo apt update
Hit:1 http://security.ubuntu.com/ubuntu bionic-security InRelease
Hit:2 http://ppa.launchpad.net/ondrej/php/ubuntu bionic InRelease            
Hit:3 http://us.archive.ubuntu.com/ubuntu bionic InRelease                        

Install PHP 7.1 and related modules..

sudo apt install php7.1 libapache2-mod-php7.1 php7.1-common php7.1-mbstring php7.1-xmlrpc php7.1-gd php7.1-xml php7.1-mysql php7.1-cli php7.1-mcrypt php7.1-zip php7.1-curl

output:

root@vps:~# sudo apt install php7.1 libapache2-mod-php7.1 php7.1-common php7.1-mbstring php7.1-xmlrpc php7.1-gd php7.1-xml php7.1-mysql php7.1-cli php7.1-mcrypt php7.1-zip php7.1-curl
Reading package lists... Done
Building dependency tree       
Reading state information... Done

Create WordPress Database

Login to MariaDB database server,

sudo mysql -u root -p

Then create a database called wpdb,

CREATE DATABASE wpdb;

output:

MariaDB [(none)]> CREATE DATABASE wpdb;
Query OK, 1 row affected (0.00 sec)

Create a database user called wpuser

CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'p@ss@!@#';

output:

MariaDB [(none)]> CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'p@ss@!@#';
Query OK, 0 rows affected (0.00 sec)

Then grant the user full access to the database.

GRANT ALL ON wpdb.* TO 'wpuser'@'localhost' IDENTIFIED BY 'p@ss@!@#' WITH GRANT OPTION;

output:

MariaDB [(none)]> GRANT ALL ON wpdb.* TO 'wpuser'@'localhost' IDENTIFIED BY 'p@ss@!@#';
Query OK, 0 rows affected (0.00 sec)

Save your changes and exit.

FLUSH PRIVILEGES;
EXIT;

Download WordPress Latest Release

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

output:

root@vps:/tmp# wget https://wordpress.org/latest.tar.gz
--2019-01-17 16:29:04--  https://wordpress.org/latest.tar.gz
Resolving wordpress.org (wordpress.org)... 198.143.164.252

Extract the tar file

tar -zxvf latest.tar.gz

output:

root@vps:/tmp# tar -zxvf latest.tar.gz
wordpress/  
wordpress/xmlrpc.php
wordpress/wp-blog-header.php
wordpress/readme.html

Move the wordpress file into /var/www/html

sudo mv wordpress /var/www/html/wordpress

output:

root@vps:/tmp# sudo mv wordpress /var/www/html/wordpress

Set the correct permissions for WordPress to function.

sudo chown -R www-data:www-data /var/www/html/wordpress/

sudo chmod -R 755 /var/www/html/wordpress/

output:

root@vps:/tmp# sudo chown -R www-data:www-data /var/www/html/wordpress/
root@vps:/tmp# sudo chmod -R 755 /var/www/html/wordpress/

Configure Apache2 HTTP Server

sudo vi /etc/apache2/sites-available/wordpress.conf

Then copy and paste the content below into the file and save it.

output:

<VirtualHost *:80>
 ServerAdmin admin@example.com
 DocumentRoot /var/www/html/wordpress/
 ServerName server.com
 ServerAlias vps.server.com
<Directory /var/www/html/wordpress/>
    Options +FollowSymlinks
    AllowOverride All
    Require all granted
</Directory>
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Note: Incase you dont have any domain name, set the ServerName value to the VPSes IP Address.

Enable the WordPress and Rewrite Module

sudo a2ensite wordpress.conf

sudo a2enmod rewrite

Restart Apache2

sudo systemctl restart apache2.service

CONFIGURE WORDPRESS

sudo mv /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php

output:

root@vps:/tmp# sudo mv /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php

Open the config file.

sudo vi /var/www/html/wordpress/wp-config.php

output:

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wpdb');
/** MySQL database username */
define('DB_USER', 'wpdbuser');
/** MySQL database password */
define('DB_PASSWORD', 'p@ss@!@#');

Open your browser and browse to your domain name to launch WordPress configuration wizard.

http://<your_ip>

This concludes the installation of Wordpress on a Ubuntu server.