Instalación Ghost 1.x en Heroku y development en local.

Instalación Ghost 1.x en Heroku y development en local.

Instalando Ghost 1.x en Heroku

Descargando ghost.

$ git clone https://github.com/TryGhost/Ghost.git

Iniciando repositorio de git

$ git init
$ git add -A
$ git commit -m 'Initialize repository'

Creando app en heroku

$ heroku create my-blog

Instalando ClearDB MySQL y configurando conexión a la base de datos (Importante no mas soporte para Postgresql en la version 1.x)

ClearDB MySQL en su version Free es mas que suficiente para el uso que voy a dar, 5mb y un pool de 10 conexiones.

Configurando conexion a la base de datos.

Debemos tener un fichero config.production.json en el directorio raiz, podemos crearlo nosotros mismos o bien usar el de ejemplo para editar los datos. Echa un vistazo a la documentación oficial sobre la configuración de entornos

Copiando ejemplo al directorio raiz (En la version 1.2 los ficheros de configuracion los tienes en core/server/config/env si quieres usar tu propio config en la raiz, recuerda eliminar la regla que lo impide in gitignore)

$ cp core/server/config/env/config.production.json config.production.json

Editando config

"database": {
    "client": "mysql",
    "connection": {
        "host"     : "127.0.0.1",
        "user"     : "<DB_USER>",
        "password" : "<DB_PASSWORD>",
        "database" : "<DB_NAME>"
    }
},

Iniciando base de datos

$ heroku run "knex-migrator init"

Editando host binding en core/server/config/index.js

Sobre la linea 74 encontraremos debug('config end')justo debajo he añadido un if para cuando ghost esta ejecutandose en producción:

debug('config end');
if (env === 'production') {
    var server  = nconf.get('server');
    server.host = "0.0.0.0";
    server.port = process.env.PORT;
    nconf.set('server', server);
}
return nconf;

Creando Procfile en root directoy:

web: NODE_ENV=production node index.js

Por ultimo comiteamos los cambios y hacemos un push en heroku master

Instalación en local con SQLite3

He decidido hacer una instalación en local ya que quería editar el template Casper que trae por defecto, para ello el mejor metodo es correr Ghost en modo development y compilar cada cambio del codigo usando Gulp:

$ git clone https://github.com/TryGhost/Ghost.git
$ npm install

Configuración development

cp core/server/config/env/config.development.json config.development.json

Ghost usa la herramienta Knex migrator para realizar las migraciones vamos a instalar esta:

$ npm install -g knex-migrator

Instalando modulo sqlite3

$ npm install -g sqlite3

Iniciando la base de datos:

$ NODE_ENV=development knex-migrator init

Despues de esto deberíamos poder ejecutar Ghost sin ningun problema con simplemente escribir $npm start pero nosotros queremos editar nuestro css y vamos a necesitar Gulp para tal tarea:

$ npm install graceful-fs
$ npm install -g gulp

vamos al directorio content/themes/casper y ejecutamos:

$ gulp

deberiamos ver como Gulp compila nuevamente nuestro assets y queda a la espera de cualquier cambio para compilar cada edicion de código que hagamos.

Notas o problemas encontrados:

En la última version de ghost se ha dejado de dar soporte para Postgresql motivos que puedes encontrar aqui.

Downgrade to NODE 6.11 ya que con la versíon 8 tenía problemas con require-dir module el cual me dío muchos quebraderos de cabeza. "require.extensions.hasOwnProperty"
Instalando NVM Node version manager para downgradear

Limpiando cualquier instalación de node

    $ brew uninstall --force node
    Uninstalling node...
    $ brew update
    $ brew install nvm

Añadiendo algunas líneas en ~/.Bash_profile

    export NVM_DIR=~/.nvm
    source $(brew --prefix nvm)/nvm.sh

Descargando y compilando node 6

    $ nvm install 6
    $ nvm use 6 

Usando node 6 por defecto en la consola

    $ nvm alias default 6

Eliminando cache

    $ rm -Rf /usr/local/lib/node_modules/npm-check-updates

Documentación sobre entornos y configuración sobre Ghost.