Cómo instalar Ghost (plataforma de blog en node.js)

Aunque WordPress es la plataforma de blog dominante en nuestros días, John O'Nolan inició un proyecto kickstarted para crear un sistema de blogging en node.js. Ghost se puso como meta recaudar £ 25,000 (U.S.$ 40,000) para financiar el desarrollo del proyecto y en 29 días recibió £ 196,362 (U.S.$ 314,000), debido a esta gran acogida es que decidió extender el proyecto y no sólo desarrollar un software para blogear escrito en node.js, sino que está construyendo el servicio para ofrecerlo de la misma manera a como lo hace WordPress.com. El servicio aún no está disponible, pero si se desea usar el software que es Open Source en un servidor propio, sólo debemos registrarnos en Ghost.org para poder descargarlo.

Este tutorial detalla los pasos de cómo tener Ghost corriendo en nuestro VPS, este tutorial asume que Ud. usa Ubuntu 12.04 (o más nuevo), node.js 0.10.21, MySQL y Nginx. De no estar familiarizado con alguno de estos componentes, no se preocupe aquí explicaremos detalladamente como instalarlos y configurarlos.

Lo primero que le recomiendo es que si usará Ghost en producción y dada la naturaleza aún en beta de node.js siga los pasos descritos en el tutorial anterior "Asegurando tu server Ubuntu" antes de continuar con este tutorial, si lo único que desea es probarlo puede continuar.

Comencemos por instalar node.js (la versión estable) usando el repositorio semi oficial de Chris Lea, ejecutando estos comandos como usuario root:

apt-get install python-software-properties
apt-add-repository ppa:chris-lea/node.js
apt-get update
apt-get install nodejs
node --version
v0.10.21

Completada la instalación de node.js (al momento de escribir este tutorial la versión estable de node.js era la 0.10.21), podemos ahora proceder a la instalación de MySQL de la siguiente manera:

apt-get install mysql-client mysql-server

Durante el proceso de intalación será interrogado sobre una clave por defecto para el usuario "root", por favor use un password que no sea fácil de adivinar y tampoco lo deje en blanco.

Una vez instalado MySQL debemos crear el usuario (jamas use "root" por razones de seguridad) y las bases de datos que usaremos para implementar nuestro blog. Esto lo consigueremos logueandonos a la DB usando el cliente "mysql" y tipeando los comandos listados. Para loguearse a la DB debe usar este comando:

mysql -u root -p

Una vez logueado exitosamente debería ver algo como esto, donde (mysql>) es el prompt por defecto usado por el cliente para aceptar comandos:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 42
Server version: 5.5.34-0ubuntu0.12.04.1 (Ubuntu)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Los comandos que debe ejecutar son estos, pero edite el texto en mayúsculas "TU_PASSWORD" y reemplazalo por el password que deseas asignarle al usuario "ghost":

create database ghostdev;
create database ghost;
create user 'ghost'@'localhost' identified by 'TU_PASSWORD';
grant all privileges on ghost.* to 'ghost'@'localhost';
grant all privileges on ghostdev.* to 'ghost'@'localhost';
flush privileges;
quit

Con esto hemos completado nuestra instalación y configuración de MySQL procederemos a instalar Nginx usando el siguiente comando:

apt-get install nginx

Creemos ahora un directorio de cacheo, para ello ejecutaremos los siguientes comandos:

mkdir /var/cache/nginx
chown www-data:www-data /var/cache/nginx

Seguidamente cremos el directorio para Ghost (si el directorio existe es porque Ud. ha estado usando Apache, asegurese de que lo ha desinstalado antes de comenzar a usar Nginx):

mkdir /var/www
chown www-data:www-data /var/www

Hagamos una copia de respaldo de la configuración inicial de Nginx de la siguiente manera:/etc/nginx/nginx.conf

mv /etc/nginx/nginx.conf /etc/nginx/orig_nginx.conf

Ahora creemos una nueva configuración creando el archivo "/etc/nginx/nginx.conf" y colocando esto dentro del mismo:

user www-data;
worker_processes 2;
pid /run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    proxy_cache_path  /var/cache/nginx levels=1:2 keys_zone=one:8m max_size=3000m inactive=600m;
    proxy_temp_path /var/tmp;
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    gzip on;
    gzip_comp_level 6;
    gzip_vary on;
    gzip_min_length  1000;
    gzip_proxied any;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    gzip_buffers 16 8k;

    upstream ghost_upstream {
      server 127.0.0.1:2368;
      keepalive 64;
    }

    server {
    listen 80;

    server_name YOUR_DOMAIN www.YOUR_DOMAIN;

    if ($host = 'YOUR_DOMAIN' ) {
            rewrite  ^/(.*)$  http://www.YOUR_DOMAIN/$1  permanent;
    }

    location ~ ^/(img/|css/|lib/|vendor/|fonts/|robots.txt|humans.txt) {

      root /var/www/core/client/assets;
      access_log off;
      expires max;
    }

    location ~ ^/(shared/|built/) {
      root /var/www/core;
      access_log off;
      expires max;
    }

    location ~ ^/(favicon.ico) {
      root /var/www/core/shared;
      access_log off;
      expires max;
    }

    location ~ ^/(content/images/) {
      root /var/www;
      access_log off;
      expires max;
    }

    location / {
      proxy_redirect off;
      proxy_set_header   X-Real-IP            $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
      proxy_set_header   X-Forwarded-Proto $scheme;
      proxy_set_header   Host                   $http_host;
      proxy_set_header   X-NginX-Proxy    true;
      proxy_set_header   Connection "";
      proxy_http_version 1.1;
      proxy_cache one;
      proxy_cache_key ghost$request_uri$scheme;
      proxy_pass         http://ghost_upstream;
    }
    }

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

