Edit: I’m sad to announce that this blog runs on WordPress now. Ghost had the potential to become the next big blogging platform, but they opted to retreat to a geeky, self-imposed limited audience by only supporting officially Ubuntu+Nginx. That’s a bummer, but if that’s their choice, I wish them best of lucks. I will stick to WordPress.

Initially, when ghost announced its 1.0 release, I was absolutely thrilled. As you may already know, I have been a ghost fan since I heard about the alternative blogging platform.

The update looked promising. New editor with improved functionality, automatic updates, and of course the fact that it was the first non-beta release.

However, when I visited the Ghost install website, I was shocked to find that ghost 1.0 required not only a concrete web server (Nginx), but also a concrete operating system too (Ubuntu):

, How To Update To Ghost 1.0 In Debian And Apache, Micropreneur Life

 

While I have worked with Ubuntu and Nginx in the past, and I love both, the server where I have my blog hosted happens to run on Debian + Apache2.

However, being brother Linux distros, I thought that probably those were just mere recommendations. After all, a blog running on a web server should be system agnostic, shouldn’t it? If wordpress can run on a Windows machine, the next generation of open source blogs can certainly run on a Debian box, right?

The “Not So Open” Blogging Platform

Being a major release update, you can’t update to Ghost 1.X directly. You need to create a new install and import the previously exported data from your old one. As it turns out, the installation via the ghost-cli expects you to have that exact Ubuntu+Nginx environment. Otherwise, it fails.

There are two types of installations available, the “production install” and the “local install”. Supposedly, if you have a different environment, you should opt for the latter. However, the Ghost team makes it clear that a local install is not suitable for production.

, How To Update To Ghost 1.0 In Debian And Apache, Micropreneur Life

Thus, the only chance for us, non-Ubuntu users is going for the production install and trying to fix things. Let’s see how to do this for Debian Jessie (8.9) and Apache 2.4.

Installing Ghost Via The CLI Interface.

If you are updating your Ghost installation from Ghost 0.11.X, I suppose you already have node, a ghost user and the ghost-cli package installed. If not, follow the first steps of the installation guide.

Preparing the MySQL Database

After that, you need to install and configure MySQL. Ghost 0.11.X used SQLite3 by default, so you probably haven’t setup MySQL yet. First, install the required packages as root.

# aptitude install mysql-server

Then, initialize and secure your installation:

# mysql_secure_installation

Finally, login into MySQL and create the database, user and proper permissions for the ghost user:

# mysql -u root -p
(insert password here)
mysql> create database yourblogname;
mysql> CREATE USER 'yourbloguser'@'localhost' IDENTIFIED BY 'yourpassword';
mysql> grant create,delete,insert,select,update,alter ON yourblogname.* TO 'yourbloguser'@'localhost';
mysql> flush privileges;

Launching the Ghost Install Process

Next, we can create a directory and call ghost-cli to start the installation process:

# mkdir /var/www/html/yourghostblog
# chown ghost:ghost /var/www/html/yourghostblog
# cd /var/www/html/yourghostblog
# ghost install

You will be greeted with a beautiful “you are about to destroy the world” warning message:

, How To Update To Ghost 1.0 In Debian And Apache, Micropreneur Life

Type “Yes” anyway. We Debian users love danger, don’t we?

Initial Configuration Questions

Then, you will be asked some questions about your setup.

? Enter your blog URL: http://yourblogname.com
? Enter your MySQL hostname: localhost
? Enter your MySQL username: yourbloguser
? Enter your MySQL password (skip to keep current password): [hidden]
? Enter your Ghost database name: yourblogname

Next, it will ask you specific questions about the installation. Here is where the limitations of the new Ghost release come to the fore. You should answer this:

? Do you wish to setup Nginx? No
i Setting up Nginx [skipped]
Task ssl depends on the 'nginx' stage, which was skipped.
i Setting up SSL [skipped]

