Ghost release 1.0.0

Many of the web projects that we do are built around WordPress. WP started life as a blogging tool, but has since developed into a great content management system with a large ecosystem of high-quality themes and plugins.

For blogging, however, we prefer Ghost over WordPress. Ghost is only intended for blogging which makes it clean and easy to work with. It supports writing very well, and it doesn't try to do anything else.

Ghost has recently been released in version 1.0.0. This release includes a new 2.0 version of the standard Casper theme and an improved Markdown editor, but otherwise it is mostly an internal rewrite in preparation for new features to come.

Ghost CLI

One major difference between the 0.x releases and version 1.x is that Ghost installation, updating, and other maintenance is now done using a new Ghost CLI command line interface. Installing Ghost is a matter of running the ghost install command - the installer will prompt for the necessary information, and it will then proceed to install and configure Ghost without any manual configuration file edits required.

This procedure worked well when testing on a newly provisioned VPS, but we ran into issues when trying to install Ghost on our production server. The Ghost CLI assumes a specific server setup, and the installation process will fail if the target server doesn't meet those requirements exactly. For example, node.js must be installed globally on the server, not using NVM, and the installer requires sudo privileges in order to setup a ghost user and to configure systemd to start Ghost when the server is rebooted.

The Ghost installation guide not only makes recommendations with regards to server setup, it walks the user through the steps of configuring a newly provisioned Ubuntu 16.04 VPS from scratch, i.e. setting up a non-root user with sudo privileges, installing MySQL and Nginx, setting up a firewall, provisioning SSL certificates, etc. There is no mention anywhere of how you can install Ghost in a different environment, and in fact the documentation makes it clear that using this particular stack is the only supported way of installing and running Ghost version 1.x.

Installing Ghost Manually?

Update August 13: We have described how we plan to install and maintain our Ghost blog without using the CLI here: https://blog.stickleback.dk/ghost-without-the-cli/

Using the stack that Ghost CLI requires doesn't really work for us. We already have a setup in place for hosting Node.js applications that includes things like monitoring, log file handling, and backup, and we don't really want to deal with another setup specifically tailored to Ghost. But what are the alternatives? Staying on the current 0.11 for any length of time isn't an option since it will no longer receive security updates.

One option is to host our blog on ghost.org. This costs more than handling hosting ourselves, however, and since this is a fully managed solution we would depend on their support in case of problems. The level of support that you can expect isn't specified anywhere, but it depends on price tier, e.g. to receive "priority" support you would have to be on the "Team" plan that costs $105 per month (or $948 per year if paid annually).

Or we could reverse engineer the installation performed by Ghost CLI, and then transfer the Ghost installation to our own environment. Most likely that wouldn't be very difficult, but the obvious drawback is that we will then have to do this every time a new version is released. The process would probably be similar to the old manual upgrade procedure, but with the added complexity that the necessary steps would no longer be documented.

Difficult choice. We'll deal with it in the short term by procrastination, and with a bit of luck someone else will come up with good solution. Or not - we'll let you know!