Como crear un blog con Ghost en Linode

Como crear un blog con Ghost en Linode

Ghost es una plataforma de blogging de código libre que funciona sobre Node.js, y que en el ultimo tiempo se ha vuelto muy popular. Cuenta con una interfaz hermosa, sencilla y enfocada en la publicación de contenido que destaca entre las demás plataformas existentes.

No tiene la versatilidad de los CMS para desarrollar sitios como podría ser un e-commerce, por ejemplo Wordpress, sino que esta enfocado específicamente en la creación de blogs. Estos features te darán una idea mas clara acerca de Ghost:

  • Su interfaz esta pensada para facilitar la publicación de contenido.
  • Tiene funcionalidades nativas de SEO y sociales.
  • En comparación con Wordpress es mucho mas sencillo de configurar.
  • Se pueden crear themes personalizados o adquirir en el marketplace (incluso hay algunos gratuitos).
  • El uso de Markdown agiliza y simplifica la escritura enriquecida con estilos.
  • Ghost es rápido (más que Wordpress y Tumblr).

Instalar Ghost en Linode

En este post voy a mostrarte como instalar Ghost sobre un VPS Linode con Linux Ubuntu y servir el blog con Apache. ¡Allá vamos!

Contratar un VPS Linode

Linode es un servicio que ofrece servidores virtuales, comúnmente conocidos como VPS, a precios muy convenientes. Cuenta con una gran documentación que va a ayudarnos a configurar nuestro VPS desde cero aunque no tengamos conocimientos previos en administración de servidores.

Por si no estas al tanto, un servidor virtual seria el equivalente a tener un servidor físico y dedicado en tu casa, el cual podes administrar a tu gusto y necesidad, con la particularidad de que el VPS se encuentra virtualizado en servidores de mayor capacidad, en data centers distribuidos en distintas partes del globo y a los cuales se accede de manera remota mediante el protocolo SSH para conexiones shell seguras.

Si estas empezando, el plan básico de 10 USD mensuales que consta de 1 Gb de RAM, 24 Gb de almacenamiento SSD, 2 Tb de transferencia mensual y 1 núcleo de CPU, será mas que suficiente.

Linode plans

Con solo registrarnos en este link ya podremos contratar nuestro Linode y pagarlo con tarjeta de crédito (por el momento no acepta PayPal).
Bien! Una vez que tengamos el servidor será momento de instalarle un sistema operativo. Heey! No te asustes! es muy sencillo.

En el Dashboard del administrador iremos al botón "Deploy an Image". Allí seleccionamos la imagen deseada (en mi caso opte por Linux Ubuntu 14.04 LTS de 64 bits), dejamos los valores por defecto para "Deployment Disk Size" y "Swap Disk", y por ultimo ingresamos una clave para el usuario root (administrador). Eso es todo!

Desplegando una imagen de Sistema Operativo en Linode

A partir de aquí te recomiendo seguir las guías de Linode para configurar una conexión SSH y asegurar tu VPS.

Instalar Node.js en Ubuntu

Ghost funciona sobre Node.js, un runtime de Javascript que corre en el backend y permite desarrollar, entre otras cosas, aplicaciones asíncronas. La versión estable al momento de escribir este post es la 4.4.3 y podemos instalarla usando el administrador de paquetes de Ubuntu.

Cuando tengamos nuestro VPS listo y configurado, lo primero que haremos será conectarnos por SSH (si seguiste las guías de Linode ya sabrás de que estamos hablando) e instalaremos Node.js ejecutando los siguientes comandos:

$ curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
$ sudo apt-get install -y nodejs

Adicionalmente instalaremos el bundle build essential, necesario para instalar algunos paquetes con NPM (el manejador de paquetes de Node.js):

$ sudo apt-get install -y build-essential

Para verificar que todo haya quedado bien, ejecutamos el comando node -v y nos debería regresar la versión de Node que acabamos de instalar: v4.4.3.

Instalar Ghost

Ghost - Just a Blogging Platform

Desde Ghost.org vamos a descargar la ultima versión de Ghost y guardarla con el nombre de archivo ghost.zip:

$ curl -L https://ghost.org/zip/ghost-latest.zip -o ghost.zip

Descomprimimos el .zip en el directorio donde vamos a realizar la instalación. En nuestro ejemplo vamos a usar la ruta /var/www/blog como root para nuestro proyecto:

$ unzip -uo ghost.zip -d /var/www/blog

Por ultimo, nos movemos al directorio de Ghost y ejecutamos la instalación:

$ cd /var/www/blog && npm install --production

El parámetro --production se encarga de instalar solo los paquetes necesarios para correr la plataforma en producción. Si no se indica este parámetro adicionalmente se instalaran varios paquetes utilizados por los developers que contribuyen al desarrollo del core de Ghost.

Ya podemos iniciar Ghost para nuestra primera prueba:

$ npm start --production

¿Como saber si Ghost esta corriendo?

Hace un tiempo Linode habilito "Glish Console", para acceder y administrar nuestro VPS mediante un entorno totalmente gráfico, del cual vamos a aprovecharnos para estar seguros de que Ghost se encuentra corriendo correctamente.
Podemos acceder a "Glish Console" desde el apartado "Console Access" del tab Remote Access de nuestro administrador de Linode.

Linode Glish Console

Cuando nos pida usuario y contraseña nos logueamos al server, abrimos un navegador web y accedemos a la dirección http://127.0.0.1:2368. Si todo salió bien tendremos que ver algo así:

Nota: para que funcione debe estar corriendo el comando npm start --production.

Vamos a aprovechar que estamos aquí para crear nuestra cuenta de administrador. Ingresamos a la url http://127.0.0.1:2368/ghost/signup y con solo completar nuestro nombre, email, contraseña y nombre de blog ya tendremos acceso al sitio de administración de Ghost.

Como configurar Ghost

En el directorio raíz de Ghost (/var/www/blog) vamos a encontrar el archivo config.js que guarda la configuración de cada entorno de ejecución (producción, desarrollo, testing, etc.).
Vamos a modificar algunas opciones del ambiente de producción:

1. URL
Esta URL debe coincidir con la URL que escribirías en tu navegador para acceder al blog.

url: 'http://www.luciano.im',

Nota: Si aún no tenes un nombre de dominio mas adelante te muestro como adquirir uno, solo recorda volver y configurar la URL en Ghost.

2. Mail
Posiblemente sea una de las configuraciones mas importantes, ya que en caso de olvidarnos la password de acceso al admin, Ghost podrá enviarnos una nueva vía correo electrónico.

mail: {
    transport: 'SMTP',
    options: {
        service: 'Gmail',
        auth: {
            user: 'micorreo@gmail.com',
            pass: 'mipassword'
        }
    }
},

3. Database
Por defecto Ghost viene configurado para usar SQLite como base de datos, pero también puede trabajar con MySQL y PostgreSQL.
Vamos a dejar SQLite ya que no requiere configuración alguna, es una base muy liviana y confiable.

4. Server
Si decidimos cambiar la IP o puerto en que va a correr Ghost, debemos indicarlo en esta opción, de lo contrario dejaremos los siguientes valores:

server: {
    host: '0.0.0.0',
    port: '2368'
}

Ejecutar Ghost como servicio

Necesitamos que Ghost se ejecute indefinidamente. Si cerramos la terminal, el comando npm start habrá finalizado y Ghost ya no estará disponible si intentamos acceder por el navegador, tal como hicimos anteriormente.
El comando npm start es apropiado para desarrollar en nuestra maquina local o realizar pruebas en el servidor, pero para producción necesitamos que Ghost se ejecute como un servicio.

Según la documentación, hay varias formas de correr Ghost como un servicio: Forever, PM2, Supervisor e Init Script.
Vamos a elegir la ultima opción ya que parece ser la mas indicada para un server Linux.

Init Script

Con Init Script pondremos a correr Ghost desde el booteo del sistema, para que vuelva a ejecutarse de forma automática ante cualquier reinicio del servidor, logrando que nuestro blog se mantenga siempre online.

Los desarrolladores de Ghost dejaron en el repositorio del proyecto un script que podemos utilizar en nuestro VPS. Lo descargamos y guardamos como /etc/init.d/ghost con el siguiente comando:

$ sudo curl https://raw.githubusercontent.com/TryGhost/Ghost-Config/master/init.d/ghost \ -o /etc/init.d/ghost

Abrimos el archivo con el editor de texto vim que viene con Ubuntu:

$ sudo vim /etc/init.d/ghost

Buscamos la variable GHOST_ROOT y asignamos la ruta completa hacia la instalación de Ghost:

GHOST_ROOT=/var/www/blog

También vamos a chequear que la variable DAEMON contenga el valor que se obtiene de ejecutar el comando which node.

DAEMON=/usr/bin/node

Guardamos y salimos del editor.

Ahora vamos a encargarnos de que el script tenga los permisos necesarios para ejecutarse. En primer lugar Init Script corre con su propio usuario y grupo (de Linux):

$ sudo useradd -r ghost -U

Luego vamos a asegurarnos que el nuevo usuario tenga acceso al directorio root de Ghost:

$ sudo chown -R ghost:ghost /var/www/blog

Asignamos permisos de ejecución al script:

$ sudo chmod 755 /etc/init.d/ghost

Y por ultimo lo registramos para que se inicie en el arranque del servidor:

$ sudo update-rc.d ghost defaults
$ sudo update-rc.d ghost enable

Bien! Solo resta iniciar el servicio y nuestro blog estará activo:

$ sudo service ghost start

Nota: Con los parametros stop, restart y status podremos parar, reiniciar y chequear el estado de Ghost.

Comprar un nombre de dominio

Si aún no tenes tu nombre de dominio, Name.com es una buena alternativa donde adquirir uno, y acepta pagos con tarjeta de crédito y saldo PayPal. Puede que haya otros servicios mas baratos pero a mi me ha funcionado y me genera confianza, por eso lo sigo eligiendo para comprar mis dominios.

Cuando tengamos el nombre de dominio, necesitamos dirigirlo a nuestro servidor, para ello vamos a crear los DNS en Linode y asociarlos al dominio en Name.com:

Primero, en el administrador de Linode nos dirigimos al tab DNS Manager. Vamos al link "Add a domain zone", donde ingresaremos el nombre de nuestro dominio, un email de contacto y seleccionaremos la opción "Yes, insert a few records to get me started".

Creando los DNS para nuestro dominio

Un ultimo click en "Add a Master Zone" y se crearan los DNS (NS Records) para nuestro dominio.

DNS de nuestro dominio en Linode

Ahora nos vamos al administrador de Name.com, a la sección "Nameservers", donde agregaremos de a uno los DNS de Linode en el campo "Add Nameserver", aceptandolos con el boton "Add".

Configuración de nameservers en Name.com

Nota: Esta acción puede tardar 24 hs. en tomar efecto aproximadamente, por lo cual es probable que al ingresar tu dominio en el navegador no encuentre tu blog, si recién acabas de configurar los DNS.

Configurar Apache para servir nuestro blog

Ya tenemos nuestro VPS con Ghost configurado y corriendo, y un dominio apuntando a nuestros DNS, solo falta un ultimo paso, un servidor web que se encargue de recibir las peticiones HTTP y servir las paginas y archivos del blog.

La guía "Hosting a Website" de Linode te enseñara a instalar y configurar Apache, el servidor web mas popular, actualmente utilizado por mas del 50% de los sitios web de todo Internet.
Te recomiendo seguir los apartados "Install Apache" y "Optimize Apache for a Linode 1GB" de la guía antes de continuar con el post.

Apache web server

Con Apache instalado y configurado vamos a crear un virtual host para nuestro blog.
Un virtual host es un archivo que contiene una serie de directivas y configuraciones independientes para un dominio especifico. Esto nos permite alojar varios sitios en un mismo servidor compartiendo la misma IP.

Nos conectamos al VPS por SSH y creamos nuestro archivo virtual host (puede llevar el nombre que quieran pero la extension debe ser .conf) en el directorio de sitios disponibles de Apache, luego lo editamos con vim:

$ cd /etc/apache2/sites-available
$ sudo vim lucianoblog.conf

Dentro pegamos la siguiente configuración:

<VirtualHost *:80>
    #Domain Name
    ServerAdmin micorreo@gmail.com
    ServerName www.luciano.im
    ServerAlias luciano.im

    #HTTP proxy/gateway server
    ProxyRequests off 
    ProxyPass / http://127.0.0.1:2368/ 
    ProxyPassReverse / http:/127.0.0.1:2368/     
</VirtualHost>

Guardamos y salimos del editor.

Con la configuración anterior le decimos a Apache que cuando reciba una petición HTTP por el puerto 80 para el dominio luciano.im realice una redirección a la URL http:/127.0.0.1:2368/ donde se encuentra corriendo Ghost.

Para que esto funcione vamos a asegurarnos de habilitar los modulos proxy y proxy_http:

$ sudo a2enmod proxy
$ sudo a2enmod proxy_http

Habilitamos nuestro virtual host con el siguiente comando:

$ sudo a2ensite lucianoblog.conf

Nota: Si queremos deshabilitar un sitio lo hacemos con el comando a2dissite.

Por ultimo reiniciamos Apache para aceptar todos los cambios:

$ sudo service apache2 restart



¡Todo listo! Siguiendo todos los pasos tendras tu blog corriendo y preparado para comenzar a crear y compartir todo tu contenido.

Cualquier duda, déjala en los comentarios o me escribis a hola@luciano.im.

comments powered by Disqus