Setting up a wordpress blog with SSL and custom domain for $6 per month

 In Development

When I started this blog I wanted to host it on Azure but it would have cost roughly $100/month with my requirements of SSL and custom domain. There are some nice benefits of Azure but I realised I needed a blog and WordPress is the king of blogs.

I started my blog on wordpress.com just so I could start writing before the enthusiasm fizzled out. This is really awesome for free blogs but the costs quickly add up if you want to add a custom domain, SSL and google analytics. All of this requires the business package and costs $25/month (at time of writing). You are also prevented from installing many themes and plugins here. I did some searching for a cheaper host and settled on DigitalOcean .

Create the WordPress droplet

Digital Ocean is a container based host. They call the containers droplets. To create your cheap WordPress site go to DigitalOcean and sign up. You get a month free with that link. After signing up select “Create Droplet”. In the page that opens click the “One Click Apps” tab.

Digital Ocean one click selection

 

Scroll down and select the WordPress 4.7 on 16.04

Digital Ocean wordpress application selection

 

Select the smallest size droplet. This should be fine as you start.

Digital Ocean price selection

 

I recommend getting a backup of your droplet. This is a weekly backup for $1/month. Pretty good deal I’d say.

Digital Ocean backup selection

 

That’s it! Just wait for the droplet to spin up. You’ll get an IP address and username password in an email. The IP is also available on your Droplets page.

Setup the WordPress blog

On windows you’ll have to download putty to log in to your new droplet. Visit http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html and get the full msi installer.

Putty msi file

Use the IP, userame and password to log in to the new droplet using putty.



<pre class="code-pre "><code>ssh root@192.168.1.1</code></pre>

Next visit your wordpress site in your browser – http://192.168.1.1 – but replace the IP there with the one for your droplet and follow all the prompts to install WordPress. Don’t use “admin” as the main account.

Setup some security

Next you should set up some security on the droplet. run the following to display your passwords. The mysql secure installation script will ask for the root password later.


cat /root/.digitalocean_password

Then run

 mysql_secure_installation 

and follow the prompts. You probably want to say yes to everything.

Now make sure mysql is started

 service mysql start 

Setup your domain

If you have a custom domain then digital ocean can act as a nameserver for you for free. It’s best to configure digital ocean first before changing nameservers on the domain. If this is a new domain then add the following records under networking.

Create TXT records for


www.mycustomdomain.com VALUE www.mycustomdomain.com

*.mycustomdomain.com VALUE www.mycustomdomain.com

mycustomdomain.com VALUE www.mycustomdomain.com

and A records for


www.mycustomdomain.com VALUE 192.168.116.115

*.mycustomdomain.com VALUE 192.168.116.115

mycustomdomain.com VALUE 192.168.116.115

Now change the nameservers for your domain to point to digital oceans name servers.

Set up SSL

You can get free SSL with Let’s Encrypt. First get cert-bot.


sudo wget https://dl.eff.org/certbot-auto

then make it executable.

sudo chmod a+x /usr/local/sbin/certbot-auto

Then run for the domains you would like to add certs for.

 certbot-auto --apache -d mycustomdomain.com -d www.mycustodomain.com 

Using a cron job to renew your certs automatically

Open your crontab file

sudo crontab -e

and add the following line to the end of the file but replace XX with a number between 0 and 59

 XX 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log 

Start Writing

That’s it! You’re done. A wordpress blog with SSL and custom domain for $6.

Recent Posts
Email Me!

Hey, get in touch and I'll get back to you asap

Not readable? Change text. captcha txt
Showing new fields on html page