En donde vea "YOUR_DOMAIN.COM", reemplacelo por los valores del dominio o subdominio que usará para el blog. Estoy asumiendo además de que su VPS tiene 2 núcleos de tener más o menos edite el valor de "worker_processes" y hágalo coincidir con el número de núcleos de su VPS. Para que la configuración anterior tenga efecto debemos reiniciar Nginx de la siguiente manera:

/etc/init.d/nginx restart

Ahora ya tenemos todo listo para comenzar la instalación de Ghost en nuestro sistema, para ello lo primero que hay que hacer es desgarlo y eso lo hacemos de la siguiente manera:

cd /tpm
wget https://ghost.org/zip/ghost-0.3.3.zip

Con el código descargado, descomprimamoslo y movamos todo el contenido del directorio "/tmp/ghost" al directorio "/var/www" de la siguiente manera:

mkdir ghost
cd ghost
unzip ../ghost-0.3.3.zip
cp -r ./* /var/www
chown -R www-data:www-data /var/www

Completado los pasos anteriores instalemos las dependencias y todo lo necesario para poder arrancar nuestro blog, para ello debemos usar los siguientes comandos:

npm install --production
npm install mysql
npm install forever -g

Ya estamos casi listos para iniciar nuestro blog, sólo debemos terminar la configuración editando el archivo /var/www/config.js, para ello creamos el archivo con nuestro editor favorito y pegamos esta configuración alli:

// # Ghost Configuration
// Setup your Ghost install for various environments

var path = require('path'),
    config;

config = {
    // ### Development **(default)**
    development: {
        // The url to use when providing links to the site, E.g. in RSS and email.
        url: 'http://
TU_DOMINIO.COM',

        // Example mail config
        // Visit http://docs.ghost.org/mail for instructions
        // “`
        //  mail: {
        //      transport: 'SMTP',
        //      options: {
        //          service: 'Mailgun',
        //          auth: {
        //              user: '', // mailgun username
        //              pass: ''  // mailgun password
        //          }
        //      }
        //  },
        // “`

        database: {
            client: 'mysql',
            connection: {
                    host: 'localhost',
                    user: 'ghost',
                    password: '
TU_PASSWORD',
                    database: 'ghostdev',
                    charset: 'utf8'
            }
        },
        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'
        }
    },

    // ### Production
    // When running Ghost in the wild, use the production environment
    // Configure your URL and mail settings here
    production: {
        url: 'http://
TU_DOMINIO.COM',
        mail: {},
        database: {
            client: 'mysql',
            connection: {
                    host: 'localhost',
                    user: 'ghost',
                    password: '
TU_PASSWORD',
                    database: 'ghost',
                    charset: 'utf8'
            }
        },
        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'
        }
    },

    // **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',
        database: {
            client: 'sqlite3',
            connection: {
                filename: path.join(__dirname, '/content/data/ghost-test.db')
            }
        },
        server: {
            host: '127.0.0.1',
            port: '2369'
        }
    },

    // ### Travis
    // Automated testing run through Github
    travis: {
        url: 'http://127.0.0.1:2368',
        database: {
            client: 'sqlite3',
            connection: {
                filename: path.join(__dirname, '/content/data/ghost-travis.db')
            }
        },
        server: {
            host: '127.0.0.1',
            port: '2368'
        }
    }
};

// Export config
module.exports = config;

Luego de grabada la configuración, ya podemos inciar nuestro blog. Asegurese de editar los textos "TU_DOMINIO.COM" y "TU_PASSWORD", para facilitar que encuentres donde debes editar lo he marcado con el color rojo. Los valores que debes reemplazar son aquellos que hayas establecido anteriormente cuando configuraste Nginx y MySQL.

Ahora sólo debemos inciar nuestro blog con el siguiente comando:

NODE_ENV=production forever start –sourceDir /var/www index.js

Listo, el resultado final puede ser observado en "http://ghost.cix.pe".

Una vez configurado todo esto estamos listos para crear nuestra cuenta de administración y podemos seguir el turorial oficial sobre como usar el blog.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.