Cómo instalar Ghost Localmente y en Windows Azure

En el artículo anterior les hablé un poco de Ghost, en este artículo les enseñaré a instalarlo localmente y en Windows Azure Web sites, pero lo haremos de la manera fácil que es como lo harán la mayoría de las personas. Azure websites son una opcion económica(gratuita) para hostear aplicaciones web incluso aplicaciones node.js

Revisemos primero cono instalarlo de manera local.

Instalando Ghost localmente

Prerrequisitos

  1. Ghost está montando sobre node.js por lo cual se requiere tener instalada la última versión disponible.
    Descarga node.js es un Windows installer, así que con algunos clic queda listo.
  2. Desde luego requieres instalar Ghost.
    Descarga Ghost donde dice "Download Ghost source code" , esto es un archivo .zip descomprimelo donde quiera que sea que vas a montarlo.
  3. No necesitamos una base de datos, bueno si pero Ghost funciona por defecto con SQLite lo cual es más que suficiente para el blog promedio, opcionalmente puedes configurarlo con MySQL o con PostgreSQL.

Procedimiento

Desde el menú de inicio ejecutas "Node.js command prompt"

En esta consola vas hasta el directorio donde descomprimiste los archivos de Ghost (desde luego es diferente en cada caso)

 cd "K:\My new Blog"  
k:  

Desde aquí es necesario ingresas el siguiente comando que hace que el administrador de paquetes de node descargue todas las dependencias de librerias y demas.

npm install --production

Lo se, para ti amigo seguidor npm = Nuget Package Manager que es exactamente lo mismo pero para .net.

Básicamente este comando lee el archivo package.json para saber que paquetes debe bajar y es capaz de determinar otras dependencias de esos paquetes para tambien instalarlas.

Es muy importante el parametro con los "--" ya que esto garantiza que se bajen solo las versiones estables de las dependencias.

Ahora que ya está todo listo hay que iniciar el servicio de node para hostear esta web así
npm start

Ahora abrimos la siguiente URL https://localhost:2368

Instalado!

Instalando Ghost en Windows Azure

Prerrequisitos

Ahora que vamos a enviar nuestro Ghost blog a Windows Azure necesitamos algo que nos facilite la tarea de ejecutar comandos remotamente. Una herramienta que permita hacer integración continua es la solución ideal, Windows Azure es compatible con varias pero en el caso de nodejs la herramienta natural para hacer esta labor es Git.

Así que debemos descargar el cliente de Git para Windows

Procedimiento

Creamos un nuevo sitio web gratuito en Windows Azure, para ello vamos a https://manage.windowsazure.com, sino tienes una suscripción allí inicias sesión y te registras. Por seguridad te pedira una tarjeta de crédito aunque solo vayas a usar los servicios gratuitos, pero no te preocupes no te hará cargos.

Ya en el portal de administración creas un nuevo website, tal como se crea por defecto es con la opción gratuita.

En el dashboard damos clic en "Set up deployment from source control" y establecemos para poder hacer deploy por Git.

Esto creará una nueva pestaña en el sitio llamada "Deployment" tenla presente, sobre todo esta información:

Ahora en el panel de Configuración, cerca de la parte inferior, creamos un nuevo parámetro de aplicación NODE_ENV=production

Este parámetro le indica al runtime de node.js que debe cargar la sección de production y no la de development (ver a continuación).

Configuración de archivos de Ghost

En este momento debes tener el sitio local rodando, lo detenemos, para ello en la consola hacemos

 Ctrl+C  
Ghost was running for 885 seconds  
^C
Terminate batch job (Y/N)? Y  

^C es presionar Ctrl + C.
Editamos el archivo config.js y nos aseguramos de establecer en la url de nuestro nuevo sitio, esto hay que hacerlo en la sección development pero tambien en la sección production, adicionalmente en la sección production debemos cambiar el número de puerto para que sea dinámico dejándolo como se ve a continuación.

 production: {  
    url: 'https://newghost.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
    }
},

ATENTOS

  • El valor process.env.PORT no va en comillas
  • La url debe estar completa no puedes omitir el "https://"

Cuando Windows Azure carga un sitio node.js hace uso del archivo server.js que no viene con ghost pero para no complicarnos creemoslo desde la línea de comandos y adicionemos la línea que aparece a continuación así

 copy con server.js  
var GhostServer = require('./index');  
^Z
        1 file(s) copied.

^Z quiere decir que debes presionar CTRL + Z y luego la tecla ENTER.

Utilizando Git como herramienta de integración

En la consola vas hasta el directorio donde tienes tu blog, allí crearemos un archivo .gitignore donde debemos colocar los archivos o carpetas que no queremos que hagan parte del despliegue, en este caso agregamos la carpeta node _modules.

 copy con .gitignore  
node_modules  
^Z

Ahora desde el menú de inicio ejecutas "Git Bash"

e ingresas los comandos mostrados a continuación (recuerda que Git se ejecuta sobre mingw32 por lo que las rutas y comandos son unix style)

 cd "/k/My new Blog/"  
#inicializa un repositorio git en el directorio actual
git init  
#adiciona todos los archivos al repositorio
git add .  
#hace commit
git commit -m "initial commit"  

Con esto ya tenemos todo el blog adicionado a Git localmente, ahora debemos enviarlo al repositorio remoto, es decir Windows Azure, recuerda cambiar la url del endpoint por la tuya propia.

 #asocia el repositorio local a un repo remoto
git remote add azure https://GotoAzure@newghost.scm.azurewebsites.net:443/newghost.git  
#envia los cambios hechos localmente al repo remoto
git push azure master  

Este comando no solo enviará los archivos a Windows Azure sino que además realizará el proceso de integración ejecutando los scripts necesarios para obtener todas las librerias y dependencias necesarias que en ese ambiente se puedan necesitar (pueden ser diferentes a las locales por eso excluimos .\node_modules).

Al insertar el último comando te pedirá contraseña, sino la sabes puedes resetearla desde el Dashboard del website.

Ahora ingresamos al sitio web y...

Feliz jornada de instalación!

Próximo artículo mismo tema pero para desarrolladores que quieran personalizar el blog en otro nivel.

Espero sus comentarios ;)