Great, so no Nginx means no SSL configuration, of course. Next, it asks you about MySQL.

? Do you wish to setup "ghost" MySQL user? Yes
MySQL user is not root, skipping additional user setup
i Setting up "ghost" mysql user [skipped]

Errr… well, thanks for that. Next, Systemd.

Do you wish to setup Systemd? Yes
✓ Creating Systemd service file at /var/www/html/yourblogname/system/files/ghost_yourblogname-com.service
Running sudo command: ln -sf /var/www/html/yourblogname/system/files/ghost_yourblogname-com.service /lib/systemd/system/ghost_yourblogname-com.service
✓ Setting up Systemd

As you can see, the installation incorrectly creates a symbolic link on /lib/systemd/system/, when it should go into /etc/systemd/system. This means that your ghost blog won’t launch on a system reboot.

Finishing the Installation

Finally, the installation process asks you to start ghost, but don’t hold your breath, it will throw an error:

? Do you want to start Ghost? Yes
✓ Validating config
✓ Starting ghost
x Starting ghost
A ProcessError occurred
Error occurring running command '/bin/sh -c sudo systemctl enable ghost_yourblogname-com --quiet
Exit code: 1

Obviously, the file cannot be found because it’s not in the right place.

However, you should be able to start the Ghost installation manually by running a ghost run on the blog directory. Try it now and navigate to that URL in your browser. You should be able to reach the blog, yay! 🎉

Making Sure Ghost Keeps On Running

In order to keep Ghost alive in our Debian boxes, we need to copy the file, or create a new one in /etc/systemd/system. I created one called /etc/systemd/system/ghost.service, with this content.

[Unit]
Description=Ghost systemd service for blog: yourblogname
Documentation=https://docs.ghost.org

[Service]
Type=simple
WorkingDirectory=/var/www/html/yourblogname
User=1001
Environment="NODE_ENV=production"
ExecStart=/usr/bin/nodejs /usr/bin/ghost run
Restart=always

[Install]
WantedBy=multi-user.target

The installation guide instructs you to run ghost start and ghost stop to start and stop the ghost instance respectively. However, those commands won’t run, they will throw an error.

/usr/lib/node_modules/ghost-cli/node_modules/yargs/yargs.js:1079
      else throw err
           ^

Error: unknown
at module.exports.sync (/usr/lib/node_modules/ghost-cli/node_modules/execa/index.js:298:26)
at handleShell (/usr/lib/node_modules/ghost-cli/node_modules/execa/index.js:100:9)

Apparently, the only command that runs is /usr/bin/ghost run, that will create a new instance of Ghost directly.

The best way to test that it’s working is rebooting your server. Upon start, you should be able to see the node instance on port 2368, and navigate to your blog in a browser.

Proxy Redirection For Apache

If you were running Ghost previously, I assume you already had a proxy in place to redirect apache requests to your Ghost port. If not, you just need to setup an entry in /etc/apache2/sites-available/ with this content:

<VirtualHost *:80>
    # Domain name
    ServerName yourblogname.com
    ServerAlias www.yourblogname.com

    #HTTP proxy/gateway server
    ProxyRequests off 
    ProxyPass / http://127.0.0.1:2368/ 
    ProxyPassReverse / http:/127.0.0.1:2368/     
</VirtualHost>

Additionally, you may want to add an HTTPS entry to port 443 with your certificates.

No, You Won’t Be Able To Update Ghost

Unfortunately, the fact that ghost commands are broken means that you cannot run the command that’s supposed to update your Ghost installation:

ghost update

This command will throw the exact same error that ghost start or ghost stop. This is certainly a big deal breaker, because you won’t be able to update your ghost installation anymore.

Unfortunately, the Ghost team has decided that they won’t be offering support to anyone without Ubuntu+Nginx. I really hope they will change their minds, because otherwise I really need to consider going back to WordPress again. Yes, it’s slow and clumsy, but I can update it by just clicking a button.

