I've written before about the many reasons why using platforms like Patreon, SubStack, and OnlyFans are a bad deal for content creators in my post Why You Need to Own Your Publishing Platform, and now that I finally got around to standing up my own site I want to take a moment to explain how you can do this too for about $5/month using Ghost and Digital Ocean.
Why would you want to do this? Because in the long run, if you're serious about getting paid for your writing, you want to retain as much control over your platform and as much of your revenue as you can. This allows you to do all of the following:
- Have complete control over your subscriber list
- Customize the design of your website as much as you like
- Maintain direct relationships with your readers
- Keep a larger cut of your subscription revenue
- Guarantee that no one can deplatform you if their business model or politics change
There's a surprising lack of good guides out there on how to do this, so hopefully following this guide will save you some of the headaches I experienced as I was getting things set up. Hopefully I've made this easy enough that even someone who isn't very tech savvy can follow along.
When you're done following this guide, you'll have a complete, simple solution for writing articles on a website you own where people can subscribe to your posts via either email or RSS and pay you directly for subscriptions (where you keep all of the revenue each month).
Introduction: The Tools
We'll be using a few different websites and technologies for this guide, and they're all pretty straightforward. You'll need to create accounts on each of them. Don't be intimidated by this! It's much easier than it seems. I'll explain each of them as we get to the appropriate step.
- Domain Name: https://www.namecheap.com/
- DNS: https://www.cloudflare.com/
- Hosting: https://www.digitalocean.com/
- Blogging Platform: https://ghost.org/
- Email Delivery: https://www.mailgun.com/
- Subscription Processing: https://stripe.com/
EZ Mode: If you don't want to deal with most of this stuff, you can just buy a domain and pay $29/month to have Ghost.org manage all of this for you, and you're still much better off than going with a platform that takes a percentage cut of your revenue. As soon as you pass the $300/month mark it's a wash anyway. Are you serious about making a living off your writing or not? It's worth it. Doing this allows you to skip steps 2-5 in this guide, so the $29/month might be worth it for you.
Step 1: Buy a Domain Name at Namecheap.com
The first thing you should do is pick a domain name (MySite.xyz) that reflects your unique brand and go buy it at Namecheap.com. Why Namecheap? It's right in the name. They're easy to use and one of the cheapest domain registrars on the web. Search for whatever site you want with whatever extension you want and purchase it (usually for less than $10). You don't need any of their premium options, storage, email, or DNS stuff--just get the domain for now.
If you're planning to just have Ghost.org manage all your site admin for you, you can now just go register there and follow their instructions to redirect your new website to their hosting (it's pretty simple). In that case, you're done and can start creating the content and design for your new site. But if you'd like to save $24/month and have complete control over things, you should continue on to Step 2 now.
Step 2: Register a Free Account at CloudFlare and Point Your Domain at It
Next up is creating a free account at CloudFlare to manage your DNS settings and security. If you don't know why you would want this, you can read more about what CloudFlare does here, but it basically just handles some security stuff for you and makes your site faster and better able to handle large traffic spikes.
Once you've made an account, click into your "DNS" tab at the bar along the top and scroll down to find your nameservers.
Then go into your Namecheap account dashboard where you just purchased your website name and click "Manage" next to your domain on the domain list.
Under the "Domain" heading for your website you'll see a "Nameservers" section and you want to change the dropdown to "Custom DNS" and enter the nameservers you found in your CloudFlare DNS settings.
Click the checkmark to save your changes and you're done! You can now manage all of the DNS settings for your server from your CloudFlare account.
Step 3: Set up a "One-Click" Ghost Droplet on DigitalOcean
Next you need to register for web hosting (the tech that actually loads and runs your site on the back-end). People recommended that I use DigitalOcean for this and after a little research it makes a ton of sense. If you register with this link you'll get $100 of free hosting credit for 60 days (so basically two months free), but their starter service is only $5/month anyway making them one of the cheapest and easiest cloud hosting services on the web.
You're going to be creating a "Ghost droplet", which is a fancy way of saying that they're spinning up a virtual server for you that comes pre-installed with everything you need to create a Ghost blog.
Why are we using Ghost? Ghost is the new hotness for personal blog hosting and there are two good reasons for it: First, it's fast and much lighter-weight than alternatives like WordPress. But the second (and better) reason is that they have a native subscriber integration built into the platform using Stripe. This is what we want when we're trying to stand up our own version of Substack or Patreon because it lets us manage our own audience and keep all of the subscription revenue instead of paying 10% or more out to those platforms.
Once you've created your DigitalOcean account and provided your payment info for monthly billing, you'll come to a page that looks like the one below in the project you created during sign-up. Click "Get Started with a Droplet."
Don't be overwhelmed by all the options on the next page, because you don't have to worry about most of them. Here's what you need to do under each heading.
Choose an Image
Click "Marketplace" under "Choose an Image" and search for "ghost." Click on the pre-made Ghost install, which runs on Ubuntu 18.04 at the time of writing this article. It comes pre-configured with almost everything you need to run your blog.
Choose a Plan
Next you want to choose a plan for your hosting, and right now you shouldn't need more than the basic $5 shared CPU fan unless you're already a major influencer with hundreds of thousands of hits a month (in which case, ditch this guide and just pay someone to do this for you).
Choose whatever data center is closest to where you think the majority of your audience will be, and you don't need to do anything special with any of the other options until Authentication (just leave the default settings in place for now).
Under Authentication, technically the SSH option is more secure but it's not that big of a deal for your baby blog. The password is fine for now. Choose a secure password and save it in a separate text file somewhere safe that you won't lose it. You'll need to reference this again later when we log into the Droplet.
At this point, you're done with creating your Droplet! Great job. You can give it a name if you want to or leave it as the default long weird string and click "Create Droplet." DigitalOcean will spin for a minute and then you should see something that looks like this.
Note the IP address (the long string of numbers after the name). If you type that into your web browser, you'll see the Ghost setup screen, and you're ready to move on to the next step.
Step 4: Set Up Your DNS for Your Domain in CloudFlare
Now that you have your Droplet set up correctly, you need to make sure that the domain you purchased in Step 1 is pointed at the IP address for the Droplet you just made. This is one of the steps in the process that can seem hard and finicky, but it's actually really easy. You just need to do a few things in your CloudFlare account.
Go back to CloudFlare and click "DNS" from the top bar just like we did when we looked up the nameservers in Step 2. Scroll down to "DNS Management for <yoursite.xyz>" and click "Add Record." There are two records you'll want to add here, both of which should be pointing to the IP address of your Droplet from Step 3.
The first is for your top-level domain (what's called a "naked" domain) and it points all traffic on that domain to the IP address of your droplet. Select "A" as your type, put "@" as your name, and enter the IP address of the DigitalOcean droplet you made as the IPv4 address. Then click "Save".
Next, add another DNS record that's almost exactly the same as the first one, but use "www" instead of "@" for the name. This ensures that traffic coming to your website on the "world wide web" goes to the right place (so quaint, right?).
When you're done, your CloudFlare settings should look like this.
It can take a few minutes for these settings to propagate, but CloudFlare tends to handle this very, very quickly. Give it a few minutes (30+ minutes ideally) and then try to type the domain name you purchased into your browser bar. If you see the same screen from the end of Step 3 as when you navigate to the IP address of your droplet, then you've set things up correctly and traffic is routing to your droplet from the domain you bought.
There's one last thing you have to do before setting up Ghost, and I spent hours banging my head against it yesterday, so be sure to do this: to configure Ghost properly, you need to go into your SSL/TLS settings in CloudFlare (on the top bar) and change your SSL/TLS encryption mode to Full (Strict). This is non-obvious and not mentioned anywhere, but if you don't do this you will struggle to get your blog set up with a proper security certificate in the next step (just like I did).
Step 5: Configure Your Ghost Droplet on DigitalOcean
You're now ready to configure your Ghost instance back at your droplet on DigitalOcean, and it should be pretty easy if everything worked correctly so far. The instructions are provided right alongside your droplet (you can read them here), but I'll go through them anyway because there are a few gotchas.
Since we set up our droplet with an authentication password back in Step 3, you're going to want to grab that password from the file you saved and copy it now so that we can log into our server. Go back to DigitalOcean and click "Access Console" from the options menu on your Droplet.
A black box should pop up requesting your login credentials. If you don't have much experience working with Linux or working from the command line, this is another step that will seem very intimidating, but once again we'll walk through it step by step. Just pretend you're Neo from the Matrix, get your hacker hat on, and follow these instructions.
- Your login is "root"
- Your password is the password you set up in Step 3 for this droplet
Press enter after each one and if you entered them both correctly, you'll see a screen that looks like this. Your server will start doing a bunch of stuff to prepare your Ghost blog. Let it do it's thing until it prompts you again.
When it finishes updating and prepping things for you, it will prompt you with another screen that will explain the information you need in the next step. These are:
- A properly configured website domain, which is what we just set up in steps 1, 2, and 4.
- An email address for your SSL certificate, which is automatically provisioned from LetsEncrypt.org. Any personal email is fine.
Go ahead and press enter, and it will validate your installation configuration, download some additional setup files, and then prompt you to type your domain for your website in.
This step is very important! Make sure you type the domain you purchased in Step 1 in with "https://" at the front of it so that Ghost-CLI (the install program you're using for setup) can automatically get an SSL Certificate from LetsEncrypt for you, which will save you lots of headaches later.
If everything is set up correctly, it should prompt you for your email address next, and this is where you can just type in your personal email address so it can provision a certificate for your site. If you don't do these steps, visitors to your website will get an "insecure site" warning on most modern browsers, so it's pretty important.
If your SSL was set up correctly you'll see a little green diamond next to "Setting up SSL" and Ghost will start up. If everything goes smoothly you should see a success message that shows your site URL and which tells you to go to yoursite.xyz/ghost to finish your setup.
What happens if something goes wrong?
If you don't see the success message or if Ghost reports errors during the installation process, you'll need to take some additional steps to troubleshoot and it's non-obvious how you do that. Fortunately, I banged my head against this for hours yesterday, so here are some of the problems you might run into and what you should do about them.
- If your SSL diamond is red or Ghost reports a problem with the certificate or your DNS settings, you should go back to Steps 3 and 4 and confirm that everything is configured correctly in CloudFlare and that your DNS settings are pointed to the correct IP address. If everything looks good, you may need to wait a little longer for the DNS settings to kick in.
- Also make sure that you changed your SSL/TLS encryption settings from "Flexible" to "Full (strict)" in CloudFlare like I described at the end of Step 4.
- If both of those look right, you should double check that you typed in your domain URL correctly during setup. You can check this by looking at the black console box and pressing "Shift + PgUp" to navigate back up the screen to where you typed your domain in.
- If you had to make changes or you typed the domain wrong, it's easy enough to do so and just re-run setup. But you can't do it exactly the same way that you did the first time. When you log into your droplet console, you'll now need to switch to a different user that was set up during the ghost configuration process to run further commands. Do this by typing "sudo -i -u ghost-mgr" at the command prompt and pressing enter.
- Once you're logged in as the "ghost-mgr" your prompt will turn green and you'll need to navigate to the ghost install directory to run further commands. Do this by typing "cd /var/www/ghost/" and pressing enter. If you don't do this step, you'll be confused because the system will tell you that there's not an active ghost install (but there is).
- Once you're in the ghost directory, you can try running setup again by typing "ghost setup" and pressing enter. This allows you to re-enter your website URL and other elements of your installation. Note: At each prompt it will look like your cursor is in the middle of the line, but don't press backspace unless you want to change something! It's doing that because the default setting has already been entered. You can just press "enter" to leave the setting as it is, and this is especially important for the MySQL database prompts that were automatically set up for you.
- If your SSL certificate or DNS settings were the things that were messed up, you can just run "ghost setup ssl" instead of "ghost setup" and it will attempt to fix that for you.
- If these steps don't work or something goes very wrong in a way that you don't want to or don't have the expertise to troubleshoot (like you accidentally messed up your MySQL settings), the easiest thing to do is to delete your Droplet on DigitalOcean and start over on Step 2 of this guide. Once you've done this once, breezing through Steps 2-5 takes less than 10 minutes so it's easy enough to start over. You can do this by clicking on the Droplet options at DigitalOcean and clicking "Destroy". Then just spin up a new droplet.
Step 6: Register Yourself as a User on Your New Website
If everything worked correctly, congratulations! You're past most of the really hard, finicky stuff, and you should now have a working Ghost blog set up on a domain you own for $5/month. Navigate to "yourwebsite.xyz/ghost" and set yourself up as a user.
Just click "Create Your Account" and follow the instructions to set yourself up as the account owner. When you're finished, you'll be taken to your Ghost blog management portal which you can access any time by returning to yourwebsite.xyz/ghost and entering your login information.
That's it for the basics! Congratulations on setting up and configuring your own Ghost blog. You now have an independent platform for your writing and can completely control the design and configuration of your own site. Ghost is extremely easy to use, fast, and powerful, and I've already fallen in love with my instance.
For some people, this might be enough, since you can already post articles and share your thoughts with the setup as is. But if you want to go all the way to setting up your own version of Patreon or Substack, there are a few final steps we have to take in order to setup email inbox delivery and enable paid subscriptions.
I'll detail those in an upcoming post and link to them here when they're completed. Enjoy your new Ghost blog in the meantime!