What is Ghost? To stop short of shouting my love for it to the stars, it's a really great ( developing ) blogging platform focused on content creation with a strong emphasis on putting content first.

Ok, that's great, but why would one, mostly focused on .NET technologies, consuming large amounts of Azure kool-aid, ever consider moving his/her own custom-developed MVC Markdown blog site with a shiny administrative interface to something built on node.js?

Speed. I'm talking "ludicrous speed".

Ghost Is...

  • just a blogging platform, nothing more, nothing less
  • cross-platform, built on node.js
  • configured to use a SQLite database which requires no configuration by default (MySQL also supported)
  • 100% markdown syntax for blog content
  • fully themeable ( Ghost Open Marketplace, Themeforst Ghost Themes )
  • ridiculously simple to publish new content via it's unique, side-by-side markdown vs. live preview editor

Installing Ghost on Windows

Installation applies to current Ghost 0.4.2 version. Thank you to @schwarty for his guide on installation, most of the following was adapted from it.

  1. Install Node.js
  2. Install IIS Node for IIS 7.x/8.x ( x86 or x64 )
  3. Install IIS URL Rewrite 2.0
  4. Download and extract Ghost
  5. Open a command prompt and navigate to the extracted ghost directory
  6. Type npm install --production (note the double hyphens)
  7. Type npm start to start Ghost in development mode
  8. Open a browser and navigate to: http://127.0.0.1:2368 (will create a config.js file needed for production)
  9. Change the url to: http://127.0.0.1:2368/ghost and create an admin user to login into the Ghost admin

Congratulations! You're now running a development setup of the Ghost blogging platform using the localhost.

Configuring for Production

For further production setup & configuration, you will need to update the following:

Update the config.js file located in the root directory and set the port for the production environment configuration (do not use quotes):

port: process.env.PORT

Update the core/index.js file to set the default environment configuration to be production:

process.env.NODE_ENV = process.env.NODE_ENV || 'production';

Create a web.config file in the ghost root directory:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <httpErrors existingResponse="PassThrough" />
    <handlers>
      <add name="iisnode" path="index.js" verb="*" modules="iisnode" />
    </handlers>
    <iisnode
      node_env="%node_env%"  
      loggingEnabled="true"
      nodeProcessCommandLine="&quot;%programfiles%\nodejs\node.exe&quot;"
      />
    <rewrite>
      <rules>
        <rule name="Ghost">
          <match url="/*" />
          <conditions>
            <add input="{PATH_INFO}"
                 pattern=".+\.js\/debug\/?"
                 negate="true" />
          </conditions>
          <action type="Rewrite" url="index.js" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

Optionally, application pool identity Read/Write permissions may need to be set on the following directories:

/content/data
/content/images

Please note: If you application pool is using the default ApplicationPoolIdentity, the above step may not be necessary.

Final Thoughts

Granted, the previous custom-built ASP.NET MVC solution also used Markdown syntax (stored in .txt files), so migration was little effort. Literally copy and paste, re-upload existing images using ghost's live preview inline image editor (entering the following in markdown to expose).

!["image alt text"]()

Every ounce of energy expensed in moving the Arroyocode Blog to Ghost has been time well spent, especially considering the amount of time saved generating new blog posts.

Ghost enables users to do more in much less time than other existing blog platform solutions. Hopefully you'll find a similar experience and get your Ghost on!