All of us like to write blogs to share our experience. Most of us are not doing because of the work involved in setting up a blog and formatting the posts. What if we can do it in a much faster and simpler way in few minutes? That will be awesome, right?
Ghost
I never thought that blogging can be this much easier before I tried Ghost. Ghost is a blogging engine built using node.js and is open-source. You can sign up for a premium account in ghost website and they will setup your blog in few seconds. If you want it to be free, you can install ghost in any hosting providers of your choice and this will cost nothing but your time. Here lets see how we can get a ghost blog up and running on Heroku for free.
Versions Used
- Ghost - 0.5.x, 0.6.x
- Nodejs - v0.10.25
- Ubuntu - 14.04
Step 1: Setup Heroku account
Go to Heroku site and create an account using your email address. This is free. No credit card or any other payment information required.
Step 2: Setup Heroku toolbelt
Install Heroku toolbelt in your system. The tool is available for all the most popular platforms. Login to your heroku account from the terminal using the command
heroku login
This will setup your heroku account in your system and will upload SSH key from your system to your heroku account.
Step 3: Setup Git
If you are not using git, download and install git from Git SCM. You can learn more about git from the presentation on Slideshare.
Step 4: Create and clone heroku app
Method 1: Login to your heroku account and create an application by giving a name of your choice. The URL of your heroku application will be yourappname.herokuapp.com
. After creating the application, clone it to your system using the command
git clone git@heroku.com:yourappname.git
Method 2: You can also create heroku application using the command
heroku create yourappname
You can use any of these methods to create heroku application. If you don't specify your app name in command line, heroku will choose one for you.
Then open the cloned heroku app directory in terminal.
Step 5: Create Heroku database
Create a database in heroku using the following commands which will be used for our blog
heroku addons:add heroku-postgresql:dev
This command will output a message similar to Attached as HEROKU_POSTGRESQL_BRONZE_URL
. Here note down the name of name of the database URL. Use the following command to set the database URL
heroku pg:promote HEROKU_POSTGRESQL_BRONZE
Step 6: Install node.js
Download latest version of node.js from its download page and install it. If you are installing it from the source code, you can use the follwing commands.
tar -zxvf node-latest.tar.gz
cd [version of node that was downloaded]
./configure
make
sudo make install
Step 7: Install Ghost
Download latest version of ghost from its download page. Extract the downloaded file and cd into the extracted directory. Then install it using the following command
sudo npm install --production
Step 8: Test ghost configuration
Run ghost locally using the command given below and make sure that everything is installed successfully
sudo npm start
Step 9: Specify database backend
Ghost uses SQLite by default. We need to specify a setting to use postgres database from heroku. To do this add the following line in the dependencies section of package.json
in the root directory.
"pg": "latest"
Do not include a comma at the end of last value, as this will lead to an error (I faced it in heroku).
Step 10: Declare Procfile
Procfile will be used to decalre what command should be executed to start a web dyno. Create a text file in the root directory of your application with the following content
web: node index.js --production
This will be used to start your application during each deployment.
Step 11: Production configuration
The settings of your application needs to be modified to match your heroku app settings. These settings need to be modified in the production
section of config.js file found in your app root directory.
Step 11.1: URL configuration
Modify the URL to match the URL of your blog application to be hosted.
Step 11.2: Mail configuration
Configure your mail settings to receive email notifications from you ghost blog. If you forget your admin password, email is the only way reset your password. I'm here giving settings specific to Mandrill email account. If you already don't have a mandrill account, create one at Mandrill website and get the API key which will be your mail password. Use the following commands to set username and password in your heroku environment.
heroku config:set MANDRILL_USERNAME=your_mandrill_username
heroku config:set MANDRILL_APIKEY=your_api_key
Then replace the mail settings with the below given settings
mail: {
transport: 'SMTP',
host: 'smtp.mandrillapp.com',
options: {
service: 'Mandrill',
auth: {
user: process.env.MANDRILL_USERNAME,
pass: process.env.MANDRILL_APIKEY
}
}
},
Step 11.3: Database configuration
Login to your heroku account and go to databases tab found in the top. Click on the database url you configured in Step 5. Setup the database details in your heroku account by using the commands given below
heroku config:set POSTGRES_HOST=host
heroku config:set POSTGRES_USER=user
heroku config:set POSTGRES_PASSWORD=password
heroku config:set POSTGRES_DATABASE=database
Then replace the database settings in config.js with the settings given below
database: {
client: 'pg',
connection: {
host: process.env.POSTGRES_HOST,
user: process.env.POSTGRES_USER,
password: process.env.POSTGRES_PASSWORD,
database: process.env.POSTGRES_DATABASE,
port: '5432'
},
debug: false
},
Step 11.4: Port Configuration
Then replace server settings in config.js as given below
server: {
host: '0.0.0.0',
port: process.env.PORT
}
Also use the following command to make sure that your app's production setting is being used.
heroku config:set NODE_ENV=production
Without this command, the app didn't work.
Step 12: Deploy to heroku
We are ready to push the application to heroku now. You can do that using the command
git push heroku master
Sometimes you may have to use the command
git push origin master
Step 13: Scale web dyno
Web dynos are processes that will run your application. You need to increase your app's web dyno to 1. Heroku offers only one web dyno for free. If you need more than one web dyno, you need to pay heroku. You can scale the web dyno using the following command
heroku ps:scale web=1
Step 14: Adding custom domain (optional)
If you like to use custom domain for your heroku application, you can do so by adding the domain to your herokuapp and configuring CNAME in your domain DNS editor. Add the domain to your heroku app using the following command.
heroku domains:add www.example.com
Configure CNAME in your domain DNS editor with host as www and Points to as yourappname.herokuapp.com.
Your ghost blog should be live on heroku now. If you are facing any issues, you can check heroku logs using the command
heroku logs
Now we have successfully hosted a ghost blog on heroku for free. You can access your blog on your-domain
and your blog's admin on your-domain/ghost/
. Feel free to post your feedback and questions as comments.