Install Ghost with Nginx and MySQL

Sep. 24, 2014

The steps I installed Ghost blog on Linode with Debian 7.5

Prepare

apt-get update
apt-get upgrade
apt-get install -y build-essential

Installing Nginx

apt-get install nginx

Install Node.js

Based on here

Setup with Debian (as root):

curl -sL https://deb.nodesource.com/setup | sudo bash -

Then install with Debian (as root):

apt-get install -y nodejs nodejs-legacy

Install MySQL

apt-get install mysql-client mysql-server

Secure MySQL

mysql_secure_installation

Restart MySQL

/etc/init.d/mysql restart

or

service mysql restart

Using MySQL mysql -u root -p to setup database:

CREATE DATABASE YOUR_DATABASE;

CREATE USER 'YOUR_USERNAME' IDENTIFIED BY 'YOUR_PASSWORD';

GRANT ALL PRIVILEGES ON YOUR_DATABASE.* TO 'YOUR_USERNAME';

exit

Install Ghost

Based on here

created /var/www/ghost as ghost folder

mkdir -p /var/www/
cd /var/www/
curl -L https://ghost.org/zip/ghost-latest.zip -o ghost.zip
unzip -uo ghost.zip -d ghost
cd /var/www/ghost

Then setup ghost environment

npm install --production
npm install mysql
npm install forever -g

Setup Ghost

Copy over the example config file and then edit it

cp config.example.js config.js

vim /var/www/ghost/config.js

Change production default url to your domain and setup MySQL database

url: 'http://YOUR_DOMAIN',
database: {
	client: 'mysql',
	connection: {
		host: 'localhost',
		user: 'YOUR_USERNAME',
		password: 'YOUR_PASSWORD',
		database: 'YOUR_DATABASE',
		charset: 'utf8'
	}
},

Run Ghost as background process

Fix all permission

chown -R www-data:www-data /var/www/ghost

Then run ghost as background process by forever (you can find other deply methods in here)

NODE_ENV=production forever start index.js

Setup Nginx

vim /etc/nginx/sites-available/ghost
server {
    listen 80;

    server_name example.com www.example.com;

    location / {
        proxy_redirect		off;
        proxy_set_header	X-Real-IP         $remote_addr;
        proxy_set_header	X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header	Host              $http_host;
        proxy_set_header	X-NginX-Proxy     true;

        proxy_pass			http://127.0.0.1:2368;
    }
}

Enable this site

ln -s /etc/nginx/sites-available/ghost /etc/nginx/sites-enabled/ghost

Restart nginx

/etc/init.d/nginx restart

Open Ghost

Now you can check http://YOUR_DOMAIN to see ghost in there.

Login http://YOUR_DOMAIN/ghost to setup your account.