Install WordPress on Ubuntu 16.04

Updated by Edward Angert

Contribute on GitHub

View Project | View File | Edit File

In this guide, you’ll learn to how to install WordPress on a Linode running Ubuntu 16.04. WordPress is a popular, dynamic content management system focused on blogs. WordPress can be deployed on a LAMP or LEMP stack, and features an extensive plugin framework and theme system that allows site owners and developers to use its simple, yet powerful publishing tools.

Install WordPress on Ubuntu 16.04

This guide is written for a non-root user. Commands that require elevated privileges are prefixed with sudo. If you’re not familiar with the sudo command, you can check our Users and Groups guide.

All configuration files should be edited with elevated privileges. Remember to include sudo before running your text editor.

Replace each instance of example.com in this guide with your site’s domain name.

Before You Begin

  • This guide assumes you have followed the Getting Started and Securing Your Server guides, and that your Linode’s hostname is set.

    To check your hostname run:

    1
    2
    hostname
    hostname -f
    

    The first command will output your short hostname; the second, your fully-qualified domain name (FQDN).

  • Configure a LAMP or LEMP web stack.

  • Make sure MySQL has a database set up for WordPress. If you do not have a WordPress database, create one:

    1. Log in to the MySQL command line as the root user:

      1
      mysql -u root -p
      
    2. Create the WordPress database:

      1
      CREATE DATABASE wordpress;
      
    3. Create a user and grant them privileges for the newly created wordpress database, replacing wpuser and password with the username and password you wish to use:

      1
      2
      CREATE USER 'wpuser' IDENTIFIED BY 'password';
      GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser';
      
    4. Exit MySQL:

      1
      quit
      

Install WordPress

  1. Create a directory called src under your website’s directory to store fresh copies of WordPress’s source files. In this guide, the home directory /var/www/html/example.com/ is used as an example. Navigate to that new directory:

    1
    2
    sudo mkdir /var/www/html/example.com/src/
    cd /var/www/html/example.com/src/
    
  2. Set your web server’s user, www-data, as the owner of your site’s home directory:

    1
    sudo chown -R www-data:www-data /var/www/html/example.com/
    
  3. Install the latest version of WordPress and extract it:

    1
    2
    sudo wget http://wordpress.org/latest.tar.gz
    sudo -u www-data tar -xvf latest.tar.gz
    
  4. Rename latest.tar.gz as wordpress followed by the date to store a backup of the original source files. This will be useful if you install new versions in the future and need to revert back to a previous release:

    1
    sudo mv latest.tar.gz wordpress-`date "+%Y-%m-%d"`.tar.gz
    
  5. Move the WordPress files to your public_html folder:

    1
    sudo mv wordpress/* ../public_html/
    
  6. Give your web server ownership of the public_html folder:

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

Configure WordPress

  1. Visit your domain in a web browser and follow the steps shown onscreen. Select your preferred language, review the information page and click the Let’s go! button. Enter the database credentials that were set when you installed MySQL:

    WordPress Installer

    WordPress will test the credentials and if authentication is successful, prompt you to Run the install.

    If Wordpress doesn’t display when you visit your domain, try adding /wp-admin to the end of the URL. This sometimes happens if you previously created an index file in your site’s home directory.

  2. Fill out the administration information and click Install WordPress.

    WordPress Administrative Information

    Click Log In, enter your credentials and proceed to the WordPress Dashboard.

  3. By default, WordPress will prompt you for FTP credentials when you install new themes or plugins. To bypass this, modify your wp-config.php file by adding the following lines:

    /var/www/html/example.com/public_html/wp-config.php
    1
    2
    /** Bypass FTP */
    define('FS_METHOD', 'direct');
    
  4. If you’re using Apache, run the following commands to ensure that mod_rewrite is enabled and then restart Apache to apply the changes:

    1
    2
    sudo a2enmod rewrite
    sudo systemctl restart apache2
    
  5. To make changes to your site in the future, you can access the Dashboard of your WordPress site from the web interface by adding /wp-admin to your site’s URL: example.com/wp-admin.

Congratulations! You have now successfully installed WordPress.

Permalink is a portmanteau of the words permanent and link. Permalinks are URLs that are automatically created for specific posts or pages in WordPress so that you or others can link to them. WordPress’s default settings assign post numbers as permalinks, meaning a link to a specific post would look like example.com/?p=42. To enforce a “prettier” permalink format, you’ll need to make a few adjustments to Apache or nginx.

For more information on permalinks, visit the WordPress guide on permalinks.

To configure permalink settings:

  1. Log in to the WordPress admin panel through your site’s /wp-admin URL.

  2. Mouseover Settings in the menu on the left of your screen, then click Permalinks:

    Wordpress Settings Permalinks

  3. Select your preferred permalink style or create your own Custom Structure and click Save Changes

  4. Configure your web server to allow WordPress to create the customized URLs using the appropriate section below.

Update Apache to allow individual sites to update the .htaccess file. To permit this, add the following options to the Directory section in your WordPress website’s VirtualHost code block:

/etc/apache2/sites-available/example.com.conf
1
2
3
4
5
    <Directory /var/www/html/example.com/public_html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

Restart Apache to enable the changes:

1
sudo systemctl restart apache2

Nginx needs to be directed to check whether the page each permalink refers to exists. By default, nginx assumes that it doesn’t, and returns a server-side 404. Update the following lines in the location / { block in your virtual host configuration:

/etc/nginx/sites-available/example.com
1
2
3
location / {
    index index.php index.html index.htm;
    try_files $uri $uri/ /index.php?$args;

More Information

You may wish to consult the following resources for additional information on this topic. While these are provided in the hope that they will be useful, please note that we cannot vouch for the accuracy or timeliness of externally hosted materials.

This guide is published under a CC BY-ND 4.0 license.