Ghost Inception

Este será mi primer artículo en este nuevo blog hosteado en Microsoft Azure y construido con el sistema de blogs Open Source Ghost.

El nombre Ghost Inception se debe a que este primer artículo es sobre como desplegar el sistema de blogs Ghost en un site de Microsoft Azure y está construido con Ghost y desplegado en Microsoft Azure.

Bromas geek aparte quiero agradecer de antemano a Juan Carlos Ruiz por su ayuda para resolver diferentes inconvenientes que he tenido con Microsoft Azure y con otros temas, y a la vez por su excelente artículo sobre este mismo tópico del cual he tomado algunos apartes, y el cual quiero extender un poco.

Antes que nada, para los que no sepan que es Ghost, según su sitio web es "a simple, powerful publishing platform that allows you to share your story with the world."

Siguiendo la misma línea, para los que no sepan que es Microsoft Azure, según su sitio web es "an open and flexible cloud platform that enables you to quickly build, deploy and manage applications across a global network of Microsoft-managed datacenters. You can build applications using any language, tool or framework. And you can integrate your public cloud applications with your existing IT environment."

Instalación Local

Para entrar en materia, tengo que decir que instalar Ghost es muy, muy fácil, por lo tanto iniciaremos con una instalación local, la que luego desplegaremos en Azure. Primero que todo debemos tener instalado node.js (Ghost require Node v0.10.x) y npm; la instalación de node.js y npm se sale del alcance de este artículo, así que no lo cubriré.

  1. Descargar una copia de Ghost.
  2. Descomprimirla en nuestra PC en el lugar donde queramos.
  3. Renombrar el archivo de configuración de Ghost config.example.js como config.js.
  4. Ejecutar npm install --production para instalar las dependencias de node.
  5. Para iniciar ghost, ejecutar npm start.
  6. Acceder a la dirección http://localhost:2368/ en sus navegadores o ir a http://localhost:2368/ghost para crear una cuenta de administrador y logearse.

Despliegue en Microsoft Azure

Como ya tenemos listo nuestra instalación local de Ghost, ahora solo nos queda desplegarlo en Microsoft Azure.

Lo primero es descargar nuestras credenciales de Azure en un archivo de publishing settings, siempre y cuando no las tengamos.

azure account download

Esto los redirigirá al navegador, donde se descargará el el archivo publishing settings; si no habían iniciado sesión previamente, tendrán que hacerlo.

A continuación tenemos que importar el archivo de publishing settings:

azure account import "d:\azure\credentials.publishsettings"

El siguiente paso es crear nuestro sitio en Azure. Lo más importante del sitio que debemos crear es que tenga soporte para git. Un segundo punto importante es escoger una zona acorde a nuestras necesidades, en mi caso escogeré la más cercana a mi ubicación, osea "East US"; como último paso antes de crear el sitio, es asegurarnos de ejecutar el comando de creación del mismo desde la ruta donde tenemos nuestros archivos de Ghost:

azure site create azure-ghost-test --location "East US" --git

Si todo va bien, dentro de la salida del comando debe aparecer el nombre completo del site, por ejemplo:

Created website at azure-ghost-test.azurewebsites.net

También debe haberse creado un repositorio git local, el cual a su vez tiene un repositorio remoto agregado, este repositorio remoto es el repositorio de nuestro sitio en Azure.

Para que Ghost funcione correctamente, debemos especificar en qué entorno se estará ejecutando, si el entorno de desarrollo o el de producción. Para esto vamos a crear una variable de entorno en el website de la siguiente manera:

# Establecer el sitio actual
azure site set azure-ghost-test
# Adicionar la variable de entorno
azure site appsetting add NODE_ENV=production

Configuración de Ghost

Ya vamos terminando nuestra instalación y despliegue de Ghost y ya solo nos queda agregar los parámetros correctos al archivo de configuración en la sección de producción; lo que debemos cambiar concretamente es la url de nuestro sitio y el puerto. La url la optuvimos al ejecutar el comando de creación del sitio o también la podemos obtener a través del panel web de Azure (es muy importante que la url esté completa, es decir con el "http://") y el puerto lo debemos asignar de manera dinámica (process.env.PORT). A continuación presento como debe quedar la configuración de producción:

production: {  
    url: 'http://azure-ghost-test.azurewebsites.net',
    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: process.env.PORT
    }
},

Ya que los sitios de Azure corren bajo Microsoft Windows tenemos que hacer un pequeño paso más, ya que Azure cuando carga un sitio node.js lo hace a través de un archivo server.js que no existe en la instalación de Ghost, así que debemos crearlo con el siguiente contenido:

var GhostServer = require('./index');

Llegamos al final de nuestro proceso de instalación y despliege de Ghost en Azure, solo falta agregar nuestros archivos al repositiorio local git y hacer push al repositorio remoto de nuestro sitio Azure:

  1. git add --all
  2. git commit -m "initial commit"
  3. git push azure master

Cuando hacemos push se nos pedirá que ingresemos una contraseña, si no la recordamos la podemos cambiar en el panel de Azure en la vista rápida, opción Restablecer las credenciales de perfil de publicación.

Hemos llegado al final, ya tenemos nuestro blog Ghost instalado en local y desplegado en Azure. Espero que les haya sido de ayuda.

comments powered by Disqus