Migrando a Hexo

El día de hoy he decido migrar de plataforma para este blog, a casi un año de estar usando Ghost, he decido utilizar otra tecnología.

La razón es sencilla, tengo varios sitios corriendo en este mismo servidor, nada complicado realmente, solo blogs y landing pages. El detalle es que tenía dos instancias de Ghost corriendo en este servidor utilizando forever.

Estas dos instancias están acabando con la memoria que tengo displonible, haciendo que la cosa se comience a poner lenta, esto no me agrada para nada.

La solución que quiero probar ahora es utilizar Hexo, que en pocas palabras es un generador de sitios, escribo mi contenido en Markdown y apartir de ahí mediante un template genero todas las páginas utilizando Hexo. El contenido esta almacenado en archivos de texto y los guardo utilizando GIT.

Instalarlo es muy sencillo, simplemente es necesario tener instalado NodeJS y NPM, luego ejecutamos el siguiente comando:

$ npm install -g hexo-cli

Para crear el blog simplemente ejecutamos el siguiente comando:

$ hexo init <folder>
$ cd <folder>
$ npm install

Y por último generamos las vistas y levantamos el servidor de desarrollo.

$ hexo generate
$ hexo server

Con eso tendremos corriendo nuestro blog, que por defecto viene un post dandonos algunas instrucciones y la bienvenida. Ahora bien, he para este sitio he utilizado WordPress, Ghost y ahora Hexo, para migrar la información lo único que hice fue generar un JSON desde ghost con todos mis posts. Luego generé todos los archivos en markdown utilizando el siguiente script.

var fs = require('fs');
var file = __dirname + '/crysfels-blog.ghost.2015-06-28.json';

fs.readFile(file, 'utf8', function (err, data) {
    var post,
        content;

    if (err) {
        console.log('Error: ' + err);
        return;
    }

    data = JSON.parse(data);

    for(var i=0,len=data.db[0].data.posts.length;i<len;i++){
        post = data.db[0].data.posts[i];

        content = [
            'title: '+post.title+'\n',
            'date: '+new Date(post.published_at)+'\n',
            '---\n\n',
            post.markdown
        ].join('');

        fs.writeFile(__dirname + '/../source/_posts/'+post.slug+'.md', content, function(err) {
            if(err) {
                return console.log(err);
            }

            console.log("The file was saved!");
        });
    }

});

Un script muy sencillo realmente, lo único que hace es abrir el JSON, iterar cada post y crear un archivo con el markdown necesario.

Por último es necesario generar las vistas, levantar el server de desarrollo para probar que todo funcione correctamente y deployar a producción.

Ahora no necesito absolutamente nada más que el nginx que ya tengo corriendo, de esta manera espero poder bajar el uso de memoria para mantener un buen tiempo de respuesta, así como un bajo costo en el servidor.