How to create a self-hosted blog without greedy web service providers

This post was originally published on my old website Meaningful Cafe, which is why the sample URLs and code are based on that name.

This guide shows you how to create a self-hosted blog using Google Domains, Digital Ocean and WordPress. Today we’ll combine these services to produce a strong foundation for a simple blog or full-blown website. The term “blog” is used throughout this guide but is interchangeable with “website.”

You can use this guide to create your first blog or create a better foundation for your current blog. Many bloggers grow sick of corporate pricing structures by web hosts like GoDaddy and Bluehost and want a better solution. This guide is that solution.

In addition to walking you through every step, this guide also educates you about what each step means. Not only will you have a badass blog at the end of this; you’ll also have a better understanding of web hosting and how the Internet works.

Before we get started, I should tell you that this is not the cheapest and easiest way to start a blog. But it is the best way. After eight years of building websites on all types of platforms, I’m positive of this. So if you’re wondering if you should use a shared hosting service that costs less – don’t. For a few extra bucks you’ll get more power and more freedom using the services in this guide. You’ll also be way cooler than other bloggers.

To complete this guide successfully you should have two hours of time available and be able to spend about $12/month for web hosting costs through Digital Ocean. You’ll also need $12 to purchase your domain through Google Domains.

Sound good? Let’s go.


You’re Building on Rented Land

Publishing online is one of the greatest freedoms we have, but many of us do it all wrong. Instead of building our own publishing platform we use platforms like Facebook and LinkedIn. The problem with this is that after clicking Post we no longer own our content. Our ideas and experiences become property of these corporations.

Content creation entrepreneur Sonia Simone calls this digital sharecropping. It’s dangerous because platforms like Facebook and LinkedIn can repurpose your content in any way they prefer. And in the most extreme case they can completely delete your content. All your captured moments and captivating ideas – gone.

This is not that far-fetched. Especially with the rise of corporate data breaches, you could receive an email from Facebook one day along the lines of: Yesterday we were hacked. Unfortunately all your content is gone. We are very sorry. This could also happen to your content on LinkedIn. In fact, my LinkedIn content was mysteriously deleted one day.

Digital sharecropping aside, owning a blog doesn’t just give you publishing freedom – it gives you creative freedom. With free publishing platforms like Facebook and LinkedIn you’re bound to blue on white design (how boring). And even if you choose a free blogging platform like Medium you’re bound to a set of templates.

When you build your own blog you’re not bound by anything. You answer to no one. You are the creator and the designer. You can leverage the talents of the best designers and the latest web technology to build something that complements your unique personality. Further, you can ensure it lives on forever and isn’t bound to corporate initiatives.

Anyone can create content on sites like Facebook, but that content effectively belongs to Facebook. The more content we create for free, the more valuable Facebook becomes. We do the work, they reap the profit.

Sonia Simone

With all that said, free social publishing platforms like Facebook, LinkedIn, and Medium are great. I give them all the credit for creating organized platforms that have better-connected the world. But we need to start using them right. Instead of publishing on these platforms first, we need to publish on them second. First we need to publish on our own property – one that we have full control over.

So what do you say? Let’s start using these social platforms to our advantage instead of them using us to theirs. Let’s start owning what we publish. Let’s build a web property that ensures our original ideas and experiences aren’t manipulated, monetized, or deleted by corporations more concerned with their stock price than us, the creators.

Build on Your Own Land – for Cheap

Before we get started, we should cover one last thing: popular website building services like Wix and Squarespace. These platforms are popular for a reason: They are very easy to use and don’t require you to get your hands messy. But in the long run, you end up losing.

By not doing a little more work up front you end up paying a lot more for a lot less. For instance, Squarespace charges $16/month and puts restrictions on you. The biggest restriction is a limit of 20 web pages. Wix offers a similar package for about $13/month but only gives you 10 gigabytes of storage space. This is problematic if you plan on publishing larger files like images and videos.

Warning! Do not build a free site with Wix. You do not get your own custom domain and Wix places annoying ads on your site. And similar to Facebook and LinkedIn, you do not own your content. Wix does.

Cost differences aside, you can do the following much easier when you build a self-hosted blog using this guide:

  • Create online and offline backups of your content so it’s never lost
  • Choose from tens of thousands of design templates
  • Hire a developer to create a template from scratch or customize an existing one
  • Monetize your blog with ads, products, sponsorships, and affiliate links
  • Escape the hold of corporations with bottom lines that don’t serve you

Again, publishing online is one of the greatest freedoms we have. And today you’re joining the minority who are doing it with gusto and full ownership. Stick to the steps in this guide and you’ll be part of this precious minority in just a few hours.

Part 1: Acquire a Domain with Google Domains

Your domain is more than your blog’s web address. When your blog takes off, it’s the thing that rolls off the tongue, fizzles through the teeth, and pushes from the lips of your visitors. So don’t pick your domain name lightly. Think of what you want people saying when they speak of you.

Most of the time domain names are similar or identical to the name of the blog. I recommend choosing the name of your blog with a dot-com ending if it’s available. Following this suggestion, your domain name would look like this: However, if the dot-com name isn’t available you can choose from other endings like .org, .net, .biz, and hundreds more.

Tip! There’s no technical difference between .org, .com and other domain endings. It’s just a matter of preference.

