Programster's Blog

Tutorials focusing on Linux, programming, and open-source

Ubuntu 16.04 - Manually Deploy WordPress

This tutorial is for manually deploying wordpress on an Ubuntu 16.04 server. Alternatively, you could deploy wordpress through docker.

Install mysql

sudo apt-get install mysql-server -y

Install Apache and PHP (And Other Packages Wordpress Wants)

sudo apt-get install -y \
  apache2 libapache2-mod-php7.0 php7.0-cli \
  php7.0-mysql php7.0-gd php7.0-gd php7.0-zip

Set Up The Database

mysql -u root -p
CREATE DATABASE `wordpress`;
GRANT ALL ON `wordpress`.* to wordpress_user identified by 'YOUR PASSWORD HERE';

Download wordpress

wget https://wordpress.org/latest.zip

Optional - Create Wordpress SSH User

I use SSH to update my wordpress instances, and wish to use a non-sudo user to do this. Thus I will create a wordpress user at this point.

sudo adduser wordpress

Install Wordpress

sudo apt-get install unzip -y
unzip latest.zip
sudo mkdir -p /var/www/wordpress
sudo mv wordpress /var/www/wordpress/public_html
sudo chown -R wordpress:www-data -R /var/www/wordpress
sudo chmod 750 -R /var/www/wordpress

Set Umask and Add to Group

Lets set the umask and add the www-data user to the wordpress group, so that if the wordpress user creates files, the apache server can still read them.

sudo adduser www-data wordpress
cd /var/www/wordpress
umask 027

Using umask of 027 means that new files will have 740 (-rwxr-----) permissions, but new directories will have 750 (-rwxr-x---).

Update Apache

sudo vim /etc/apache2/sites-available/000-default.conf

Replace it with:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/wordpress/public_html
    <Directory /var/www/wordpress/public_html/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        allow from all
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

This assumes this webserver is dedicated to just serving up the wordpress site. E.g. a VPS.

Restart apache for the changes to take effect

sudo service apache2 restart

Optional - Enable URL Rewrite

Your more than likely to want this feature. If you're unsure, I would err on the side of enabling it.

sudo a2enmod rewrite
sudo service apache2 restart

Web Installation

Now go to your servers IP or hostname and perform the web based installation steps, before then going through the tutorial on securing wordpress.

Last updated: 23rd October 2022
First published: 16th August 2018