Wordpress tutorial
Deploying wordpress
create an instance
- Follow the "Getting Started" instructions here to create an Ubuntu instance, keypair, security group, and to connect to your instance using SSH.
- Create an instance that fits your website's resource demand. For this example, we will use a small instance (ec1.small with 20GB). Depending on the number of concurrent visitors, this is sufficient for most small/medium websites.
- For your Security groups, the ports used by WordPress are 80 & 443 (http & https)
- Create a DNS A record to point your domain to your assigned IP, this might take some time and is needed later for SSL/HTTPS
setting up requirements
- update your instance
sudo apt update &&
sudo apt -y upgrade &&
sudo apt -y dist-upgrade &&
sudo apt -y autoremove &&
sudo apt -y autoclean &&
sudo snap refresh
- Download requirements
sudo apt install -y apache2 mysql-server php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip
- reboot your instance (in case of kernel changes)
sudo reboot
- ssh back into your instance
Create an SQL database
- set a root password for mysql
sudo mysql
replace "my_supersecure_pwd" with your preferred pasword
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'my_supersecure_pwd';
- exit mysql:
exit;
- run the secure installation procedure:
sudo mysql_secure_installation
- enter the root password you set before (excluding the '')
- Choose wether you want the 'VALIDATE PASSWORD COMPONENT' this is adviced, however for this tutorial we choose not to enable it
- Choose whether you want to keep or change the root password
- Choose 'Y' to remove the anonymous user
- Since you are connecting over SSH choose 'N' for disallowing remote root login
- Choose 'Y' for removing the test database
- And a final 'Y' to reload the privilege tables
- login to mysql:
mysql -u root -p
- create a database for your site, replacing 'MY_WEBSITE' with your preferred database name
CREATE DATABASE MY_WEBSITE DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
- create a separate mysql user & user password by replacing "MY_USER" and "MY_PWD"
CREATE USER 'MY_USER'@'%' IDENTIFIED WITH mysql_native_password BY 'MY_PWD';
- Grant your new user access to your database, make sure you replace the fields
GRANT ALL ON MY_WEBSITE.* TO 'MY_USER'@'%';
- apply privileges and exit mysql:
FLUSH PRIVILEGES;
exit;
Configure apache2
- enable your site in apache2
a2ensite 000-default
enable the rewrite module
sudo a2enmod rewrite
restart apache2
sudo systemctl restart apache2
download wordpress
- go to your temporary folder
cd /tmp
- download wordpress
wget https://wordpress.org/latest.tar.gz
- extract the package
tar xzvf latest.tar.gz
- create some files and folders to avoid permission issues later
touch /tmp/wordpress/.htaccess
cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php
mkdir /tmp/wordpress/wp-content/upgrade
- copy the wordpress folder to your webroot
sudo cp -a /tmp/wordpress/. /var/www/html
- change ownership of your webroot to the 'www-data' user and group
sudo chown -R -v www-data:www-data /var/www/html
- use the wordpress keygen to create some secure keys for your config file by opening the following page in your browser:
https://api.wordpress.org/secret-key/1.1/salt/
- copy these keys & edit the config file
sudo nano /var/www/html/wp-config.php
- Scroll down until you find the example keys. Remove the examples and copy your newly generated ones in their place.
- Now scroll up until you find the 'Database settings' section and fill in the variables you entered earlier in the mysql section of this tutorial
define( 'DB_NAME', 'MY_WEBSITE' );
/** Database username */
define( 'DB_USER', 'MY_USER' );
/** Database password */
define( 'DB_PASSWORD', 'MY_PWD' );
- Close the config file with 'ctrl+x' followed by 'y' and 'enter'
- remove the apache2 default index file
sudo rm /var/www/html/index.html
finish wordpress installation
- in your browser visit your URL and follow the installation steps
Get a certificate
- in your SSH session install certbot
sudo snap install --classic certbot
- make sure certbot can work outside it's snap
sudo ln -s /snap/bin/certbot /usr/bin/certbot
- get a certificate by running this command and following the steps
sudo certbot --apache
Finished!
Your wordpress site is now fully operational and can be reached at https://yourdomain