Update Your Theme And Import Your Content Back

Once you have the installation ready, and you are certain that it will survive a system reboot, you need to update your theme. Fortunately, the guys at Ghost put together a page where you can check if your theme is ready for the new version. If the author of your theme hasn’t already updated it to Ghost 1.0, there’s also a page with detailed instructions on how to update the theme yourself.

Luckily for me, the author of the Boo theme updated it for the new release. I don’t know if I would like to go through the process of manually updating it myself.

Finally, you should update your content back. This is as simple as coping the contents of the /content/images folder from your old installation, and using the Import Content feature of the “Labs” section of the admin interface.

In Summary

The Ghost team decided to limit the first big release of Ghost to just Ubuntu and Nginx users. That is a huge step backward and an unfortunate decision in my humble opinion.

Having installed and worked with Ghost 0.11.X happily in my Debian+Apache2 box in the past, I cannot understand why they decided to implement such an opinionated installation mechanism. Nowadays, it’s certainly not that hard to implement a universal installer for most Linux distributions.

With this decision, they are neglecting a large number of users, including me.

As a result, I wrote this post to share with you how to update to Ghost 1.0 in Debian and Apache. I hope it can be helpful even for other Linux distributions like Mint or CentOS.

However, the process is inherently broken, as you won’t be able to properly update your Ghost installation ever. Thus, I recomend you to wait and share your discomfort with the guys at Ghost, hoping that they will change their minds and implement a more universal installer for us, Linux and MacOS users.

Nevertheless, if you have found a way of making the whole installation process work correctly, including ghost start, ghost stop and ghost update, please let me know.

❤️ Did you enjoy this article?

If you found this content useful, consider showing your appreciation by buying me a coffee using the button below 👇.

, How To Update To Ghost 1.0 In Debian And Apache, Micropreneur LifeBuy me a coffee
(Visited 220 times, 2 visits today)

4 Comments

  1. Trevor Mack September 3, 2017 at 12:29 am

    I have had similar conversations within their Slack channel where they were more than open to having community support for other “non officially supported tech stacks”. Having community effort drive these features makes a lot of sense as there are many different combinations of front door / reverse proxies in use today especially given the craze in the tech industry around micro services… I heavily doubt their decision for supporting Ubuntu+nginx came out of no where. Is it great? For some or maybe even the majority of users maybe, for me like you no unfortunately not.

    Hopefully we can spend the few hours here and there to make it better for the next blogger/techy coming to ghost. I doubt journalists that have a little technical knowledge or at least can follow installation instructions care at all what linux distro is supported nor what reverse proxy… Well they probably don’t know what or why you need one of those anyways.

    My tech stacks for ghost: nginx, raspbian

    Reply
    1. nacho September 3, 2017 at 4:31 pm

      Hi there Trevor. Thanks for your comment.
      Well, in my mind “non-officially supported tech stacks” and “community effort” sound to me like “you are on your own, ask some folks out there”. In my humble opinion, this is a wrong approach, enough to ruin their chance to beat WordPress.

      Ghost was on the verge of becoming something great, of becoming the next, improved WordPress. Right now, its allure was limited to geeks or techie guys, but it had the potential of becoming bigger… with just a little more user-friendliness.

      However, the ghost staff opted for the opposite direction. I am not going to install a blog that I cannot update, or I blog where I need to rely on “non official stacks” or the community support. It’s sad, but this blog runs now on WordPress.

      However, I applaud you for sticking to Ghost… if that works for you.

      Reply
  2. Pingback: Working on an iPad Pro for Bloggers - Micropreneur Life

  3. Sam February 8, 2018 at 7:23 am

    I’m also left wondering what happened to Ghost… and will also be moving my blog to WordPress. Wish it wasn’t so, but it’s too much effort for a hobby. (I’m on CentOS and httpd)

    Reply

Leave A Comment

Your email address will not be published. Required fields are marked *