DigitalOcean made me nervous. I left the site 3 times before staying long enough to challenge my code dyslexia. It’s hosting for developers. That means it’s not for me, right? Damn that’s cheap though, and I’m just geek enough to know the benefits of SSD and the Cloud.

A turning point. The pain of geriatric shared hosted finally outweighed my insecurities about platforms for developers. I hunkered down and began to read everything I could about DigitalOcean (DO). Looking back now: the speed, the reliability. Just a couple of hours effort to setup. What the hell was I so afraid about?

For $5 a month you get a zippy virtual private server with 512MB of RAM (up from 256MB a couple of years back), 1 core processor, a 20GB SSD disk and a 1TB transfer – more than ample for most webmasters. With shared hosting you’re lucky if you get 64-128MB of RAM and you’re probably paying about $7 a month. And when your traffic goes up, so will your costs. More money for the same shi*ty service.

DO’s product is the ‘Droplet’ which is the branded name they use for their virtual private servers (VPS). You might have seen these advertised with your shared hosters. Expensive. Well, they’re hoping that you’ll steer clear of those ‘developer-only’ competitors so they can charge the docile mainstream an arm and a leg for affording them the effort of thinking.

But not for long. The playing field has changed in just the last couple of years.  Big time. And it’s not slowing down. The General Motors’ of the hosting world can’t move fast enough. If you’re still paying monthly for shared hosting, you’re paying a premium for poor performance. If shared hosting is the foundation of your business, you’re basically showing up to the construction site with a Nerf hammer.

Now, you might think that paying a premium for ‘thinking’ is justified. After all, not all webmasters are web developers. But ‘thinking’ three years ago, and ‘thinking’ today are worlds apart. Developer in the DO sense no longer means you have far too many acronyms in your LinkedIn profile. It just means that you are able to suspend your – previously correct – assumptions about what a developer is, for long enough to realise DO is a not only a good deal, but accessible to all. This tutorial from a code dummy is here to hopefully prove that.

Oh, and a little perspective. DO are now the second largest provider of hosting in the world. And basically out of nowhere.

Why DigitalOcean?

Until recently, shared hosting was the default option for most. It wasn’t fast, but it was affordable, there was no maintenance and you got a user-friendly control panel with cPanel. Unfortunately, over time the slowness becomes almost too much to bear as you install more complex themes/functions on your site, traffic increases, and other folks on your ‘shared’ server drag you back. To make matters worse, you get bouts of downtime. But that’s one you only realise if you’re lucky. (JetPack has a facility to email you when your site is offline. I’m glad I did this, it was one more reason to finally make the move.) Shared host customers are the bottom of the pan for hosting companies (individually, at least) and the customer experience often reflects that. It’s not the foundation I wanted to support my business as it grows. My bounce rate was sky high, I was embarrassed to use my own site, I was losing money, and then I found out that my search engine rankings were about go down the chute unless I sped things up. GREAT. I spend most hours of the week bootstrapping my business and I was skimping. It was an insult to myself, and it was  finally time for a hard change. Cheap and fast WordPress hosting felt like an oxymoron, but I was starting to believe.

I read the DO sentiments online:

“Now the same websites run on DigitalOcean but here is the catch: my websites generate ~40k monthly visitors and with this traffic out of 512 MB of RAM(490 MB more exactly) only about 55% is used on average. So I still have a lot of RAM unused. Meaning that this small droplet can handle much more traffic, which is quite surprising! Then there’s the CPU which by the way has never been working more than 30% in fact on average is around 3-5%.” – source

“Digital Ocean are awesome for the price. One of those little 512MB RAM droplets can power a site with a reasonable amount of traffic quite easily.” – source

“Yes, if you run a standard LAMP stack the 512MB droplet is useless. If you use Nginx, however, that small droplet can take a hit of up to 50,000 page views per day.” [Don’t worry, you don’t need to know what LAMP and Nginx are for this tutorial.] – source

