Darryl Dias

19 Sep 2015 in

[Ghost](https://ghost.org) is open source blogging platform written in [Node.js](https://nodejs.org) 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 `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 `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 `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.``````