It took me ~5 hours to finally take a screenshot of this


A couple of notes (mainly for myself to refer to in the future):

  • It looks like Ghost prefers to have node upgraded through NodeSource Node.js Binary Distributions (source1, source2), but nvm works. Just make sure you get 16.13.0 (I thought 16.x would work generally, however 16.0.0 failed, so had to pin to the exact version)
  • Make sure that ExecStart in your systemd service file points to the current node version (which can be found through whereis node). Also after updating, cp the file to the systemd folder (or create a symlink... I have no idea why the one under my <blog root>/system/files is not symlink to the one under /etc/systemd/system/) and run systemctl daemon-reload so that changes may take effect.
  • Somehow my production config has database = mysql2... if running into error you'll need to manually run ghost config set database.client mysql (this command will show up if you have config error when running ghost start)
  • It's possible (so far) to upgrade to MySQL 8 on Ubuntu 16.04, just remember to back up all the data. mysqldump -u root -p --all-databases > alldb.sql (source)
  • If ghost start keeps exiting with errors, try to run ghost run first and examine the console. You may see errors like WARN Can't connect to the bootstrap socket (localhost 8000) ECONNREFUSED but that's okay, the CLI will attempt 3 times and eventually give up. When starting as normal the production config file config.production.json should NOT have any bootstrap socket related info.
  • Reading the error logs definitely helps... journalctl -u your_ghost_service -n 50 and fix accordingly...

In the short run I don't anticipate another major update soon, unless another security vulnerability is exposed. Or maybe, as wzyboy has suggested... time to move to Lektor?