Ghost on Pi

Ghost is open source blogging platform written in Node.js that offers self hosting and hosted service.

We are going to self host Ghost on a Raspberry Pi.

This guide will take you through the steps of setting up a self hosted Ghost production environment.

I am working on this setup with a clean install of Raspbian and headless setup, you can lean how to enable SSH from here.

You can SSH into your Raspberry Pi(Mac/Linux). If you are a Windows user you need to use Putty

ssh pi@the-ip-address-of-the-pi “

The default username and password of the Raspbian install is.

user: pi

password: raspberry

Installing Node.js

Downloading Node.js(NPM ships with it)

wget http://node-arm.herokuapp.com/node\_latest\_armhf.deb “

Installing Node.js(required by Ghost)

sudo dpkg -i node\_latest\_armhf.deb “

Installing Sqlite required by Ghost.

sudo apt-get install sqlite3 “

Installing NGINX(used to reverse proxy Ghost)

sudo apt-get install nginx-full “

Installing Supervisor(to manage Ghost)

sudo apt-get install supervisor “

Ghost setup

This will download the latest version of Ghost.

wget https://ghost.org/zip/ghost-latest.zip “

Unzipping the folder we just downloaded.

unzip ghost-latest.zip -d Ghost “

Set `` Ghost/` as the current directory`

cd Ghost/  

Installing dependencies used by Ghost using `` NPM`.`

npm install --production  

Run the command below to see everything works fine.

npm start --production  

Time to setup turn Ghost into a service.

Creating the <code class="highlighter-rouge">ghost.conf file for Supervisor to manage Ghost.

touch /etc/supervisor/conf.d/ghost.conf  

Editing the file, you can choose any editor you like.

nano /etc/supervisor/conf.d/ghost.conf  

Add these lines to the `` ghost.conf` file.`

[program:ghost]  
command = npm start --production  
directory = /home/pi/Ghost/  
user = pi  
autostart = true  
autorestart = true  
stdout\_logfile = /var/log/supervisor/ghost.log  
stderr\_logfile = /var/log/supervisor/ghost\_err.log  
environment = NODE\_ENV="production"  

Now save the file, in nano CTRL + X + Y.

You can start Supervisor, if it did not start after installing.

service supervisord start  

Now set Supervisor to run on startup.

sudo update-rc.d supervisord defaults  

Starting Ghost service we just created.

sudo supervisord start ghost  

Ghost will be running in production in port 2368.

Reverse proxying Ghost with NGINX.

Editing the <code class="highlighter-rouge">default file.

nano /etc/nginx/sites-enabled/default  

Add these lines

server {  
listen 80;  
server\_name yourdomain.com; # Change this to your hostname```  
location / {  
proxy\_pass http://127.0.0.1:2368;  
proxy\_set\_header Host $host;  
proxy\_set\_header X-Real-IP $remote\_addr;  
}

}

Save the file

Now restart NGINX.

service nginx restart



Now visit your Raspberry Pi ip address. You will be presented with a beautiful setup screen.

You can edit the Ghost hostname and other settings by editing the `<code class="highlighter-rouge">config.js` stored in the Ghost folder.

Services like [DynDNS](https://dyndns.org) can be used to manage hostname, if you want your Ghost blog to be public and use a domain name instead of the ip address.

If you have any questions or problem, leave a comment below.
I'm Feeling Lucky
Darryl Dias

Written by Darryl Dias

The AI guy and founder of Caprycon, building AI-powered tools, exploring emerging technologies, and sharing insights from the world of artificial intelligence