Ghost CMS advices
After some period of problems related to the complicated system dependent on many different node.js components, I had to redo the mechanism by which my GhostCMS based blog is launched on FreeBSD 13/stable.
First my experience on what to do when you find yourself in the situation where you can no longer start the Ghost app. In short, my approach is simple - don't bother trying to figure out which module is causing the problem. Just start clean.
Go to /usr/local/lib/node_modules directory on your freebsd machine.
cd /usr/local/lib/node_modules
Save the list of directories you see somewhere in a text editor.
ls -1 > ~/node-modules-list-backup.txt
Rename node_modules directory to node_modules.bak just in case.
cd /usr/local/lib/ ; mv node_modules node_modules.bak
Reinstall www/npm again.
portmaster www/npm
Reinstall ghost-cli again.
npm install -g ghost-cli@latest
Install pm2 for easy management of node.js applications. Previously I used forever and the method already described in my blog here, but that's how I ended up with the incompatible combination of node-modules.
npm install -g pm2@latest
Here comes the point, how do you tell "pm2" to start and keep your blog (node.js app) up and running? Because I want the entire site to run on behalf of an unprivileged account, I've created an account called "ghost" for this application. I personally do the initial test launch like this:
sudo -u ghost -s
NODE_ENV=production pm2 start current/index.js --name GhostCMS
I recommend also adding pm2-logrotate to keep your logs from overflowing.
pm2 install pm2-logrotate
After you are convinced that your site is working correctly, it is good to save the thus made configuration of pm2 running
pm2 save
You can monitor the behavior of a running node.js application using the following command
pm2 monit
To be able to restart pm2 every time the FreeBSD host is restarted, so that it can in turn start and keep the ghost application running, you need to add the necessary rcd script to /usr/local/etc/rc.d/. For your convenience, I am implementing my version relying on already installed security/sudo. If missing install it
portmaster security/sudo
The standard built-in pm2 way of creating a startup using command "pm2 startup rcd -u ghost" does not create a convenient and working script, at least for me. My variant is published on github and you can easily download and install it like this.
cd /usr/local/etc/rc.d &&\
fetch https://raw.githubusercontent.com/jostreff/ghost-rc.d-script/main/pm2 -o pm2 &&\
chmod +x pm2
If you need to automate the process of updating your self-hosted ghost cms - take a look at this https://github.com/jostreff/ghost-cli-update/blob/main/ghost-cli-update