To secure a domain you’ll need to purchase it through a domain name registrar. This is an organization that’s accredited by the IANA, a nonprofit corporation that manages the domain name system that drives the modern web. There are many registrars you can buy your domain from, but I recommend Google Domains for the following reasons:

  • You can hide your personal information for free from WHOIS lookups.
  • The control panel is minimalistic and easy to use.
  • If you get stuck you can use their 24/7 support portal.

Google is also a forward-thinking company that treats its employees well and offers amazing free services to many of us already (Google Drive, Gmail, Google Maps, etc). It also pours money into non-profit endeavors to make the web better. And since we’re building a meaningful blog, it makes sense to build it with services from companies that add meaning to the world (wide web).

Now that you feel good about choosing Google, let’s get to it.

Step 1.1: Purchase a Domain

Follow the steps below to acquire a domain for your blog. (If you have a domain already on GoDaddy, I tell you how to switch it from GoDaddy to Google Domains in this tutorial.)

  1. Visit the Google Domains website.

  2. In the search box that says Search for a domain name… type the domain you want to secure:

    Screenshot of domain search box on Google Domains website

    A page that looks like this will appear:

    Domain extension options search menu in Google Domains

    In this example Google provides a few different suggestions including .enterprises and .international. There are many creative endings like this, but I highly recommend choosing an ending that everyone knows like .com, .org, or .net.

  3. When you find a domain you like, click the shopping cart icon next to it. A checkout box will appear:

    Screenshot of Proceed to checkout pop-up in Google Domains

  4. Click Proceed to checkout. A pop-up form will appear asking you to add your Name, Organization, Address, Phone, and Email.

  5. Complete the form, and at the bottom of the form, select the bubble next to Make my Info private. Then click Continue. Another pop-up will appear asking you to add a credit or debit card. This card will be used to pay the amount needed to secure the domain for one year:

    Screenshot of Google Domains credit card info pop-up

  6. After adding your card details click BUY. If another pop-up appears asking you to build a website or set up up email, ignore it. Just leave it open until you see a message that says Registration of is complete.

  7. When you see the completion message, close the pop-up and you’ll see a page that looks like this:

    Screenshot of the Google Domains dashboard

    This is your control panel that we’ll be returning to later. But now it’s time to buy some hardware to build your blog on top of.

    That’s right. Hardware, baby. Bare metal.

Part 2: Build a Web Server with Digital Ocean

In this section we’re going to dive deep. As we go through the process of choosing our hardware and software we’re going to discuss some technical matters. As a blog owner, this knowledge will come in handy in the future. If something doesn’t make sense, that’s natural. Just read over everything once and continue on with the steps.

Let’s get started.

To store your blog content and serve it to the world you need something called a web server. An amazing company named Digital Ocean owns web servers in databases all around the world and offers “space” on these servers to people like us. This space is compartmentalized in a way that gives you full control over it. Essentially you own a server within a server. This is referred to as a virtual private server.

The image below shows what Digital Ocean servers look like and where you’ll be building your home:

Lights are coming on in Frankfurt #DeutscheDroplets #FRA1 #datacenter #servers #cloud #comingsoon

A photo posted by DigitalOcean (@thedigitalocean) on


This is your hardware. To add logic to your hardware you need to give it some knowledge (software). Without any software your server is just a piece of metal with some fancy microprocessors and welding.

This hardware-software relationship applies to the computer you use every day. For instance, to add meaning to a MacBook, Apple installs software like the famous OS X operating system. You’ll be doing the same thing with your droplet. But instead of installing OS X you’ll be installing an operating system designed for web servers rather than personal computers.

Step 2.1 Create a Digital Ocean Account

  1. Sign up for a Digital Ocean account by clicking here.

  2. Click Sign Up in the top menu:

    Menu on the Digital Ocean homepage

  3. Enter your email and a password, then click Sign Up:

    Signup form for Digital Ocean

    After doing this, Digital Ocean will send you a confirmation email.

  4. Open the email and click the confirmation link.

  5. Click the Create Droplet button in the top right section of the Digital Ocean control panel:

    Create droplet button in Digital Ocean control panel

    Now that you have a Digital Ocean account you can start setting up your web hosting server, or what Digital Ocean calls a droplet.

Step 2.2: Choose Your Operating System and Application

There are many different kinds of software you’ll install on your droplet. But the most important is the operating system. The operating system tells your server what to do. Digital Ocean provides many different kinds of operating systems that are all based on Linux, the most-used operating system in the world.

Digital ocean calls these operating systems distributions:

Distributions offer by Digital Ocean

We’re not going to choose a distribution though.

If we did we’d have to install other software ourselves to create a foundation for our blog. Installing your own software is good practice if you’ve built websites before, but tricky if it’s your first time. So instead of choosing a distribution we’re going to choose a one-click application. An application comes with all the software you need to get your blog started, pre-installed and pre-configured.

The application we’re going to choose is the WordPress application.

You may have heard of WordPress. It’s a well-known content management system (CMS) that makes managing blogs and publishing content a breeze. It’s also the most used CMS in the world. One out of four people who purchase a new domain (like you just did) end up running WordPress. In fact, WordPress powers 26% of the Internet.

To choose the WordPress application, follow these steps:

  1. Select the One-click Apps tab under the section called Choose an image:

    Distribution and One-click Apps tabs in Digital Ocean

  2. Select the WordPress on 14.04 option:

    One-click apps offered by Digital Ocean with the WordPress on 14.04 app highlighted in blue

    The reason the application is called WordPress on 14.04 and not just WordPress is because this application uses Ubuntu version 14.04. Ubuntu, based on Linux, is the most used operating system for web servers.

    In addition to coming with Ubuntu, the WordPress app comes with other software. Combined together, this software creates something called a LAMP stack. You can learn more about the LAMP stack that will power your blog in Appendix A.

