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.