Finally, my Ghost blog is now online after many hours tried to install on different Linux OS from various tutorial I've ever read. Need big efforts to find tutorial that really works to install Ghost on Ubuntu 14.04. And, you're lucky, here I would like to share my experience about how to install it.

Why Ghost? Good question. For an anti-mainstream people like me and many others, using Wordpress is too mainstream. Have to find other platform alternatives that suitable for our blogging need. And Ghost is awesome: simple, focus to content, minimalist and clear design. Yes, it's also gadget friendly.

Don't talk too much, let's do it!

# Ingredients
1. VPS (I am using VPS from Vultr with RAM 786 MB. Ghost is efficient, also works in smallest RAM). 
2. Ubuntu 14.04 and higher 
3. Putty or Bitvis application for SSH access.  
4. Two cups of coffee (for me of course with 1 pack cigarette).

First, Install Ubuntu update:
# sudo apt-get update # sudo apt-get upgrade -y

Install Node.js

sudo aptitude install -y build-essential zip nano wget
wget http://nodejs.org/dist/node-latest.tar.gz
tar -xzf node-latest.tar.gz
cd node-v*
./configure
make
sudo make install

Install Ghost:

sudo mkdir -p /var/www/
cd /var/www/
sudo wget https://ghost.org/zip/ghost-latest.zip
sudo unzip -d ghost ghost-latest.zip
cd ghost/
sudo npm install --production
sudo nano config.example.js
Just edit URL: http://www.satudua.xyz (or different domain you like) but don't change IP 127.0.0.1 # because we will use Nginx proxy to address the frontend IP Address. 

Create user for installing Ghost:

sudo adduser --shell /bin/bash --gecos 'Ghost application' ghost
sudo chown -R ghost:ghost /var/www/ghost/
su - ghost
cd /var/www/ghost/
npm start --production
# (will appear) The Ghost is running
# Hit CTRL+C for close 

Install Nginx proxy:

su - root
sudo apt-get install nginx -y
cd /etc/nginx/conf.d/
touch satudua.conf (# or othername.conf you like)
nano satudua.conf

# Paste this vhost configuration:
server {
listen 80;
server_name www.satudua.xyz;
location / {
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   Host      $http_host;
    proxy_pass         http://127.0.0.1:2368;
   }
}

cd ..
sudo vim nginx.conf
# comment it out with insert # mark on the line 'include /etc/nginx/sites-enabled/*;' (become like this '#include /etc/nginx/sites-enabled/*;' 
sudo service nginx restart

Install pm2 to stop or start Ghost service:

sudo npm install pm2 -g --unsafe-perm
su - ghost
echo "export NODE_ENV=production" >> ~/.profile
source ~/.profile
pm2 kill
pm2 start /var/www/ghost/index.js --name ghost

Install self-signed certificate for accessing via HTTPS (wow this really excellent, personal blog but with SSL-SPDY connection):

su - root
sudo mkdir /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
sudo vim /etc/nginx/conf.d/satudua.conf

Add port SSL:

server {
   server_name satudua.xyz www.satudua.xyz;
   return 301 https://$server_name$request_uri;
}

And detail vhost nginx configuration for satudua.conf will be like this:

server {
    server_name satudua.xyz www.satudua.xyz;
    return 301 https://$server_name$request_uri; 
}
server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
server_name www.satudua.xyz;
location / {
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   Host      $http_host;
    proxy_pass         http://127.0.0.1:2368;
   }
}

Finish, you can restart Nginx:

sudo service nginx restart

Ghost Blog has ready to access via https://satudua.xyz or https://domainnameyourinsert.com

This Ghost setting works and I added with additional setting for SSL-SPDY (for security reason). All non https connection (ex. user only insert http:// or www, or just domain name in browser) will automatically redirect to https.

Note: if you use Cloudflare for DNS setting, please change SSL-SPDY setting from "Flexible" to "Full".

Let me know if you have further question to discuss.

*reference: read this