Ghost

Cómo instalar Ghost en un servidor Ubuntu

Ghost

Ghost es una nueva herramienta libre para gestionar blogs. Tiene licencia permisiva (lo cual no me agrada) pero está hecho en NodeJS y como no había instalado ninguna otra aplicación hecha en este lenguaje, y sé que es algo particular, he decidido instalarla en uno de mis servidores. Aquí detallo el proceso de instalación de Ghost en la raiz de un dominio, para tenerlo recopilado y que le sirva a quien intente hacer esta tarea en el futuro. Algo que para empezar me incluye a mí mismo, que si no lo anoto ahora seguro que en el futuro vuelvo a atascarme en algún paso.

  1. Lo primero es preparar el sistema. Ghost está programado usando el lenguaje NodeJS, así que necesitarás este software en tu servidor. En Ubuntu hay una versión antigua de NodeJS (necesitamos una versión >0.10), así que para instalarla añadimos a nuestro sources.list el siguiente repositorio disponible en Launchpad. Luego instalamos nodejs normalmente: # apt-get install nodejs La versión de NodeJS que estamos instalando ya incluye npm (Node Package Manager, una cli para instalar dependencias y paquetes de Node, al estilo de Ruby Version Manager para Ruby y Ruby on Rails).
  2. En Ubuntu 13.04 necesitaremos compilar las extensiones de sqlite para Node, si ya tenemos un entorno de desarrollo (incluido build-essential) configurado sólo necesitamos teclear: npm install -g node-gyp
    npm install sqlite3 --build-from-source
    Si nos hace falta preparar el sistema hay algunos pasos más.
  3. También necesitaremos algunas cosas de Python, las instalamos: # apt-get install python-software-properties
  4. Mi servidor ya tiene Apache funcionando como servicio, y no iba a configurar un servidor entero únicamente para esto, así que toca configurar el sistema para que nuestra aplicación NodeJS se lleve bien con el servidor Apache. Esto lo hacemos configurando un proxy entre ambos. En dos pasos:
    1. Habilitamos los módulos de apache deseados y reiniciamos el servidor Apache:
      # ln -s /etc/apache2/mods-available/proxy.load /etc/apache2/mods-enabled
      # ln -s /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled
      # /etc/init.d/apache2 restart
    2. En el archivo en el que estamos declarando el vhost (también podemos hacerlo en la configuración de Apache) añadimos esta orden: ProxyPass / http://localhost:8000/ De esta forma redirigirimos toda petición a través del puerto 80 de Apache para el dominio completo al puerto 8000 de nuestro localhost.
  5. Por fin podemos ahora instalar nuestra aplicación, descomprimimos la última versión de Ghost y copiamos los ficheros donde vayamos a tenerlos en el disco duro. Por ejemplo /var/www/ghost/.
  6. Abrimos una terminal y hacemos nos movemos hasta el interior de ese directorio.
  7. Si hemos instalado bien todas las dependencias (Python, NodeJS, sqlite bindings para Node), podemos proceder directamente a ejecutar el siguiente comando desde la terminal situada en el directorio raiz de nuestro Ghost: # npm install --production.
  8. Copiamos config.example.js a config.js y editamos la configuración del entorno de producción, para indicar la URL de nuestro nuevo blog en Ghost, y el puerto interno en el que queremos que la aplicación «escuche». Cambiamos la URL del blog y, si nos hace falta, también el puerto en el que estamos escuchando. En mi caso esta sección queda con el siguiente aspecto:

    production: {
    url: 'http://ghost.local',
    mail: {},
    database: {
    client: 'sqlite3',
    connection: {
    filename: path.join(__dirname, '/content/data/ghost.db')
    },
    debug: false
    },
    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: '8000'
    }
    },

    De ahí, en nuestro caso sólo necesitamos cambiar la línea que comienza por «url:» y la de «port:», el resto lo dejamos tal cual. Tened en cuenta que aunque en la plantilla de este blog no muestre bien la indentación, hay que ser cuidadosos con los espacios, y los tabuladores en estos archivos :)
  9. Finalmente, levantamos la aplicación usando:
    # npm start --production

Parecen muchos pasos, pero que no os asuste. Todo esto se hace en unos 30 minutos. Menos si todo os sale bien a la primera (a mí me faltaron algunas dependencias y perdí un ratillo buscando un mensaje de error).

¿Qué faltaría por hacer? Pues será de mucha comodidad crear una tarea para que se ejecute automáticamente durante el reinicio de servidor, de forma que cada vez que reiniciemos nuestra aplicación en NodeJS se inicie automáticamente. Por lo demás, éstas son todas las notas rápidas que he tomado en el proceso de instalar Ghost en un servidor Ubuntu en producción que ya tenía Apache y algunas aplicaciones funcionando con este servidor. Lo haré cuando lo instale en el servidor definitivo, de momento esto es suficiente.

Espero que os resulte útil, es viernes, así que hay por delante un fin de semana que puede aprovechar para hackear y divertirse con esto. Para los que quieran sacar matrícula, si queréis instalar directamente desde el repositorio Git podéis seguir este tutorial, pero tendréis que instalar Ruby, bajar algunas gemas vosotros mismos, y además compilar todos los assets de Javascript antes de tener el dashboard operativo. Por eso es sólo para los que quieran la nota más alta :)

Doctor en Química laser especializado en desarrollo de hardware para análisis. Consultor y Project Manager. Autor de los libros publicados La sociedad de control y La neutralidad de la Red.

4 Comments

  1. Gracias por publicarlo. Es un buen tutorial aunque temas como instalar nodejs en Debian están en un nivel un poco más avanzado.

    Me he creado una cuenta en ghost y he estado trasteando con él. Promete mucho porque se trabaja muy bien con los textos y te permite centrarte mucho en el contenido sin descuidar aspectos estéticos. Espero que incluyan cosas para navegar por los blogs que no recurran a terceros, como usar a Google como buscador, pero por el momento se puede utilizar sin problemas.

    • Muchas gracias, Victor.

      Entiendo que Debian para todo es un poco más exigente, porque también da un nivel de estabilidad excepcional :) Yo lo hice en mi Ubuntu de casa, pero es que yo además uso Ubuntu Server donde puedo, je je.

      Estuve fuera unos días por eso no pude contestarte, pero hoy ya he configurado el servicio. Igualmente, para Ubuntu hay una for dummys y otra algo más manual pero que hace aproximadamente lo mismo, no lo hice en debian aunque supongo que en el peor de los casos se pueden añadir un par de órdenes al crontab para que se ejecute al arrancar.

      • Debian emplea initd en Wheezy (y hasta que se aclaren con la decisión final) así que crear un script para arrancar node.js es bastante sencillo. Estoy instalando etherpad en una de mis máquinas con Debian y cuando lo termine te pasaré el script estándar para controlar el servicio.

        De momento veo que carga bastante mi servidor en la red así que, aprovechando que ahora tengo conexión por fibra, lo más seguro es que lo termine poniendo en casa.

Submit a comment