Read in 6 minutes

last updated 

How to install WordPress with Nginx on Ubuntu 18.04

WordPress is by far the most popular open source blogging and CMS platform worldwide. It is based on PHP and MySQL and packs a ton of features that can be extended with free and premium plugins and themes.

In this tutorial we will show you how to install WordPress on an Ubuntu 18.04 machine. It is a fairly straightforward process that takes less than ten minutes to complete.

We’ll be using a LEMP stack with Nginx as a web server, SSL certificate, the latest PHP 7.2 and MySQL/MariaDB as a database server.

Prerequisites

Make sure that you have met the following prerequisites before continuing with this tutorial:

  • You have a domain name pointing to your public server IP. In this tutorial we will use example.com.
  • You are logged in as a user with sudo privileges.
  • You have Nginx installed by following these instructions.
  • You have a SSL certificate installed for your domain. You can install a free Let’s Encrypt SSL certificate by following these instructions .

Update the package index and system packages to the latest versions:

sudo apt update
sudo apt upgrade

Creating MySQL database

WordPress uses MySQL database to store all its data. Our first step is to create a MySQL database, MySQL user account and grant access to the database.

If you already don’t have MySQL or MariaDB installed on your Ubuntu server you can install by following one of the instructions below:

Login to the MySQL shell by typing the following command and enter the password when prompted:

mysql -u root -p

From inside the mysql console, run the following SQL statements to create a database named wordpress, user named wordpressuser and to grant all necessary permissions to the user:

CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost' IDENTIFIED BY 'change-with-strong-password';
FLUSH PRIVILEGES;
EXIT;

After running the commands above, you will have a new MySQL database and user account, that will be used by your WordPress instance.

Installing PHP

PHP 7.2 which is the default PHP version in Ubuntu 18.04 is fully supported and recommended for WordPress.

To install PHP on your server you can either follow this tutorial or install all required PHP extensions with the following command:

sudo apt install php7.2-cli php7.2-fpm php7.2-mysql php7.2-json php7.2-opcache php7.2-mbstring php7.2-xml php7.2-gd php7.2-curl

We installed PHP-FPM because we will be using Nginx as a web server.

PHP-FPM service will automatically start after the installation process is complete.

Downloading Wordpress

Before downloading the Wordpress archive, first create a directory which will hold our WordPress files:

sudo mkdir -p /var/www/html/example.com

Our next step is to download the latest version of WordPress from the WordPress download page using the following wget command:

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

Once the download is completed extract the WordPress archive and move the entire contents into the domain’s document root directory:

tar xf latest.tar.gz
sudo mv /tmp/wordpress/* /var/www/html/example.com/

Finally we need to set the correct permissions so that the web server can have full access to the site’s files and directories.

Since both Nginx and PHP are running as www-data user and group, to set the correct permissions run the following command:

sudo chown -R www-data: /var/www/html/example.com

Configuring Nginx

By now, you should already have Nginx with SSL certificate installed on your system, if not check the prerequisites for this tutorial.

To create a new server block for our WordPress instance we will use the Nginx recipe from the official Nginx site.

Open your text editor and create the following file:

/etc/nginx/sites-available/example.com
# Redirect HTTP -> HTTPS
server {
    listen 80;
    server_name www.example.com example.com;

    include snippets/letsencrypt.conf;
    return 301 https://example.com$request_uri;
}

# Redirect WWW -> NON WWW
server {
    listen 443 ssl http2;
    server_name www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;

    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com;

    root /var/www/html/example.com;
    index index.php;

    # SSL parameters
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    # log files
    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

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

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

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }

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

}

Don’t forget to replace example.com with your Wordpress domain and set the correct path to the SSL certificate files. The snippets used in this configuration are created in this guide .

Enable the server block by creating a symbolic link from to the sites-enabled directory:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Before restarting the Nginx service make a test to be sure that there are no syntax errors:

sudo nginx -t

If there are no errors the output should look like this:

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

and we can restart Nginx by typing:

sudo systemctl restart nginx

Completing the WordPress Installation

Now that Wordpress is downloaded and the server configuration is complete, we can finish the installation through the web interface.

Open your browser, type your domain and a screen similar to the following will appear:

Select the language you would like to use and click on the Continue button.

Next, you will see the following information page, click on the Let's go! button.

On the next screen the setup wizard will ask you to enter your database connection details. Enter the MySQL user and database details you previously created.

Start the installation by clicking on the Run the Installation button.

On the next step you’ll need to enter a name for your WordPress site and choose a username (for security purposes do not enter “admin” ).

The installer will automatically generate a strong password for you. Do not forget to save this password. You can also set the password by yourself.

Enter your email address and select whether you want to discourage search engines from indexing the site (not recommended).

Click Install WordPress and once the installation is completed you will be taken to a page informing you that WordPress has been installed. To access your WordPress login form click on the Log in button.

Enter your username and password and click on the Log in button.

Once you log in, you will be redirected to the WordPress administration dashboard.

From here your can start customizing your WordPress installation by installing new themes and plugins.

Conclusion

Congratulations, you have successfully installed WordPress with Nginx on your Ubuntu 18.04 server. First Steps With WordPress is a good starting place to learn more about how to make your new WordPress site your own.

If you have questions feel free to leave a comment below.