Seriously? An SSD VPS for $5 and I can leave shared hosting in the dust? Now I was all in. 40 Chrome Tabs in. My head was hurting. “LEMP is faster and more resourceful than LAMP” (particularly on a $5 droplet), “Introduction to Nginx and LEMP on Ubuntu 14.04”, “How To Install WordPress with Nginx on Ubuntu 14.04”, “Memcache”, “FastCGI”, “Swap”. Time out, time out! Eventually, I came across alternate routes through the likes of EasyEngine which does 90% of the work in 2 lines of code but, but, but… it was all still too much.

Just a quick note here, if you’re a web developer/ budding web developer, I encourage you to sink in the hours to learn all this stuff. I love it, it’s fascinating. But it’s not my core business, and I unfortunately don’t have the time. I do, however, need fast WordPress hosting.

3 days later, and a fair few extra lost hours of sleep, I have a shiny new engine powering my website, and it’s fast. Damn fast. Condensed down, the hands-on tasks outlined in this article took just an hour or two – minus extraneous periods spent Googling and waiting for stuff to upload/download. (And possibly in your case, waiting for nameservers to propagate, unless you follow my advice and get a free account with Cloudflare for instant DNS propagation.) So the caveat before we start is that you could probably do this in an hour or two, but that doesn’t factor in making a brew while you download a WP backup and such. 🙂

I was able to speed up my site by over 800% (see benchmarks later), which sounds crazy but I did go from nothing to essentially everything. I decided to make this tutorial as I went a long, hacking together various tutorials and forcing accountability on myself to backtrack on mistakes and understand exactly what was going on at every step. Never know, you might find it useful too.

How This Works

Personally, I’m a little paranoid about the whole idea of migrating a website. I don’t trust backups. (Perhaps a flashback to the days of a few too many corrupted saves in LMA Manager.) So I used a spare domain to migrate my original site to, before formatting the original site, and then migrating back from the spare. You don’t have to do it this way. You could do the first migration onto a sub-domain at your original domain, but be aware of DNS propagation times. Alternatively, you might just backup and do it the once. Your call. (If you have poor impulse control for domain names, like me, then you might have a redundant stash of spares to finally put into use!)

Either way, I’ve updated the tutorial I wrote for myself to include references to migration-1 and migration-2.

Migration 1: Migrate from Original Website (from backup) > Spare/Sub-domain

Migration 2: Migrate back from Spare/Sub-domain > Original (from clean install)

It should all make more sense as you read through, but it effectively means we always have a usable version of our website online. This is both for security against backup corruptions and customer convenience/sales.

Setup DigitalOcean

Create Droplet #1

We’ll start by creating an account on DigitalOcean. If you use my DigitalOcean affiliate link, you’ll receive $10 in credit – or two $5 droplets to use in this tutorial.

Select Create Droplet

  • Choose a Droplet Hostname

For example, ‘Test’ or ‘Mydomain.com’.

  • Select $5 server

Or more if you have a large site

  • Select a region

General rule of thumb – be closest to where most of your customers are. But if you’re routing your website through a global network with Cloudflare (Free) and MaxCDN (paid) it doesn’t matter so much.
http://3dmybusiness.com/wp-content/uploads/2015/07/D0-04.jpg

  • Choose an operating system (Image)

