Still unable to update self-hosted Ghost blog

I am getting to the point of considering getting back to Wordpress. I mean, I have an IT background and have been managing Linux servers for years in the past, so I know a thing or two about *Nix systems, but Ghost is making me wonder why I chose this platform.

So perhaps some kind soul can help me:

  • I am running Ghost 5.75 on Debian 11.
  • Initially I have node 16.X
  • If I try to update Ghost to 5.80, it won’t let me because it requires Node 18.X.
  • So I install Node 18 via nvm
  • Then I run ghost update and it fails because the version of Node should be 16???
  • I tried running npm -g to install the latest update of the Ghost cli without results.
  • The ending result, if I do a --force, is that the version 5.75 is erased (???) from the versions directory and of course the new version fails to install so the versions/ folder end up empty (congrats! :)
  • Then I said: ok, let’s try to install ghost in a new directory from scratch and then I migrate the JSON config files and content files. No luck, as apparently something has changed and it asks me for the MYSQL database name, meaning it runs on MySQL now and previously I was running it on SQLite .db file (computer (config) says yes):
"database": {
    "client": "sqlite3",
    "connection": {
      "filename": "/var/www/html/micropreneur_new/content/data/ghost-local.db"
    }
  },

SO it got to a point where I had to restore my Linode backup from a couple of days ago.

Without entering in WHY is making Ghost so difficult to upgrade and have all these issues (I mean, imagine if a non-IT savvy guy tries to upgrade this, freak out!), can any kind soul please help me figure out how the heck can I upgrade my Ghost blog?

I see two things happening here:

  • What’s with this Node versions loop that won’t allow you to upgrade from either node 16 or node 18?
  • Should I migrate my database to MySQL before? How can I do that?

Message when I am in 5.75.1 with Node 16 and try to force an update: (same with 5.80, 5.82)

✔ Checking system Node.js version - found v16.18.1
ℹ Ensuring user is not logged in as ghost user [skipped]
ℹ Checking if logged in user is directory owner [skipped]
✔ Checking current folder permissions
✔ Checking memory availability
✔ Checking free space
✔ Checking for available migrations
✔ Checking for latest Ghost version

# 5.75.1

* 🐛 Fixed deleting members with email disabled (#19222) - Simon Backx

---

View the changelog for full details: https://github.com/tryghost/ghost/compare/v5.75.0...v5.75.1

💻 We're looking for DevOps engineers to join Ghost: https://careers.ghost.org/devops-engineer

✔ Fetched release notes
✖ Downloading and updating Ghost to v5.75.1
A SystemError occurred.

Message: Ghost v5.75.1 is not compatible with the current Node version. Your node version is 16.18.1, but Ghost v5.75.1 requires ^18.12.1

Ok, so I install Node 18 and then…:

Running in development mode

You are running an outdated version of Ghost-CLI.
It is recommended that you upgrade before continuing.
Run `npm install -g ghost-cli@latest` to upgrade.


✖ Checking system Node.js version - found v18.20.2
ℹ Ensuring user is not logged in as ghost user [skipped]
ℹ Checking if logged in user is directory owner [skipped]
✔ Checking current folder permissions
✔ Checking memory availability
✔ Checking free space
One or more errors occurred.

1) Checking system Node.js version

Message: The version of Node.js you are using is not supported.
Supported: ^12.22.1 || ^14.17.0 || ^16.13.0
Installed: 18.20.2
See https://ghost.org/docs/faq/node-versions/ for more information

Debug Information:
    OS: Debian GNU/Linux, v11
    Node Version: v18.20.2
    Ghost Version: 5.80.2
    Ghost-CLI Version: 1.23.1
    Environment: development
    Command: 'ghost update 5.75.1 --force'

Edit: I was able to get my blog back up by restoring a backup from a couple of days ago, but now I am so scared of trying to update it…

I’d appreciate your help a lot.
A frustrated Ghost blog user :smiley:
Thank you.

Yes, that would simplify the upgrade process. I presume there are already good Ghost SQLite to MySQL migration guides out there, but ask a separate question here if you get stuck.

Addressing Node version problems

I also ran into some Node version upgrade problems. Here’s some general advice:

  1. Don’t use nvm for installing node. That tool switches between Node versions based on environment variables. This makes it fragile. For example, Ghost is run by systemd, which tightly controls the environment variables that are set for the the service. I doubt anything installed via nvm is going to be visible to the systemd service. The official Ghost docs recommend installing Node from a custom repo, so you could try that. How to install & setup Ghost on Ubuntu 20.04 or 22.04

Time to containerize?

For a long time I have advocated for using the Ghost CLI method of installing recommended by the official install doc. But as your case and mine illustrate, even seasoned Linux managers can get tripped up by Node version upgrade problems.

Containers eliminate that issue, by bundling the precise required Node version needed with the software itself.

So when I rebuilt my server most recently, I did not install Node at all. Instead, I installed Ghost in containers.

Now, containers bring their own set of complexity, but they are also extremely popularly and lots of people understand how to solve container-related problems now. The Ghost container on Docker hub has over 100 million downloads at this point . If you go that route, you have set up for yourself details like making sure the service starts at boot an handling a reserve proxy for it yourself, but there are a lot of guides for setting up Ghost in a container out there at this point.

Personally, I use Ansible and Podman at work to manage containers so that’s how I’m managing mine: Interested in Ansible Role to install Ghost to run with podman containers / systemd / private networking?

Docker is more popular and their are plenty of guides for that:

1 Like

Hi @Micropreneur, to complement thoughts of @markstos about Time to containerize I want to share information for consideration about slightly different by similar approach

I use Proxmox VE and I have LXC contrainer with Ubuntu. It’s definitely not the same as a Docker, but also has many benefits especially when it comes to the backups and restore. Before making any updates I simply backup entire system together with OS.

Sure, updates of the Ghost will be pretty much the same task, same problems, but you safely can revert changes anytime in a few seconds.
My point here that containers make managing of Ghost easier as @markstos said above.

More about my way you can find in my blog, there is a guide about self-hosted Ghost

Encountered the same problem and was going in circles for a few hours trying to find versions of ghost that would support both node 16 and 18. I couldn’t find one.

My problem went away as I was trying to make a fresh ghost install.
I updated ghost-cli and got to working until I got lazy in setting up mysql. I then went back to my original install that only supported node16 but used node18 and it just worked.

My guess is that the ghost update requires the later node versions(18) while an outdated ghost-cli requires an earlier node version(16).

Hi @ianni , to quickly jump between different versions of node you can use tool called n. See my post in another thread:

Of course, it’s not a solution here and if I understand your situation it will be probably better to update both: Ghost and CLI to the latest version, so, you won’t need to jump between node 16 and 18.

Just wanted to mention that I am facing the same exact issue trying to install a fresh instance of Ghost for another blog. Opened a new thread for it.

@ianni thanks! I’ve tried updating ghost-cli to the latest version and run a new instance and still entering this absurd cycle of node dependencies that won’t satisfy Ghost-CLI, no matter what.

So frustrating because I can’t easily locate an alternative to Ghost that I like so much (OpenSource, self-hosted, nice minimalist interface, markdown)… But truly frustrated with the installation process.

Tried that, not working even for a fresh install on a new instance of Ghost, with everything updated