Step 2.3: Choose Your Server Size

The server size you choose determines how large and powerful your web server is.

New blog builders like us have six server sizes to choose from. But because we chose the WordPress application, we only have five options. The $5/month option is not available. This is because WordPress requires a little extra “juice” than other applications to run.

But rest assured: Paying the extra $5/month for WordPress is worth it. Compared to other content management systems, WordPress makes your life very easy as a blog owner and digital publisher. Plus, with the $10/month plan you get more resources. These resources will help prevent your blog from crashing under heavy traffic and give you more storage space for images and other rich media

With that in mind, select the $10/mo server size:

Server size options from Digital Ocean with the ten dollar per month option highlighted in blue

You’ll notice that under each option there are three different specifications. Let’s take a minute to go over them. As the soon-to-be-owner of a self-hosted blog it’s important to understand what these specifications mean.

  • The CPU (central processing unit) is the brains of your server. When someone types in their browser’s address bar, their request to access your blog is sent to your droplet. The CPU processes this request, pulling bits of information from different software. But a single CPU can only access and process so much information until it fails. For you this information load equates to 1GB, which is plenty.

  • The SSD Disk is equivalent to the hard drive on your computer. It’s where all the information on your blog is stored long-term. This includes images, videos, and other content. With your plan you get 30GB of space. This is more than enough unless you plan on hosting your own videos. (I recommend uploading videos to YouTube to help you save space.)

  • The Transfer is how much data/content you can serve per month to people who visit your blog. With your plan you have 2TB which equals 2,000GB. Considering the average web page size is about 2.5MB (0.0025GB) it will take 800,000 pageviews per month to hit that limit. If your blog is that successful from the get-go, please tell me your secret.

Step 2.4: Choose Your Datacenter Region

The datacenter region is where Digital Ocean keeps its servers.

The closer your server is to the homes of your blog visitors, the faster your blog will load on their devices. Therefore it’s important to choose a datacenter close to where the bulk of your audience is. For instance, if you’re creating a blog that focuses on educating Californians, you’ll get more visitors from the west coast than the east coast. For this reason you’ll want to choose the datacenter in San Francisco.

With Meaningful Cafe I don’t serve a specific location, rather the entire world. But because my website is in English it’s a safe bet to choose a datacenter in the United States. I could have chosen either the San Francisco or New York datacenter region, but ultimately I decided to go with the latter.

Below are the datacenter regions you have to choose from. After considering your target audience, choose a datacenter region:

Datacenter region option by Digital Ocean

You’ll notice that there’s more than one number under the the New York and Amsterdam box. All this means is that there are servers located in multiple datacenters in that city. It really doesn’t matter which number you choose. For instance, New York 1 could be in the Bronx, New York 2 could be in Manhattan, and New York 3 could be in Brooklyn.

If you want to learn a little about why server location matters, I wrote a post about how web content is delivered. It explores the thousands of miles of subterranean cable that web content travels through before making it to the screens of your visitors.

Step 2.5: Select Additional Options

There are four additional options you can choose from before activating your droplet. I recommend activating two of the four:

Additional options for droplets with Digital Ocean

Option 1: Private Networking

This is for people who need more than one droplet. We only need one, but for the sake of understanding what it means: Private networking lets droplets in the same region “speak” with each other. This is ideal for people running multiple applications on multiple droplets. Instead of droplets communicating over the open web, they can communicate over Digital Ocean’s private network to get things done faster and more securely.

Do not select this option.

Option 2: Backups

Backups only cost $2 per month with the $10/month droplet plan. This equates to 20% of your monthly server bill. Though there’s a good chance you’ll never need to use the backup, it will make you rest easier at night. Because of this I recommend enabling this feature. You can learn more about Digital Ocean backups here.

Select this option.

Option 3: IPv6

Your server IP is the “home address” of your blog and consists of a set of four numbers ( That’s my server IP, and if you copy/paste it into your browser’s address bar the Meaningful Cafe website will appear. This is because my server IP is actually masked by my domain name In Step 3 you’ll perform this masking process too.

Anyways, IPv6 was created because the 4-number address structure known as IPv4 only supports 4.3 billion unique IPs. And with the growing population, eventually many more IPs will be needed. Aside from offering over trillions of additional IP addresses, IPv6 also offers some technical benefits. Because of this I recommend enabling this free feature.

Select this option.

Option 4: User Data

This option is for people who really know what they’re doing and have set up a droplet before. That’s not us. But if you’re curious about it, start by reading this.

Do not select this option.

Step 2.6: Add SSH Keys

The Secure Socket Shell (SSH) is a protocol that lets you securely connect and communicate with your droplet. Instead of using a password to access your droplet, you create a “special handshake” that only your computer and your server know. This handshake is a long string of numbers that you generate by creating something called an SSH key pair.

To generate a key pair, you need to launch the Mac application called Terminal. Don’t worry if you haven’t used your terminal before. It’s fun and easy.

Tip! If you’re a Windows user, follow Appendix B1 and B2 instead of this step.

To generate a key pair with your Mac, follow these steps:

  1. Click on the magnifying lens in the top right part of your screen to perform a search.

  2. Enter terminal in the search bar:

    Splotlight search feature in Mac with the word terminal entered

    A window like this should appear:

    Terminal Bash window for Mac

  3. Type this in your terminal:

    ssh-keygen -t rsa
  4. Press enter. You should see a response like this:

    Generating public/private rsa key pair.
    Enter file in which to save the key (/Users/Rob/.ssh/id_rsa):
  5. Press enter again. You should see a response like this:

    Enter passphrase (empty for no passphrase):
  6. You don’t need to enter a passphrase so press enter again. If you did everything right you’ll see a response like this:

    Your identification has been saved in /Users/Rob/.ssh/id_rsa.
    Your public key has been saved in /Users/Rob/.ssh/
    The key fingerprint is:
    b5:d8:77:4d:cf:c9:e2:c6:d9:f9:b9:4f:f4:ab:d0:c3 Rob@Roberts-Air-2.fios-router.home
    The key's randomart image is:
    +--[ RSA 2048]----+
    |                 |
    |                 |
    |          .     .|
    |         + .  .+o|
    |        X o ..o=|
    |          = S = .|
    |           . B oo|
    |            o ,..+|
    |             .o|
  7. Now type this in your terminal:

    cat ~/.ssh/
  8. Press enter. You should see a response like this:

    ssh-rsa AAAAB3NzaC1yc2EEEAADAQABABABAQC/tOwCnetERnljHZy/96PCVgiB3I75722NslbBR3OtY19yWnouYd56ZKiO82jmjnhDe+KUyRDbNkKB38gMipgDkI5iVri9fXO/WWTBb59ITwsN03+Ngnbz9csBi3/pd1xfIKn0Wo+Nsv4DGYzxTtFv/tj9xiWJ/PjwjchJwgdd5R0Fwyre8J+2UCW/NohGQ5HmPKXNHTdwClaSi9gzLXtf0TJFe9xho2ZVM/K+zu0d8C8XSfjYhXglb8CeqD/fhNUKJjoM67hvbfGAYTTfDi5aD2Ib31BH1VyPJx3vjBA6/Y6UWuYSOAX0nAAAiz4AkSsT Rob@Roberts-Air-2.fios-router.home

    This is the public key you’ll put on your Digital Ocean droplet. The private key you need on your computer was installed in the previous steps.

  9. Copy this key.

  10. Return to the Create Droplet page and click the New SSH Key button:

    New SSH Key button on Create Droplet page in Digital Ocean

  11. Paste the key into the SSH Key Content box:

    New SSH Key box in Digital Ocean

  12. Click Add SSH Key.

  13. Make sure the box next to your new key name is ticked.

    Your server is now protected against brute force attacks. Now the only way someone can hack your server is by stealing your computer. Just hope your significant other isn’t a rogue hacker who’s been feigning romance only to wait until you launch a successful blog and sabotage it.

Step 2.7: Finalize and Create

Now just three easy things left to do before you create your droplet:

  1. Select 1 Droplet.

  2. Name your hostname the name of your blog. Use dashes in place of spaces. For instance, the droplet name for Meaningful Cafe is meaningful-cafe.

    Last section on Create Droplet page for Digital Ocean

  3. Click Create. It should only take a minute for Digital Ocean to spin up your droplet.

    After your droplet is created you’re officially the owner of a tiny but meaningful bit of space on a Digital Ocean web server. Take some time to appreciate this. Because unlike a hosting solution like Squarespace, Wix, GoDaddy or Bluehost, boundaries don’t exist for you. Anything is possible, everything is customizable.

    Let’s do this.

Part 3: Connect Your Domain to Your Server IP

Right now the domain you purchased in Step 1 isn’t connected to your droplet. If you don’t connect the two, visitors must type your server IP in their browser’s address bar to access your blog. But no one is going to remember an address like They’re more likely to remember something like This is why the domain name system was invented and why you bought a domain.

To connect your domain to your server IP:

  1. Return to your Google Domains control panel. If you signed out, visit the Google Domains website and click Manage My Domains:

    Manage My Domains call-to-action on Google Domains homepage

  2. Click the DNS icon next to your domain:

    Configure DNS icon in Google Domains

  3. Under the Name Servers section, select the radio box next to Use custom name servers:

    Use custom name servers radio box in Google Domains

  4. In the empty box that appears, type Click the + icon to add two more name servers: and It should look like this:

    Digital Ocean custom name servers entered into Google Doamins

  5. Click Save.

  6. Now return to your Digital Ocean control panel. If you signed out, visit this page.

  7. On the Droplets page, click More and select Add a Domain:

    Add a Domain option in Digital Ocean

  8. Enter your domain in the empty Domain box. Then click Create Record:

    Create record option in domain section of Digital Ocean

    You’ll arrive on a domain management page that looks like this:

    Domain management page in Digital Ocean

    At this point your IPv4 address is connected to your domain (that’s what the orange A means). Now you need to connect your IPv6 address.

  9. Keeping the domain management page open, in a separate browser tab go to the main Droplets page.

  10. Click on your droplet under the Name column:

    Droplet name in Digital Ocean

    You’ll arrive on your droplet’s dashboard page and at the top you’ll see your IPv6 address:

    Digital Ocean IPv6 address

  11. Click your IPv6 address to copy it. Then return to the domain management page in the other browser tab.

  12. Select the AAAA record type box.

  13. In the Enter Name field enter the @ symbol. In the Enter IP Address field paste your IPv6 address that you copied:

    AAAA record type in Digital Ocean

  14. Click Create AAAA Record.

  15. Now select the CNAME record box.

  16. In the Enter Name field enter the * symbol. ln the Enter Hostname field enter the @ symbol:

    CNAME record in Digital Ocean

  17. Click Create CNAME record.

    The CNAME record points people who enter www. before your domain/hostname to your blog instead of an error page. The reason we put an asterisk before the domain name instead of www is because sometimes people make mistakes: They enter wwww instead of www. With the asterisk in front of your domain name, anything typed before your domain name will still be directed to your blog.

  18. Verify your record types look like this:

    Completed record types example in Digital Ocean

    At this point your domain is successfully connected to your server IP. If you enter your domain name into your browser’s address bar a picture of a shark will appear (see below). In the next part of this guide we’ll turn that shark into a WordPress blog!

Part 4: Configure WordPress

Step 4.1: Gain Root Access to Activate WordPress

Root is an authoritative user profile for your server. When you’re logged in to your server as root, you have the ability to make additions and changes to files and software. Because root has total authority over the server, you should know how to gain root access. After all, you’re the author here.

In addition to learning how to gain root access using your computer terminal, you also need to log in as the root user to activate WordPress. If you visit your domain now, you’ll see a splash page that looks like this:

Digital Ocean splash page saying to use SSH login to activate WordPress

So just like we did in Step 2.6 we’re going to fire up our terminal.

Tip! If you’re a Windows user, follow Appendix B3 instead of this step.

With your terminal open, follow these steps:

  1. Type this in your terminal:

    ssh root@ipaddress

    Replace ipaddress with your IPv4 address.

  2. Press enter on your keyboard. You should see a message like this:

    The authenticity of host ' (' can't be established.
    RSA key fingerprint is 15:12:42:7d:d1:41:213:6c:46:44:54:80:28:21:81:k5.
    Are you sure you want to continue connecting (yes/no)?
  3. Type yes then hit Enter. A series of responses will appear. Don’t mind them. Just make sure the last line looks something like this: root@your-blog-name:~#. You are now signed in as the root user and WordPress is activated.

Step 4.2: Initial WordPress Setup

  1. Visit your domain using your browser’s address bar. You should see a page with a language selection box:

    WordPress language selection box

  2. Select your language and click Continue. The following page will appear:

    Welcome message from WordPress

  3. Complete the forms on this page. You can make the username whatever you want. It doesn’t have to be admin like I made it. It can be your full name without spaces, your favorite dinosaur, whatever you please. Whatever you make it, just be sure to leave the Search Engine Visibility option at the bottom of the page un-ticked. You do want search engines like Google to index your blog. This is how the majority of people will find out about it.

  4. Click Install WordPress. After installation is complete your WordPress dashboard will appear. Give it a warm welcome. This is the portal you’ll use to publish content and make changes to your blog in the near future.

  5. In the left menu, hover over Settings and select General:

    General settings tab in WordPress dashboard

  6. Fill in the information fields on the General Settings page.

    Make sure the WordPress Address (URL) and Site Address (URL) fields have the same web address. The address should begin with http:// and end with your domain:

    WordPress Address and Site Address URL section in WordPress

    Also make sure to change the Timezone field if it’s incorrect. You can find out which timezone you’re in here.

  7. Click Save Changes. You can check out your live blog now by clicking the home icon in the top left corner of your WordPress dashboard. The tab should have the name of your blog on it:

    Top WordPress menu

    You’ll notice that your live blog looks pretty bland. This is because you’re using the default WordPress theme. Don’t worry though. In the next step you’re going to choose a theme that matches your taste better. There are thousands of different WordPress themes you can choose from. And after you find one you like, you can install it in seconds with the click of a button.

Step 4.3: Choose WordPress Theme

Think of your theme as your blog’s paint job. Without a theme your blog is like a plain metal car with hub caps. It’s black text on a white background. To pretty up the content on your blog and make it more user friendly, themes are installed on top of the WordPress core on your Digital Ocean droplet.

Some WordPress themes are free and others you need to pay for. Below you’ll get great sources for both.

The themes linked to below are all responsive (they look good on mobile devices and desktops), extremely fast (they load quickly on your visitors’ devices), and have a strong focus on content (the design complements your content instead of overwhelming it).

Free Themes

The best free WordPress themes I’ve found are made by Anders Noren. I’m currently using his Hoffman theme on my personal website and absolutely love it. There is no excess. It’s a simple design that puts all attention on the content.

When you find a free theme you like, download it.

Premium Themes

Because WordPress is the most-used CMS in the world, choosing a premium theme can quickly become overwhelming. There are hundreds of companies creating hundreds of different WordPress themes. To cut through the clutter and find high quality themes at great prices I always use Theme Forest.

Theme Forest banner

When you find a premium theme you like, download it.

Step 4.4 Configure Theme-Related File

Before installing the WordPress theme you need to configure a file that was created when WordPress was installed. This file – php.ini – puts a restriction on the size of files you can upload with WordPress. By default the upload limit is 2MB, but many themes are larger than this. Therefore we need to change this limit.

To change the upload size limit we’ll use the Nano tool. Nano lets you easily open and edit files from the command line.

  1. If you’re using a Mac, access your server by entering the following in your terminal:

    ssh root@ipaddress

    If you’re using Windows, open PuTTY and double-click the My Droplet session you saved in Appendix B3, step 12:

    Saved session called My Droplet in PuTTY

    Whether you’re a Mac or Windows user, we’re all on the same page now. Continue to the next step.

  2. Open the php.ini file with Nano by typing this in your command line:

    nano /etc/php5/apache2/php.ini

    After you press enter Nano will open.

  3. Press control then W on your keyboard, holding them down at the same time. A search box in Nano will appear.

  4. In the search box type upload_max_filesize and hit enter. The query should take you to this line in the file:

    upload_max_filesize = 2M
  5. Using your right arrow key, move your highlighter so it’s covering the M. Click delete and enter 16 so the line reads:

    upload_max_filesize = 16M
  6. To save the update, press control O (the letter “oh” – not the number zero). Then press enter.

  7. To exit Nano and finalize the update, press control X.

    You have successfully changed the upload size limit for WordPress.

Step 4.5 Prepare for Theme Installation

Note: This step only applies if you purchased a WordPress theme from Theme Forest. Continue to Step 4.6 if you did not.

  1. Open the email with the subject [ThemeForest] Purchase Confirmation. This should have been sent to you after purchasing your theme. The content of the email will contain a box that looks similar to this:

    Email from Envato regarding Theme Forest purchase

  2. Click the My downloads button in the email. A page will appear with a box that looks similar to this:

    Theme Forest page containing purchased theme

  3. Click the Download button and select the Installable WordPress file only option from the dropdown menu:

    Theme Forest theme download options

    Some people (me included) initially make the mistake of selecting the first option in the dropdown menu. They then go to install the theme in WordPress and get an error message that reads The package could not be installed. The theme is missing the style.css stylesheet. This won’t be happening to you.

    At this point you’re ready to move into WordPress and install the theme you downloaded. Whether you downloaded an Anders Noren or Theme Forest theme, you should now have a .zip theme file downloaded. This file should be located in the folder on your computer designated for online downloads. Usually this is your Download folder.

Step 4.6 Install and Activate Theme

To install and activate your theme, follow these steps:

  1. In the left menu in WordPress, hover over Appearance and select Themes:

    Appearance tab with Themes option in WordPress

  2. Click Add New at the top of the page that appears:

    Add New theme button in WordPress

  3. Now click the Upload Theme box:

    Upload Theme button in WordPress

    A gray box will appear at the top of the page:

    Install Now theme button in WordPress

  4. Click Choose File and open the .zip theme file from where you saved it.

  5. Click Install Now.

  6. Click Activate.

    At this point you have a solid foundation for starting your blog. To see how it looks out of the box you can click the home icon in the top-left corner of your WordPress dashboard. It’s not going to look as good as the preview did when you were choosing themes. But eventually it will as you start adding new content and making theme customizations.

    In Appendix C I go over WordPress basics for managing content, publishing content, and customizing your WordPress theme. Definitely check that out before publishing your first post!


Appendix A: Defining LAMP

Knowing about the “stack” behind your blog is equivalent to knowing about the wheels/tires, model, chassis, and engine of your car.

The first car I ever bought – and still drive – is a 2001 BMW 330Ci. And to this day, people are always asking me what kind of chassis and engine it has. Because I took the time to do some research, I know the answers to their questions. Similarly, you should know how to answer people when they ask what your blog is built with.

Here’s how you’ll answer them: I use a Digital Ocean droplet with a LAMP stack on WordPress.

Linux-based operating system (Ubuntu): The operating system is responsible for scheduling tasks, allocating resources to those tasks, and the general management of your server. In Step 2.1 we chose Ubuntu as our operating system because it’s widely used and updated regularly. Also worth noting is that Ubuntu is the name of a Southern African philosophy that means human-ness.

Apache web server. The Apache web server is responsible for the actual delivery of your blog content. When someone requests a post from your blog, Apache calls files from the database and delivers them to your visitor.

MySQL (database management system). This is what creates, deletes, and organizes files on your droplet. It can be accessed by you through your terminal, and by your web server. SQL stand for structured query language and “My” is the name of the creator’s daughter.

PHP (language for dynamic processing): PHP is a programming language used for marrying MySQL with Apache. PHP is needed because your blog will be dynamic – not static. In other words, for a beautiful post to be created, many different files will need pulled from many different places. Apache will need to package this information together and deliver it in a responsible way. PHP will make this possible.

Appendix B: PuTTY for Windows

Appendix B1: Install PuTTY

  1. Visit the PuTTY download page.

  2. Scroll down the page until you see a file named putty-0.67-installer.msi:

    Screenshot of PuTTY download link for WIndows

  3. Click the file link to download it to your browser.

  4. Open the file when the download is complete:

    Screenshot of opening PuTTY file download

  5. Click Run when this pop-up appears:

    Open file security warning in PuTTY

  6. Click Next when the PuTTY Setup Wizard appears:

    PuTTY setup wizard

  7. Click Next again.

  8. Click Install. If a pop-up appears asking you if you’re sure you want to install the program, click Yes.

  9. Click Finish. PuTTY is now installed on your computer.

Appendix B2: Create SSH Key Pair

  1. Click the Windows icon in the bottom-left part of your screen and search for puttygen:

    WIndows search for PuTTYGen application

  2. Click the PuTTYgen link that appears in the search window. After doing so this window will appear:

    PuTTY Key Generator

  3. Click Generate.

  4. Generate the key pair by sporadically moving your mouse over the gray box. Do this until the progress bar is completely green:

    Generate randomness screen in PuTTY

    This sporadic movement is known as entropy and is used to generate your unique key. After completing this movement, your public key will appear.

  5. In the section called Actions below your public key, click the Save public key button. A Save As pop-up will appear.

  6. Type publickey and click Save.

  7. Now click the Save private key button. If a window appears asking if you’re sure you want to save the key without a passphrase, click Yes.

  8. Type privatekey and click Save.

  9. Copy the entirety of your public key. It should start with ssh-rsa and end with something similar to rsa-key-20160806.

    SSH key in PuTTY

  10. Now return to Create Droplet page and click the New SSH Key button:

    New SSH Key button on Create Droplet page in Digital Ocean

  11. Paste your public key into the SSH Key content box:

    New SSH Key box in Digital Ocean

  12. Click Add SSH Key.

  13. Make sure the box next to your new key name is ticked.

    Success! You have successfully created an SSH key pair using Windows. Return to Step 2.7 to finish creating your droplet.

Appendix B3: Access Droplet via SSH

To access your droplet via SSH you’ll need your droplet’s IP address. To get it, go to the main Droplets page. Under the IP Address column, hover your mouse over the numerical IP address and click the Copy link that appears.

After doing this continue on to the following steps:

  1. Click the Windows icon in the bottom-left part of your screen and search for putty:

    WIndows search for PuTTY application

  2. Click the PuTTY link that appears in the search window. After doing so this window will appear:

    Main configuration window for PuTTY

  3. Paste your IP address in the text field under Host Name (or IP address).

  4. Now, in the left-hand category menu, click the + sign next to SSH.

  5. Select the Auth option. You should see this window:

    Auth window in PuTTY

  6. Click Browse… next to the blank text field.

  7. In the window that appears, select the privatekey file, then click Open:

    PuTTY private key file in Windows file search

  8. Now, in the left-hand menu, select the Data option under Connection:

    Data option in PuTTY

  9. Type the word root in the blank text field next to Auto-login username:

    Auto login username called root in PuTTY

  10. In the left-hand menu select the Session option to return to the original screen:

    Session option in PuTTY

  11. In the blank text field under Saved Session type My Droplet.

  12. Click Save.

  13. You’ll see My Droplet appear under Default Settings:

    Saved session named My Droplet in PuTTY

  14. Double-click My Droplet to establish a secure SSH connection. A PuTTY security alert pop-up will appear asking if you trust the host:

    PuTTY SSH security alert asking if you trust the host

  15. Click Yes. A black window will appear and a bunch of words will appear on the screen. If the last line looks something like root@your-blog-name:~# you have successfully connected to your droplet!

    Success! Return to Step 4.2 to continue setting up your blog.

Appendix C: WordPress Basics

WordPress is designed to enable the everyman to easily publish their thoughts and stories online. It’s also open source, meaning it’s given to the world free of charge. This is because the founders believe everyone should have the ability to easily publish content online. And as you’ll see, it’s pretty damn easy.

Below we’ll go over each area in WordPress that you should familiarize yourself with.


This area in WordPress has two sections:

Screenshot of Dashboard options in WordPress

The Home section is your welcome mat. It’s the page that appears every time you log in to WordPress. It has a few different windows, all of which are collapsable. To keep my Home clean I only leave one window open – the At a Glance window. This window gives you an overview of all the content published on your blog:

Screenshot of At a Glance window in WordPress

The Updates section is where you go to update WordPress, your theme, and any plugins you’re using. (We’ll talk more about plugins below.) It’s good to check for and install updates at least once a week. Doing this will equip you with the latest WordPress publishing technology.


This area in WordPress has four sections:

Screenshot of Post options in WordPress

All Posts is a library of your blog posts. Here you can filter your posts by categories and by month published. You can also filter posts by keywords using the search feature in the top right.

Add New is what you click to create a new post. On the Add New Post page that appears you can assign Categories and Tags to posts to make managing content easier. In most cases, categories represents the broad theme of posts and tags represent specific aspects of the post.

For this Meaningful Cafe post I assigned two categories: Internet and Technology. I then assigned the following tags: WordPress, Blogging, and Online Publishing. This is what my Categories and Tags boxes look like for this post:

Example of categories and tags boxes in WordPress

Each category and tag has its own page. For example, AND Depending on your theme, you can add a custom description for each category and tag. These descriptions usually appear at the top of the main category and tag pages. To edit these descriptions and other information, click the Categories and Tags options in the left WordPress menu.


This area in WordPress has two sections:

Screenshot of Media options in WordPress

Library is where you manage any type of content you upload to WordPress. This includes images, videos, music and PDFs. In this section you can organize content by media type and by date uploaded. And, to upload new media, you can click Add New in the left menu or at the top of the Library page.

This area in WordPress is not the only place where you can upload media from. You can also upload media while creating or editing posts and pages. For instance, if you’re creating a new post and want to add an image to the post, simply click the Add Media button:

Add Media button in new WordPress post

The media you upload to posts and pages automatically gets sent to your Library for easy management.


This area in WordPress has two sections:

Pages options in WordPress

In terms of creation and management, Pages work very much like Posts. The main difference is that Pages do not have Categories and Tags. Pages are intended for things like About, Contact, Services and Products pages, to name a few. By rule of thumb, anything that’s not a Post is a Page.

To add a new page, simply click Add New.

One unique characteristic of a page is the Page Attributes box in the Add New Page section:

Page attributes box in WordPress

This option helps you organize your pages in hierarchical order. For instance, if you create a Mission, Vision, Contributors, and Founders page, you can assign the About page as the parent. This way your pages would be organized like this:

  • About
    • Mission
    • Vision
    • Contributors
    • Founders

Whenever it comes time to create a navigation menu for your blog, assigning page attributes will come in handy.


There is only one section for comments:

Comments option in WordPress

On this page you can manage comments submitted by people who visit your blog. You can approve/disapprove them, mark them as spam, move them to the trash, or reply to them. By default, people can only submit comments on Posts – not Pages.


This area in WordPress has five sections:

Appearance options in WordPress

Themes is a library of your active and inactive themes. From here you can deactivate current themes and activate new ones.

Customize opens up your live blog and a customization sidebar. Using this sidebar you can easily make changes to your blog’s appearance and preview the changes in real time. If you like the changes, just hit the Save Changes button at the top of the sidebar.

Widgets lets you easily customize the sidebar and footer on your blog. For instance, if you want to list your Categories in your blog’s sidebar, you can use the Categories widget. And if you want to display custom text in your footer, you can select the Text widget.

Menus let you easily customize the top navigation bar for your blog. You can also use the Menus widget to add a menu to your sidebar or footer.

Editor is where changes can be made to HTML, CSS, and PHP files. You shouldn’t access this section unless you have a specific mission and know exactly what you’re doing.


This area in WordPress has three sections:

Plugins options in WordPress

To start out with the easy stuff: Add New is what you click when you want to add a new plugin. The process for adding a new plugin is almost identical to adding a new theme, which we did in Step 4.6. As for the Editor, you don’t need to use this. This section is for people with coding skills.

But what is a plugin? This is something you should know before installing and activating one.

If you think of your blog as a car, plugins can be considered the upgrades – the spoiler, window tint, navigation system, premium sound system and sunroof. The key difference between plugins and car upgrades is cost. Unlike car upgrades, many WordPress plugins are free.

For instance, when you download WordPress a plugin called Akismet is automatically installed. This is a free plugin that, when activated, filters out spam comments from good comments on your blog posts. As a blog owner, you’ll soon discover that there’s a lot of spam out there and managing it without Akismet is hard.

To search for new plugins, click Add New. You can choose from plugins that are featured on WordPress, or you can search for other plugins. For instance, if you need a contact form, type the phrase “contact form” in the Search Plugins box. After hitting enter, a list of plugins for creating contact forms will appear. Often, the highest-rated plugin is the best.

To see which plugins you already have installed, click Installed Plugins. From this page you can activate, deactivate, and delete plugins.


This area in WordPress has three sections:

Users options in WordPress

Users are people who can access your WordPress dashboard. They are typically people you trust who are either writing content for your blog or helping you customize it. For instance, if you hire a trusted developer to customize your blog’s design, you would create an account for them. You’d also do the same for someone who wanted to create a post on your blog.

To create a new user account, click Add New and fill out the required information.

All Users is where you can manage people who have an account on your blog. From here you can filter users by their role (Subscriber, Contributor, Author, Editor, Administrator). You can also demote or promote their role by clicking the Edit link under their profile. Each role has different privileges, with Subscriber having the least and Administrator having the most.

Your Profile is where you make changes to your existing author profile. From here you can change your biography and other personal information. By default, WordPress makes your username your public author name. To change this, fill in the fields under Name and click Update Profile at the bottom. After doing this, go back to the Name section and select your prefered name from the dropdown menu next to the “Display name publicly as” option.


If you want to import content from a different CMS like Blogger, use the Import tool. If you want to export content from your WordPress blog to an XML file, use the Export tool. This tool is used to move content from one WordPress blog to a different WordPress blog, not to a different CMS.


This area in WordPress has six sections:

Settings options in WordPress

General is the area you configured in Step 4.2.

Writing lets you change the default post category from Uncategorized to any other category you created. It also has configuration options for setting up the ability to publish blog posts by email. I’ve never used this feature, but it may be handy if you’re in love with email.

Reading has options for changing the appearance of your front page. If you want a front page that does not display your latest posts, create a new page. After creating it, select the Static Page option and change your front page to the page you created. From the Reading section you can also change how many posts appear per page on your blog (by default this is 10) and determine whether your blog is indexed by search engines like Google (leave this box unchecked).

Discussion is where you can change settings for comments. Everything is self-explanatory here and can be modified to your preferences.

Media is where you can change the default size for images. Before inserting an image in a post, WordPress gives you the option to enter the original size or a pre-configured size. The latter comes in three types – (thumbnail) small, medium and large. You can change the default sizes for these on the Media page.

Permalinks is where you can change the URL structure for your blog posts. By default WordPress adds the publish date in the URL, making it look something like this: This is fine, but if you prefer a simpler structure like me, you can select the Post name option on the Permalinks page. This will make your post URL look like this:

Become a master in WordPress

Once you have your domain and server set up, you can start having some fun with publishing on WordPress. Though, to get the most out of WordPress, it’s important to extend your knowledge of the platform beyond the basics outlined above.

I recommend grabbing the book WordPress for Beginners 2017: A Visual Step-by-Step Guide to Mastering WordPress on Amazon to master WordPress, the most popular content management system in the world.

Leave a Reply