How to install Ghost with NPM and Dokku
Today I installed Ghost, a blog app, on my very own server!
I installed it with dokku, a mini Heroku clone.
Installation notes
On the server, create an app
dokku apps:create blog
dokku config:set blog NODE_ENV=production
Turns out it worked best to install Ghost via npm, because it's already built.
I have it installed, but I need to setup a shared directory.
On the server, add the shared directory
dokku docker-options:add blog "-v /home/dokku/blog/shared:/app/shared"
dokku docker-options blog
So... I needed to modify Ghost and things got crazy. Turns out the npm package isn't directly what is in the repo. It contains the built files. So I had to build the files and add those to my fork (in a branch). After that, it worked!
Nice! It works! Hallelujah!
What's really nice is I have a repo that only has the bare minimum to run ghost plus a theme.
It looks like this:
/themes
/casper
config.js
index.js
package.json
README.md
Code samples
package.json
{
"name": "blog",
"version": "0.0.1",
"description": "blog.rchrd.net",
"main": "index.js",
"dependencies": {
"ghost": "rchrd2/Ghost#package"
},
"devDependencies": {},
"scripts": {
"start": "node index",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Richard Caceres",
"license": "ISC"
}
index.js
var path = require('path');
var ghost = require('ghost');
ghost({
config: path.join(__dirname, 'config.js')
}).then(function (ghostServer) {
ghostServer.start();
});
config.js
var path = require('path'),
config;
config = {
production: {
url: 'http://blog.rchrd.net',
mail: {},
database: {
client: 'sqlite3',
connection: {
filename: path.join(__dirname, '/shared/content/data/ghost.db')
},
debug: false
},
server: {
host: '0.0.0.0',
port: '5000'
},
paths: {
contentPath: path.join(__dirname, '/shared/content/'),
themePath: path.join(__dirname, '/themes')
}
},
development: {
url: 'http://localhost:2368',
database: {
client: 'sqlite3',
connection: {
filename: path.join(__dirname, '/content/data/ghost-dev.db')
},
debug: false
},
server: {
host: '127.0.0.1',
port: '2368'
},
paths: {
contentPath: path.join(__dirname, '/content/'),
themePath: path.join(__dirname, '/themes')
}
}
}
// Export config
module.exports = config;