We’ll select Ubuntu 14.04 (y. 2014), x64 (required for ServerPilot which we’ll get onto shortly.

  • Available Settings

The only box to consider here is ‘Backups’ which would be wise if you’re happy to pay the extra bean. ($1 / 20%.)

  • SSH

I opted to waive the SSH to keep things simple. Like DO, I will recommend SSH, but if you have a secure password that’s adequate too. (OSX, Windows instructions.) If you opted for password only, you’ll receive an email with your droplet’s IP and password.

  • Create Droplet

With the droplet created you’ll be ready to add your first domain to DO. This is decision time. If you’d like to take the safest route with your migration, this will be testdomain.com or test.maindomain.com. If it’s your second time, or you’d rather do it the once on your original site, it’s maindomain.com.

  • Click DNS in the Top Nav-bar.
  • Enter Your Domain (migration-1/-2)

  • Dropdown and Select Droplet (IP address will Automagically be Assigned)
  • Click ‘Create Record’ Button

Change Default Password on Droplet

Before we move full steam ahead, you’ll want to establish access to your new shiny SSD server. For Windows users you’ll need a program called PuTTY, if you’re on Mac you’ll most probably be able to log in to your terminal. Click on the link if you’re using a Mac. Windows users can read on.

Now this might look a little scary but don’t worry, we’ll be just doing a couple of things that will take a hot minute. No big deal.

  • Download PuTTY.exe
  • Fire her up
  • Find your IP address on your Droplets overview page (Top nav-bar on website > Droplets) or alternatively you can open the email.
  • Copy/paste the IP address into the top field next to Port. Port should be 22. Connection type should be SSH.

  • Hit Open.

Now we’re into the Matrix. Sort of. The PuTTY window should state: “Login as:”

Simply type:

root

And then open the email, copy the PW, left click on PuTTY to select it, and right click once to paste. The reason this is in bold is because you won’t see asterisks representing the PW. You won’t see anything. Your keyboard might be broken but it’s unlikely. More likely, the PW has been pasted and you can simply hit ‘ENTER’. You should see a prompt to change your PW.

Again, you’ll want to write the new PW offline, in Notepad for example, copy it and then right click in the PuTTY window. Enter. Hopefully you’re seeing something similar to this:

All done! Simply close down PuTTY and we can now make a start on the next section with the awesome ServerPilot.

Setup ServerPilot (Free)

Next here we’re setting up ServerPilot. (This is an affiliate link, though your account will stay free unless you would like advanced features like analytics and multiple users.)

Here’s what you need to know about ServerPilot:

  • It’s Free

Though there are premium accounts available.

  • It’s Fast

Both physically and technically. You save yourself lines and lines of code, WP installing is a breeze and crucially, the platform employs LEMP (Linux, (e)Nginx, MySQL, and PHP) out of the box which is, very simply, a faster, minimal alternative to Apache which is comparatively bloated. A majority of the world’s 1000 top websites now use Nginx as web-server of choice.

What’s more, however, is that ServerPilot uses Nginx as a reverse proxy so Apache can still be employed – real important if we’re migrating our WP site which probably runs on Apache still. (If you plan on exporting/importing MySQL but we’ll get to that.) There it is, the best of both worlds!

Other benefits include:

  • Easy Setup

For WP and such.

  • Visual Control panel

Simple but if you’re used to having cPanel then this wins over having no graphical interface. As their website says, “host multiple sites on a server, manage databases, change PHP versions, deploy SSL, and more.”

  • Auto Updates

All the incremental bug-fixes and feature updates you’d have to do manually without ServerPilot are taken off your hands. This is a biggy if you want more time on your business.

Install Dependencies on New Droplet

Once we’ve signed into ServerPilot, here’s what we’re going to do:

  • Click on Servers in the left-hand nav bar.
  • Click the ‘Connect Server’ button over on the right-hand side.
  • Your server name can be anything

I recommend using the same name as for your droplet, and enter a PW.

  • The next area will present you with a piece of code to copy/paste in PuTTY.

Just one more time, honestly. It’s how ServerPilot installs all of its packages on your server. So simply login to PuTTY again with your IP and new PW, copy the code, and right click. You see the installations going through. Bring on WordPress!

Install WordPress on New Droplet

Really simple this one:

  • Click Apps in the left-hand nav menu.
  • Click Create App button on the right-hand side.
  • Enter the App Name in lower case only

‘wordpress’, ‘website’, ‘test’ etc.

  • Domain name
  • The latest version of PHP unless you have reasons for alternate.
  • Then select your server in the drop-down.
  • You’ll now see your app listed under the Apps tab.

Create a Database

At this stage we have a couple things to do:

Extract to a new folder on your desktop named ‘migration-1’ or ‘migration-2’, respectively.

Ensure your original site is currently running the latest version of WP, which you are downloading for the migration.

  • Preparing the Database

Click through on your new app and we’ll look for ‘Databases’ along the top navigation bar. Give it a click. You’ll be given the option now to create a new MySQL database. But don’t just yet! We’re going to minimize this page and come back to it later. That’s because we’ll be initiating a backup download very shortly and will later open up the wp-config file from our original site to bring up this information for copy/pasting. Hold that result.

Start Backups of Original Site

Extract these files to your ‘migration-1’ folder to minimize errors when uploading to the server later.

You don’t need to download every single folder on your original host but there are several elements you’ll want to be sure you have. (Remember, the double migration method means there will always be an ‘original’ online before we have to start formatting hard drives, so don’t freak out about this. 🙂

  • Backup #1 – wp-contents

Open up the cPanel File Manager and locate ‘wp-content’ within public_HTML. We’re going to right click the folder, select Compress. Once done, right-click and download to your ‘migration-1’ folder. (Note: unfortunately FileZilla doesn’t support compression.)

This folder includes your images, so might take a while depending on the size of your site!

  • Backup #2 – Export posts, pages, comments, custom fields, categories, and tags

We’re now going to download a generated XML file which, as WP says, contains your posts, pages, comments, custom fields, categories, and tags.

Log in to WP-admin on your original website, and click on the Tools > Export tabs from the left-hand side. Select ‘All Content’ and every file will be included. There might also be options for exporting plugin-specific content.

Click ‘Download Export File’ and place into your ‘migration-1’ folder.

Open up your new WP-Admin. We’re now going to change the ‘admin’ user account to our name from the original website. Click on the profile, scroll down to nickname and enter the name you’d like to use for authoring articles.

Once saved, ensure the ‘Display name publicly as’ field displays your name, and ensure role is set as ‘Admin’ rather than ‘Subscriber’ by clicking on ‘Users’ on the left nav bar.

  • Backup #3 – MySQL (Optional)

Caveat here, this is optional and I didn’t need to import this for my site, in the end. I did, however, copy/paste the details over from my existing wp-config which I will show you how to do a little later. (ServerPilot have full instructions for migrating MySQL here but it’s not required.)

I recommend you download it anyway but for most people, migrating theme settings and images will be more important than migrating users and permissions. (The main job of a MySQL database). Personally, I just created a new user with my name and assigned imported content (articles and posts) to my new user account.

Here’s how to backup your MySQL database:

  1. cPanel
  2. Backup Wizard
  3. MySQL Databases
  4. You’ll be able to download your MySQL database in *.sql.gz format. Save it to your ‘migration-1’ folder.

You’ll be able to import the database through installing PHPMYAdmin onto your new server (this program is in cPanel, we have to install it manually here) a little later. I’ll give you a prompt and instructions when that time comes.

While You’re Waiting…

While we’re downloading the backups we’re going to do a couple of things. First, the latest version of WP has likely downloaded at this point so we’ll get that uploaded. Then we’ll setup up Cloudflare.

  • Upload Wordpress to New Server

Extract the .ZIP inside your ‘migration-1’ folder, so the ‘wordpress’ folder contents are ready to drag-and-drop.

One thing to do before we begin uploading and that’s to edit the wp-config-sample file that comes default, which is in the ‘wordpress’ folder of the installation files we downloaded. Open the file in your favourite text editor. (I recommend Sublime Text 2.) For the time being, just minimize that window while we go and grab the original to copy/paste from.

Now open your FTP client of choice to access your original website. I use FileZilla so that’s what you’ll see in the instructions below:

  • Access ‘public_HTML’
  • Locate ‘wp-config.php’ and download to ‘migration-1’ folder
  • Open it locally within your text editor

Take note of the details highlighted in the image below. We’re going to transfer that information from the original into the sample, where it says:

  • ‘database_name_here’
  • ‘username_here’
  • ‘password_here’

With this information, we’re now going to open the ServerPilot tab we minimized earlier, and finish creating the database. Copy/paste DB_NAME, DB_USER and DB_PASSWORD from wp-config to create a duplicate database in ServerPilot.

We’ll take a second to reset the default PW which is created for us in ServerPilot. This is the PW we’ll use with FileZilla shortly. Simply click on the profile beneath ‘System Users’ and make the change.

Finally, and this is important, we’re going to remove ‘sample’ from the name of the document, before uploading.

Then open FileZilla, and click:

  • File
  • Site Manager
  • For Host, copy/paste your IP address, leave the port blank and set the protocol as SFTP.
  • Leave login type as Normal and then enter your username and password from ServerPilot.
  • Click Connect!

If everything goes to plan, you’ll see your server waiting and ready. Alls to do now is drag and drop the new WP installation files with the ‘wordpress’ folder, over into:

  • serverpilot/apps/APPNAME/public

While the files are transferring, you’ll get a prompt asking whether you want to overwrite the ‘index.php’ file. Choose OK.

Cloudflare Setup (Free)

Now while we’re still waiting for the backup(s) to download, we’re going to setup a free Cloudflare account for a boost in speed as well as extra website security.

This isn’t strictly needed for the first migration (migration-1) but it is useful to build the muscle memory so you can shoot through it for the main site later. (Migration-2.)

This article will be long so I won’t extol the benefits of Cloudflare. You’re essentially getting a boost in speed and security for free, as well as an intuitive, beginner-friendly UI. (Primer.)

Cloudflare will scan for its DNS records. While it’s going through the process you’ll be able to watch a brief video introducing what Cloudflare is about.

  • Then you’ll be asked to confirm the records.

This is where you want to ensure you create an A (address) record pointing to your DO Droplet’s IP address. (See image below.)

Go through to the next screen, select your package (free) and finally, Cloudflare will show you the nameservers to point to. Don’t close this window because we’ll come back to it shortly. You’ll want to sign into your registrar’s website account and change the default nameservers with that of Cloudflare’s. (Instructions for changing nameservers on common registrars include Hostgator, Namecheap and GoDaddy, but Cloudflare may include instructions on the ‘Update Nameservers’ page – my domain is registered with Enom and was listed, for example, although the image below is from Namecheap.) Delete all the domain name servers set by your registrar, and enter the addresses which Cloudflare presented you with. Save!

Back at Cloudflare, you can now hit continue and click on the ‘Recheck Nameservers’ button to confirm that your website is now active on Cloudflare. Give it a moment and the page should read ‘Status: Active.’ Woo!

Zero Downtime During Migration 2 (Optional)

For zero downtime, you’ll want to create an ‘advanced’ forwarding option in Cloudflare. (It’s easy to do.) We’ll go to our new Cloudflare account

As per the instructions linked above, by taking www.mainsite.com and having it redirect to www.sparesite.com (rather than www.sparesite.com/*), we create a blanket redirect. Whether people visit www.mainsite.com or www.mainsite.com/this-is-a-page/, they will find themselves on www.sparesite.com. Now, this isn’t perfectly ideal of course, because they might be taken from an internal page ‘back’ to your homepage, but as a temporary measure, it’s quick and painless, and better than being offline. Finally, we might install a notification plugin like WPFront on the spare site, to orient people for the brief time we’re migrating back to the main site. (“Howdy! You’ve found your way to the homepage. Can I recommend xyz?”)

Import MySQL (Optional)

If you decided earlier that you wanted to export/import your original MySQL database, now is the time to start importing it onto the new server.

Follow these instructions from ServerPilot to find out how to install PHPMYAdmin and begin the import – https://serverpilot.io/community/articles/install-phpmyadmin.html

You’ll want to look for the *.sql.gz file within your ‘migration-1’ folder.

Is it Time to Delete Your Original Website? (Second Migration Only)

Although the installer will open, you’ll now want to delete the original WP site if you’re working with your main domain this time around. When you’re ready, head into your cPanel (or alternative), down to ‘Softaculous’. Give it a click. Click ‘Wordpress’. Scroll down to current installations, and click the red cross next to the original installation.

Install WordPress (Migration 1 and 2)

Once backup #1 (wp-contents) has uploaded to your server, we’re ready to start uploading backup #2 (export posts, pages, comments etc).

So for that, we’re going to fire up our site, whereby we should be greeted with the good ol’ WP installation interface, you’re going strong!

Go through the steps:

  • Select your language
  • Welcome

Enter your details here. I recommend using a Gmail account here, avoid using ‘admin’ if you can help it and a PW that’s rated at at least Medium, ideally strong. I was surprised when I started using the Jetpack plugin and discovered that within 2 days there had been 20 malicious attempts to login. And my site is tiny. It might just be a bot rather than a person, but that’s even more reason to step up security a couple of notches.

  • Success!

Once installed, login to your new shiny install of WP! 🙂 Now login and we’ll get things set up nice a quick…

If you don’t see the WP install process on your website’s homepage, don’t panic Mr Mannering! Simple delete your history (ctrl+shift+delete) and reboot the browser, or enter the relevant URL into another browser.

Delete Default Content

Once inside, we’re just going to delete the Hello World post under ‘Posts’, and the Sample Page under ‘Page’ by clicking ‘bin’ next to them. Delete the comment as well, under ‘Comments’.

Uploading ‘wp-content’

Remember that wp-content folder we downloaded earlier? Well, now we’re going to pick and choose what to upload to the new shiny VPS:

  • Install Original Theme

Fire up FileZilla, and unzip your main theme folder from the backup

public_HTML > wp-content > themes

Copy it over into your Droplet’s server.

apps > ‘APPNAME’ > public > wp-content > themes

If you use a child theme, you’ll want to copy that over. And again, check the ‘Failed transfers’ tab at the bottom and requeue any files through the right-click menu.

Open Appearance > Themes and install your theme. (Don’t worry if it doesn’t look like the original at this point, later on we’re going to export/import content/settings from the original site.)

2. Install Plugins

apps > ‘APPNAME’ > public > wp-content > plugins

If you didn’t opt for the zero down time option earlier, you might choose to download a construction plugin like Easy Pie Maintenance Mode, and after activating all the plugins, switching it on.

Now we’re going to transfer our plugins in the same style as the theme. One quick tip that comes from my experience. If you’re anything like me, you can get in the bad habit of disabling plugins without actually deleting the things. (Seriously though, there should an option to disable or disable and delete, without having to reload the page!) If you can relate, a step I took was to open my original WP-admin > plugins to confirm which ones were active, and which were disabled. (Click on the ‘Active’ tab.) This way, when you’re selecting the plugins from your backup to unzip and upload to the new server, you can leave the redundant plugins behind for good. (If you have multiple browsers, open another so you don’t have to sign out of your new WP – Chrome + Firefox in my case. We’re going to need to come back again so this is recommended.) I created a folder on my desktop called ‘Plugins’, opened up the zip, selected the necessary plugins (hold CTRL and click), and dragged them to the folder. For your information, you don’t need to copy over Akismet.

Once uploaded – and it might take a while – click on the ‘Bulk actions’ dropdown at the top of the list, select ‘Activate’, tick the top box next to ‘Plugin’ to tick all boxes, and click ‘Apply’. Brace yourself for an array of notifications and dismiss/action them accordingly.

  • Identify other files/folders you’d like on the new server

Then we’re going to decide which other relevant files to drag into the new server via FileZilla in wp-content – i.e Uploads for media, perhaps plugin configs and the odd file hanging around in the original wp-content which you know you’ll be using on the new site. You don’t need to transfer all files.

Images can take forever to upload depending on the size of your site, so you might want to skip them for the first migration, as you have them in the backup. However, if you want to be sure everything has backed up smoothly, be sure to upload all images during the first migration.

  • Tools > Import (Both migrations)

Go to Tools > Import and select Wordpress from the list of platforms, then install the importer plugin.

Activate > Choose File > Upload file and import > Wait for the file to upload

You’ll be asked to import the author(s) from the original site by default, or have the opportunity to reassign content to a new author. You’ll want to drop down the menu and select the user you’ve just created to make sure things go smoothly.

Make sure you check the ‘Download and import file attachments’ box, hit submit and wait a few moments.

If you get an error message, it’s possible that you’ve either surpassed CloudFlare’s default 100mb limit on file uploads, or the XML needs to be broken down. As annoying as it is, the only option is to export individual category XMLs from the original WP site, as opposed to selecting the ‘All Content’ option.

Final Setup

Check out the new site now, it should look pretty much identical to the original. There may be a few settings to set manually, such as selecting the original menu/creating a new menu via ‘Appearance > Menus’, widget placement/content, frontend Quick CSS (as some themes include within WP-Admin – a child theme might resolve this issue), and some plugin customization. Many modern themes also come with their own tab on the WP-Admin nav bar with options to export/import theme settings which is super helpful.

For me personally, I use a plugin called Revolution Slider, so I had to manually Export and Import my slides into the new site via a function the developers has designed into the plugin.

You’ll also want to swim through the Settings tab and replicate your settings from the original – adding your tagline, setting permalink structure, setting the frontpage via Settings > Reading, as well as other aspects that differ from the default.

The best thing about this approach, though, (although it takes a while longer) is that you still have the original for direct reference. Who cares if something is broken? Open up both sites and compare, adding the final touches. Also, the second time you go through the migration process (the important time), you’ll have the muscle memory to breeze through it like a hot potato ninja.

All this effort might seem pointless given that the test site won’t exist this time tomorrow, but it’s easy to forget that we’ll be deleting the main site shortly (reference to migration-1), and will need an exact replica when migrating back to our main domain. This work makes life easier later.

If all works out, congratulations! I invite you to make yourself a well-earned brew! You’re at one of two points – you have just built a duplicate of your main site, or you’ve just transferred it back to your main site. If it’s the former, head back to the beginning of this tutorial to create your second droplet for the main site. (Pay attention to the RED signals.) If it was your second go, you can bask in all your hard work by checking our your new speedy website, and then delete the ‘Test’ droplet when you feel ready so that you’re not eventually charged for it after the trial ends.

Regardless, I’d recommend taking a break. But not for long, because there’s still work to be done. 🙂 Read on below to find out how to wring more speed from your site, as well as how to setup email now that Cloudflare has kicked out your MX Records. (They’re needed for email through your domain. Doh!)

Final Speed Boosts

Compared to shared hosting, your website should feel like completely awesome right now. But speed becomes an addiction, hence why I carried on going. Below, you’ll see some of the other implementations I looked into when milliseconds started to count for something.

WP Rocket (Paid)

I only recently heard about WP Rocket (not an affiliate link) after using W3 Total Cache, which you might have heard of. It’s basically a replacement, but a rocket-charged version as the name suggests.

There’s a lot of conflicting information out there as to the best performing caching plugin to use, but data speaks louder than words, and this wordpress caching plugin benchmark test from Swedish Marketer, Philip Blomsterberg, sealed the deal on WP Rocket for me. I coughed up $39 for the plugin. (Yes, it is a paid plugin.) Performance for me was key, but I also like minimalism, and that’s another area where it shines. W3 Total Cache was always a little bit overwhelming to me.

Another reason to invest in WP Rocket is their transparency. Check out the company’s public roadmap on Trello. At the time of writing they were actively working on a new Image Optimization service after the community had voted with their clicks. (There was even a beta opt-in page at the time of writing.)

WP Smush It (Free)

Speaking of image optimisation we come to Smush It – which does exactly that. WP speed manics swear by it. Oh, and it’s free. (Paid options are available.) It further shrinks your images once uploaded to WP – it’s amazing. Note that this doesn’t forego saving your images locally for the web. (Photoshop > Save for web or equiv.)

MaxCDN (Paid)

Finally here, there is a service called MaxCDN – CDN standing for Content Delivery Network. Being a CDN, my immediate first question was what differentiated it from the free CloudFlare CDN to justify the cost? As it turns out, there may be benefits to having both.

Cloudflare began life in the security business, but it fast realized that beefy security slows your website down, and when it comes down to it, it’s not a sacrifice most people would take – given that their customers probably wouldn’t hang around on a slow website. So they pivoted the company into a CDN, and a decent one at that. But it’s not their core business. Content delivery is MaxCDN’s core business. As a result it has built more infrastructure around the world to deliver content, making the service faster, meaning your website is generally a bit faster, no matter where your customers are searching from in the world.

Ultimately, it’s something you’ve got to ask for yourself whether you need it. After every other optimization we’ve learnt here, you’re not going to make any big jumps. But if the price is right, and you’re looking for every speed advantage. Then this is going to be the next best step for your website. You can start a free 30 day trial with the service, at this time of writing, for the 100gb package. (These are not affiliate links as I have not yet invested in the service. I’m going to get a feel for my new website before plumping for any more paid services.)

One more piece of advice here is to ensure you have a plugin installed on your website that can plug into it. W3 Total Cache is probably the most popular plugin which interfaces with the service, but WP Rocket above is a premium option.

Speed Test

I put my homepage into Pingdom to give you an idea of what you can achieve. I was getting anywhere from 6 to 8 seconds in Pingdom before the update. Your improvements will vary of course, but that gives you an idea of where I’ve come from and what you might expect. Loading times will fluctuate depending on where the page is accessed from, but I can definitely see more consistency now that I’m using a CDN. It still early days and I’ll continue to optimize – it’s quite fun once you get into it!

Pingdom

Email Setup

This isn’t speed related, of course, but it’s something that will have to be setup because Cloudflare knocks out your email. I’m going to assume that you’re jumping on board with a free account at Cloudflare so the instructions will reflect that.

As you’d expect, you have several options here. I’m going to keep this simple and introduce just two – a paid and unpaid option.

Google Apps (Paid)

Until the end of 2012, you could setup email for one domain at no cost, but now you’ll be paying about $5 a month. In a second we’ll be going through a free option you still have, but if you like living in the Google universe you can create an account with your primary business email, then head over to your Cloudflare DNS settings and create the following records that CloudFlare lists here.

Zoho (Free)

If you have just the one domain and would rather pinch the pennies, Zoho offer a great business email package for free. Create an account with your primary email and then follow then create a CNAME record within CloudFlare to confirm domain ownership, followed by the two MX records from Zoho. Read this CloudFlare article for more information. (These records are created in the same place in CloudFlare where you added your DO IP address.) Bare in mind that it may take up to 30 – 45 minutes for the records to be confirmed by Zoho.

Final Housekeeping

Phew! Took some time but hopefully your website now speaks for itself, and your customers are having the user experience of their lifetimes. (Not that they know it.) All that’s left is to ‘destroy‘ the test droplet. (Or whatever you called the temp droplet.) Oh, and don’t go deleting the wrong droplet, because that would be a trifle annoying at this point. 🙂

And also, while I’m here, don’t forget to find some time to cancel shared hosting. Don’t worry if it’s with your registrar, as your domain will still be registered with them.