Here's how to launch your own self-hosted business blog

Use Ghost to orchestrate the content strategy for your business

Representational image depicting a printing machine
(Image: © Shutterstock /

A blog (opens in new tab) usually acts as the central communications platform for virtually all businesses that need to interface with their users. 

Everyone from software vendors, to hardware retailers need a content management system (CMS (opens in new tab)) that’s not just easy to use and administer, but also versatile enough to evolve with their changing requirements.

Ghost (opens in new tab) is an open source (opens in new tab), headless, Node.js-based CMS that can help businesses of all sizes rollout an effective medium to engage with users.

While Ghost is most popular for blogging, it ships with tons of useful features to deploy all kinds of online publications. It has SEO (opens in new tab) and social media (opens in new tab) features built directly into the core itself, and is flexible enough to be either used individually or with a bunch of collaborators.

screenshot of Ghost blog's administration interface

(Image credit: Ghost)


Ghost offers multiple hosting options.

For self-hosting Ghost (opens in new tab) the developers recommend using an Ubuntu 20.04 LTS (opens in new tab) release as a base, on a computer with at least 1GB of RAM (opens in new tab), though you’ll get a better experience and mileage with 4GB of RAM.

The process of building the server is well-documented (opens in new tab) and typically involves pulling in supported releases of the MySQL database server, the Nginx web server, and a 14.x series release of Node.js. 

screenshot of Ghost blog's set up process

(Image credit: Ghost)

You can also host Ghost with the help of a VPS hosting provider (opens in new tab). Ghost officially partners with Digital Ocean (opens in new tab), who also offer a pre-made Ghost image (opens in new tab) to ease deployment.

The easiest option however is the fully-managed Platform-as-a-Service (PaaS (opens in new tab)) offering from the project itself known as Ghost(Pro) (opens in new tab). The service is powered by the exact same open source codebase, and takes care of deploying and managing your Ghost installation, while offering security features and conveniences such as SSL certificates (opens in new tab), server updates, backups (opens in new tab), and more. 

Ghost(Pro) offers multiple pricing plans depending on your requirements, and there’s also a 14-day trial plan that you can use to tinker with the platform. 

screenshot of Ghost blog's settings

(Image credit: Ghost)

Initial configuration

Unless you are using the PaaS edition of Ghost you’ll have to spend some time setting up your Ghost installation as per your liking. The process is fairly straightforward since the entire Ghost installation is controlled via a single configuration file.

If you’ve followed the Ghost installation process, you’ll already have a custom configuration file installed by default. The file has several configuration options (opens in new tab) that you can tweak and customize according to your environment.

Certain parameters in the configuration file are required, such as the ones that specify the public URL of your blog, and the type of database being used, while several others are optional, which you can tweak once you’ve clocked some mileage with Ghost and are familiar with its operation.

One such parameter is storage adapters (opens in new tab), which control the location of the images on your blog. By default, the images are stored in the filesystem, but you can customize the parameter to store them on Amazon S3 (opens in new tab), Google Drive (opens in new tab), Google Cloud Storage (opens in new tab), Azure (opens in new tab) Storage, GitHub, or on several other locations. 

One tool that all Ghost admins must get comfortable with is Ghost-CLI (opens in new tab). Not only does it help you install Ghost, it’ll also help you update your installation, and assist in regular maintenance tasks. 

screenshot of Ghost blog's settings navigation

(Image credit: Ghost)

For instance you can use ghost config [key] [value] to add a value to your Ghost configuration file. Similarly, you can use ghost update to check and update your installation to the latest Ghost release. 

In case an update breaks your installation, you can revert to the previous working version with ghost update --rollback. If you are facing issues with your installation, use ghost doctor to troubleshoot and diagnose potential issues. 

Note however, that while the project usually puts out a new release every couple of weeks, which you can switch to with ghost update, every 12-18 months there’s a major release, which breaks backward compatibility and requires a more involved upgradation process (opens in new tab).

screenshot of Ghost blog's user management

(Image credit: Ghost)

Customize your blog

Once you’ve set everything up, it’s time to customize your blog. 

By default, the user that you added while setting up Ghost is the owner who has unfettered access to the publishing platform. One of the best things about Ghost is that it enables you to share publishing and administering duties with other users.

Ghost supports five different types of staff users (opens in new tab) that have access to the admin area with varying levels of permissions for what they can do.

Besides the default user, who is the Owner, there are Administrators who have just about the same level of access as the owner. Then there are Editors, who can invite, manage, and edit the content created by Authors, as well as Contributors, who too can write posts, but don’t have the permission to publish them.

To add staff users, head to Dashboard > Staff, which will bring up a list of all current staff members. Click the Invite people button and enter the email address and select one of the predefined roles to send mail invites to other staff members.

screenshot of Ghost blog's content interface

(Image credit: Ghost)

Another interesting feature in Ghost is Members (opens in new tab) feature, which can help you monetize the content via paid subscriptions and email newsletters.

Members can sign up with their email address by clicking the Subscribe button on your blog. After verifying their account, members can access the content matching their access level.

Ghost supports three different membership levels. There’s public content, which is accessible to all users even if they haven’t registered as members, while members only content is shown only to logged in users. 

The paid-members content is exclusively for paying members. For this to work though, you’ll have to connect your Ghost publication with Stripe for processing and handling payments. While the process to connect Stripe with Ghost (opens in new tab) isn’t cumbersome, it won’t work unless your blog has a SSL certificate (opens in new tab)

screenshot of Ghost blog's default post

(Image credit: Ghost)

Start publishing

With everything set up, it’s time to publish your first post.

Ghost has an intuitive WYSIWYG editor (opens in new tab) that offers all the familiar formatting options, along with the ability to easily pull-in all kinds of dynamic content.

To begin authoring a post, head to the Dashboard and click the + icon adjacent to the Posts section. Enter a title of the post in the space provided and simply begin writing the body of the post in the provided space.

To format the text you can invoke the contextual toolbar by selecting the text you want to format. The contextual toolbar has the usual text formatting options. 

screenshot of Ghost blog's content image options

(Image credit: Ghost)

To add dynamic content to your post, press the + icon that appears on every new line. This brings up the dynamic menu (opens in new tab), which offers options to insert images, create image galleries, email-only content, embed content from external websites such as YouTube, Vimeo, Twitter, Spotify, and more.

screenshot of Ghost blog's portal settings

(Image credit: Ghost)


Once you’ve got a hang of writing posts, follow the tutorials on the project’s website to familiarize yourself with other Ghost features and use them to flesh out your publication.

For instance you can add a contact form (opens in new tab), or use Ghost secondary navigation functionality to add social network links (opens in new tab) to your publication. If you write long-form posts, you can use the reading_time helper to display a reading duration (opens in new tab) to your posts.

Helpers (opens in new tab) are tags in Ghost’s templating language that you can use to add useful functionality to your publication. 

screenshot of Ghost blog's email interface

(Image credit: Ghost)

Before you announce your Ghost publication to the world, make sure you’re using an SSL certificate, and have secured MySQL (running mysql_secure_installation should do the trick).

Also remember to lock down your server by properly configuring the firewall to block all services except ssh, nginx, http, and https. If you’re expecting a lot of traffic, Ghost developers suggest adding a CDN (opens in new tab) in front of your Ghost installation. 

With almost two decades of writing and reporting on Linux, Mayank Sharma would like everyone to think he’s TechRadar Pro’s expert on the topic. Of course, he’s just as interested in other computing topics, particularly cybersecurity, cloud, containers, and coding.