Instalando Ghost con Docker

Instalando Ghost con Docker

Para este pequeño taller debemos un poco tener claro algunos temas de docker, como: Imagen, Contenedor, Volúmenes, diferencias entre docker y docker-compose.

Como primer paso necesitamos bajar la imagen base de ghost.

docker pull ghost

Por defecto siempre bajara la ultima versión, es decir latest, si necesitas alguna versión diferente, se necesario especificar algo similar a esto:

Creando el contenedor

docker run -d --name ghost-sqlite -p 2368:2368 ghost

Notarás que he llamado a nuestro primer contenedor como ghost-sqlite, la razón de ello es que por defecto sqlite es la db predeterminada, haciendo esto podríamos acceder así localhost:2368 (Lo cual también es el puerto por defecto)

Nota. Si en lugar del puerto 2368, colocáramos otro puerto, al querer navegar en cualquier liga nos daría un error de Not-Found

Ghost tiene variables globales de configuración, estas se pasan antes de levantar el proceso de Node, pero como estamos creando un contenedor la cosa cambia un poco, haremos una prueba sencilla pasando parámetro:

docker run -d --name ghost-sqlite2 -p 3001:2368 -e url=http://localhost:3001 -e admin_url=/admin ghost

Los parámetros:

url: La URL del sitio, sin este parámetro nos seguiría dando un error de Not Found

admin_url: Sobrescribir la ruta del panel de administración.

Para mas información de estas variables, revisar aquí

Usando docker-compose

Docker-compose es una herramienta que nos permite de una forma fácil orquestar comunicación y dependencias entre contenedores, de forma que escribimos una vez la receta(archivo .yml) y ejecutarla las veces que queramos, en este ejemplo emplearemos una dependencia de MySQL para la base de datos, con lo cual tendríamos una instalación estandard de Ghost.

version: '3.1'

services:

  ghost:
    image: ghost:latest
    restart: always
    ports:
      - 2368:2368
    environment:
      database__client: mysql
      database__connection__host: db
      database__connection__user: root
      database__connection__password: MY_PASSWORD_DB
      database__connection__database: ghost
      url: "http://localhost:2368"
      server_host: "127.0.0.1"
      port: 2368 

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: MY_PASSWORD_DB

Posteriormente tendremos que ejecutar (teniendo el archivo docker-compose.yaml en la carpeta raiz):

docker-compose up

Podemos finalizarlo (Ctrl-C), ya que los contenedores ya están creados, ya solo tendríamos que ejecutar:

dockder-compose start

Si revisamos los contenedores que se están ejecutando. veremos:

Empleando un volumen

Hemos visto como crear un contenedor de forma automatizada por medio de un archivo .yml, pero esto tiene una limitación: cada vez que necesites realizar algún cambio sobre alguna configuración de Ghost, los cambios que hayas hecho sobre el sitio se perderían(publicaciones, configuraciones, etc), pues bien, nuestro archivo .yml quedaría de esta forma:

version: '3.1'

services:

  ghost:
    image: ghost:latest
    restart: always
    ports:
      - 2368:2368
    environment:
      database__client: mysql
      database__connection__host: db
      database__connection__user: root
      database__connection__password: MY_PASSWORD_DB
      database__connection__database: ghost
      url: "http://localhost:2368"
      server_host: "127.0.0.1"
      port: 2368 

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: MY_PASSWORD_DB
    volumes:
      - /ruta/pchost:/var/lib/mysql

Nos leemos en la próxima.