Skip to content

Instantly share code, notes, and snippets.

@freekrai
Last active September 7, 2015 16:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save freekrai/816df0af4e8f32f2772b to your computer and use it in GitHub Desktop.
Save freekrai/816df0af4e8f32f2772b to your computer and use it in GitHub Desktop.
Ghost in the middle

Here is how to run Ghost as middleware in a /blog setup.

  1. Create a new app (or add ghost to your existing express app)
npm install express ghost
  1. Copy the node_modules/ghost/content/ folder to your app's folder as content/

  2. Configure the include ghost-config.js file. It's important to make sure your ghost URLs end with /blog/ as that lets the CSS, JS, whatnot match up.

  3. Download ghost-in-the-middle.js from this gist and download it to your app's root folder.

  4. Use the included index.js to see how to include Ghost

// # Ghost Configuration
// Setup your Ghost install for various [environments](http://support.ghost.org/config/#about-environments).
// Ghost runs in `development` mode by default. Full documentation can be found at http://support.ghost.org/config/
var path = require('path'),
config;
config = {
// ### Production
// When running Ghost in the wild, use the production environment.
// Configure your URL and mail settings here
production: {
url: 'http://my-ghost-blog.com/blog/',
mail: {},
database: {
client: 'sqlite3',
connection: {
filename: path.join(__dirname, '/content/data/ghost.db')
},
debug: false
},
server: {
host: '127.0.0.1',
port: '2368'
}
},
// ### Development **(default)**
development: {
// The url to use when providing links to the site, E.g. in RSS and email.
// Change this to your Ghost blog's published URL.
url: 'http://localhost:2368/blog/',
// Example mail config
// Visit http://support.ghost.org/mail for instructions
// ```
// mail: {
// transport: 'SMTP',
// options: {
// service: 'Mailgun',
// auth: {
// user: '', // mailgun username
// pass: '' // mailgun password
// }
// }
// },
// ```
// #### Database
// Ghost supports sqlite3 (default), MySQL & PostgreSQL
database: {
client: 'sqlite3',
connection: {
filename: path.join(__dirname, '/content/data/ghost-dev.db')
},
debug: false
},
// #### Server
// Can be host & port (default), or socket
server: {
// Host to be passed to node's `net.Server#listen()`
host: '127.0.0.1',
// Port to be passed to node's `net.Server#listen()`, for iisnode set this to `process.env.PORT`
port: '2368'
},
// #### Paths
// Specify where your content directory lives
paths: {
contentPath: path.join(__dirname, '/content/')
}
},
// **Developers only need to edit below here**
// ### Testing
// Used when developing Ghost to run tests and check the health of Ghost
// Uses a different port number
testing: {
url: 'http://127.0.0.1:2369/blog',
database: {
client: 'sqlite3',
connection: {
filename: path.join(__dirname, '/content/data/ghost-test.db')
}
},
server: {
host: '127.0.0.1',
port: '2369'
},
logging: false
},
// ### Testing MySQL
// Used by Travis - Automated testing run through GitHub
'testing-mysql': {
url: 'http://127.0.0.1:2369',
database: {
client: 'mysql',
connection: {
host : '127.0.0.1',
user : 'root',
password : '',
database : 'ghost_testing',
charset : 'utf8'
}
},
server: {
host: '127.0.0.1',
port: '2369'
},
logging: false
},
// ### Testing pg
// Used by Travis - Automated testing run through GitHub
'testing-pg': {
url: 'http://127.0.0.1:2369',
database: {
client: 'pg',
connection: {
host : '127.0.0.1',
user : 'postgres',
password : '',
database : 'ghost_testing',
charset : 'utf8'
}
},
server: {
host: '127.0.0.1',
port: '2369'
},
logging: false
}
};
module.exports = config;
var ghost = require( 'ghost' )
function processBuffer( buffer, app ){
while( buffer.length ){
var request = buffer.pop()
app( request[0], request[1] )
}
}
function makeGhostMiddleware( options ){
var requestBuffer = []
var app = false
ghost( options ).then( function( ghost ){
app = ghost.rootApp
processBuffer( requestBuffer, app )
})
return function handleRequest( req, res ){
if( !app ){
requestBuffer.unshift( [req, res] )
} else {
app( req, res )
}
}
}
module.exports = makeGhostMiddleware
var express = require('express');
var path = require('path');
var ghost = require('./ghost-in-the-middle');
var app = express();
var parentApp = express();
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.use( '/blog', ghost({
config: path.join(__dirname, 'ghost-config.js')
}) );
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment