Ghost es una plataforma de blogging desarrollada sobre NodeJS y Handlebars (y con sqlLite3 por defecto) que es totalmente de Código Abierto con una idea muy clara: hacer una cosa y hacerla muy bien. De esta manera se centran exclusivamente a la creación de contenido y nada más (por eso es tan maravilloso crear contenido como veréis más adelante).

¿Qué podemos hacer con Ghost?

Gestión de usuarios: Ghost es multiusuario, por lo que podemos crear diferentes usuarios con diferentes roles, para así mantener una cierta jerarquía en cuanto a permisos de usuarios.

Gestión de categorías: Puedes crear, eliminar y modificar categorías que podrás asignar a tus entradas. Además cada categoría puede tener una imagen destacada.

Gestión de menús: También puedes crear varios menús para tu plantilla y gestionarlos desde el panel de administración.

Editor de MarkDown: Lo mejor de Ghost para mi. Para crear los artículos de Ghost podemos utilizar tanto HTML como MarkDown, pudiendo así escribir entradas de manera más rápida y dinámica. La vista de editor la página se divide en dos zonas, una para editar y otra para la previsualización de lo que escribimos.

SEO: En Ghost el RSS y el sitemap están incluidos en el core y se generan automáticamente (disponibles en /rss y /sitemap.xml). Además podemos cambiar las URL y etiquetas meta de todos nuestros artículos y categorías para facilitar la indexación de nuestro contenido con los motores de búsqueda.

Exportación/Importación de contenido: Nunca fue tan fácil la importación/exportación de contenido. Al utilizar archivos JSON para importar y exportar contenido hace que todo sea más simple y fácil con un solo clic.

Plantillas: Hay una cantidad enorme de plantillas para usar con Ghost. Y si eres atrevido o simplemente eres desarrollador web puedes hacer una en cuestión de horas (yo lo hice, es realmente fácil y tienen una documentación perfecta

Ghost y Docker

Lo que vamos hacer en este tutorial es desplegar un contenedor de Ghost con Docker. Esto puede ser interesante si -como yo- odias terriblemente NodeJS porque nunca consigues instalar cosas con esta diabólica tecnología. Esto lo haremos todo en un servidor VPS donde previamente tendremos que instalar Docker, que para ello os dejo este artículo que escribí en el pasado:

Instalación de Docker en Debian 8.2 [Parte 1]

Desplegar contenedor de Ghost

Empezaremos con descargarnos la imagen de Ghost:

docker pull ghost:latest

Una vez descargada, crearemos un usuario en el sistema llamado ghost:

adduser ghost

Iniciaremos sesión como el usuario ghost:

su ghost

Y dentro del home del usuario, crearemos el fichero de configuración para desplegar el contenedor. Para ello primero crearemos el directorio:

mkdir ghost_volume

Y dentro de él, creamos el fichero de configuración llamado config.json:

touch ghost_volume/config.json

Y dentro de él, añadiremos lo siguiente:

{
    "url": "http://my.domain.com",
    "server": {
        "port": 2368,
        "host": "0.0.0.0"
    },
    "database": {
        "client": "sqlite3",
        "connection": {
            "filename": "/var/lib/ghost/content/data/ghost.db"
        }
    },
    "mail": {
        "transport": "Direct"
    },
    "logging": {
        "transports": [
            "file",
            "stdout"
        ]
    },
    "process": "systemd",
        "paths": {
        "contentPath": "/var/lib/ghost/content"
    }
}

Tendremos que modificar el fichero config.json el siguiente parámetro -que podemos añadir o bien un dominio, un subdominio o una IP-:

"url": "http://my.domain.com",

Ahora procederemos a desplegar el contenedor no sin antes salir del usuario ghost con el comando exit:

docker run -d --restart=always -p 80:2368 -v /home/ghost/ghost_volume/content:/var/lib/ghost/content -v /home/ghost/ghost_volume/config.json:/var/lib/ghost/config.production.json --name ghost_blog ghost

Con todo esto, tendremos un usuario con una carpeta llamada ghost_volume en su home -tened en cuenta que esto lo podéis cambiar por la ruta que más os convenga-. Dentro de esa carpeta habrá una carpeta llamada /home/ghost/ghost_volume/content que almacenará todo el contenido del blog, y un archivo llamado config.js que será el archivo de configuración para el blog.

ghost@ghost:~/ghost_volume/content$ ls -lat
total 32
drwxr-xr-x 2 ghost ghost 4096 May 17 12:20 data
drwxr-xr-x 2 ghost ghost 4096 May 17 12:19 logs
drwxr-xr-x 8 ghost root 4096 May 17 12:19 .
drwxrwxr-x 3 ghost ghost 4096 May 17 12:19 ..
drwxr-xr-x 2 ghost ghost 4096 May 10 22:26 themes
drwxr-xr-x 2 ghost ghost 4096 May 10 22:25 apps
drwxr-xr-x 2 ghost ghost 4096 May 10 22:25 images
drwxr-xr-x 2 ghost ghost 4096 May 10 22:25 settings

Con todo esto tendremos nuestro Ghost listo para ser utilizado. Deberías de poder acceder a la dirección IP o el nombre de host a tu blog y verás la siguiente pantalla:

Para poder acceder al backend tendrás que añadir a la URL /admin al final y tendrás que completar el formulario previo para registrar tu cuenta de administrador con el que podrás realizar nuevas publicaciones.

Actualizar Ghost

Para actualizar la imagen de Ghost, tendremos que descargarnos de nuevo la imagen utilizando la etiqueta latest, con este comando:

docker pull ghost:latest

Una vez descargada la actualización, procedemos a eliminar el contenedor y a desplegarlo de nuevo. Esto no borrará nada del contenido del blog, ya que todo el contenido se guardará dentro del directorio /home/ghost/ghost_volume.

docker kill ghost_blog
docker rm ghost_blog
docker run -d --restart=always -p 80:2368 -v /home/ghost/ghost_volume/content:/var/lib/ghost/content -v /home/ghost/ghost_volume/config.json:/var/lib/ghost/config.production.json --name ghost_blog ghost

Fuente: https://blog.programster.org/deploy-ghost-with-docker

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación