Guía Docker: Despliegue de Ghost Blog con MySQL y Traefik con Docker

Ghost es una potente plataforma de publicación y blog de código abierto basada en nodejs. Está bien diseñada y es fácil de usar. La plataforma Ghost está escrita en JavaScript y utiliza node.js como entorno de ejecución. La primera versión de Ghost se publicó en 2013 bajo la licencia MIT..

Traefik es un moderno proxy inverso HTTP y equilibrador de carga para microservicios. Traefik facilita el despliegue de todos los microservicios, integrado con los componentes de infraestructura existentes, como Docker, Swarm Mode, Kubernetes, Amazon ECS, Rancher, Etcd, Consul, etc.

En este tutorial, mostraremos paso a paso cómo instalar y configurar Ghost como un contenedor Docker. Instalaremos y configuraremos Ghost bajo la última versión de Docker CE, utilizaremos MySQL como base de datos y usaremos Traefik como Proxy Inverso.

Requisitos previos

  • Ubuntu 18.04 LTS
  • Privilegios de root

Qué vamos a hacer

  1. Instalar Docker CE en Ubuntu 18.04 LTS
  2. Configurar Docker para un usuario no root
  3. Instalar Docker Compose
  4. Configurar Ghost Stack
    • Crear una red personalizada
    • Crear un directorio de proyecto
    • Crear y configurar el contenedor MySQL
    • Crear y configurar el proxy inverso Traefik
    • Crear y configurar el contenedor de Ghost
  5. Despliega Ghost con MySQL y Traefik
  6. Prueba de

Paso 1 – Instalar Docker CE en Ubuntu 18.04 LTS

El primer paso que haremos en este tutorial es instalar la última versión de docker-ce del sistema. La versión docker-ce se puede instalar desde el repositorio oficial de docker.

Añade la clave docker y el repositorio docker-ce.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

El comando actualizará automáticamente todos los repositorios del sistema.

Ahora instala docker utilizando el comando apt que aparece a continuación.

sudo apt install docker-ce -y

Una vez completada la instalación, inicia el servicio docker y habilítalo para que se lance cada vez que se inicie el sistema.

systemctl start docker
systemctl enable docker

Se ha instalado la última versión de docker-ce en el sistema Ubuntu 18.04.

Instalación de Docker CE

Paso 2 – Configurar Docker para el usuario no root

En esta guía, todos los microservicios de contenedores se ejecutarán bajo el usuario normal/no root. Así que tenemos que configurar el usuario para poder ejecutar el contenedor Docker y ejecutar el comando sudo para obtener privilegios de root.

Crea un nuevo usuario llamado ‘hakase’ y crea la contraseña.

useradd -m -s /bin/bash hakase
passwd hakase

Ahora asigna el usuario ‘hakase’ a los grupos ‘sudo’ y ‘docker’.

usermod -a -G root hakase
usermod -a -G docker hakase

Y reinicia el servicio docker.

systemctl restart docker

Ahora ‘hakase’ puede ejecutar el contenedor docker y ejecutar el comando sudo para obtener privilegios de root.

Configurar Docker para un usuario no root

Inicia sesión como usuario ‘hakase’ y ejecuta el contenedor docker hello-world.

su - hakase
docker run -it hello-world

Y el siguiente es el resultado.

Probar Docker como usuario no root

Paso 3 – Instalar Docker Compose

En este tutorial, instalaremos el docker compose 1.21 desde un archivo binario en el repositorio de Github.

Descarga el binario de docker-compose en el directorio ‘/usr/local/bin’.

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

Y haz que el archivo ‘docker-compose’ sea ejecutable cambiando el permiso del archivo.

sudo chmod +x /usr/local/bin/docker-compose

El docker-compose ha sido instalado – compruébalo con el siguiente comando.

docker-compose version
docker version

Instalar Docker Compose

Se ha instalado Docker-compose 1.21 con Docker-ce 1.18.

Paso 4 – Configurar Ghost Stack

En este paso, configuraremos el docker y crearemos un nuevo archivo docker-compose para la instalación de ghost.

Crearemos una nueva red personalizada docker y crearemos un nuevo archivo docker-compose yml que contenga tres servicios principales, incluyendo la base de datos MySQL, el proxy inverso Traefik y el propio blog de Ghost.

Crear una red personalizada

Muestra la red docker disponible utilizando el comando docker network que aparece a continuación.

docker network ls

Crea una nueva red docker personalizada para el proxy inverso traefik llamada ‘traefiknet’.

docker network create traefiknet

Ahora comprueba de nuevo la red disponible en el sistema docker.

docker network ls

Crear una red personalizada

La red personalizada para Treafik llamada ‘traefiknet’ ha sido creada.

Crea un directorio de proyecto

Después de crear la red personalizada docker, crearemos un nuevo directorio de proyecto llamado ‘ghost’ y crearemos un nuevo archivo docker-compose.yml.

Inicia sesión con el usuario ‘hakase’.

su - hakase

Crea un nuevo directorio ‘ghost’ y cambia el directorio de trabajo a él.

mkdir ghost/
cd ghost/

Y crea un nuevo archivo docker-compose.

touch docker-compose.yml

Crear y configurar el servicio MySQL

MySQL es el primer servicio que queremos crear, y queremos crear el contenedor MySQL con las configuraciones siguientes.

  • Utilizaremos la imagen docker de MySQL 5.7.
  • Monta el directorio de datos de MySQL en el directorio local del docker host.
  • Ejecutar el servicio MySQL en la red interna local.
  • Configurar el usuario y la contraseña de MySQL.
    • Contraseña de root de MySQL: mypassword
    • La base de datos para el fantasma se llama ‘ghostdb’ con el usuario ‘ghost’ y la contraseña es ‘ghostdbpass’
  • El contenedor MySQL se llamará ‘mysql’.

Dentro del directorio ‘ghost’, crea un nuevo directorio llamado ‘data’ y edita el archivo ‘docker-compose.yml’.

mkdir -p data/
vim docker-compose.yml

Pega la configuración de abajo.

version: '3.3'

services:

  mysql:
    image: mysql:5.7
    restart: always
    volumes:
      - ./data:/var/lib/mysql
    labels:
      - "traefik.enable=false"
    networks:
      - internal
    environment:
      MYSQL_ROOT_PASSWORD: mypassword
      MYSQL_USER: ghost
      MYSQL_PASSWORD: ghostdbpass
      MYSQL_DATABASE: ghostdb
    container_name: mysql

Guarda y sal.

Crear y configurar el proxy inverso Traefik

Después de crear el servicio MySQL, crearemos y configuraremos el contenedor de proxy inverso traefik.

Antes de editar el script ‘docker-compose.yml’, tenemos que crear una nueva configuración de traefik llamada ‘traefik.toml’.

vim traefik.toml

Pega la configuración de las reglas de traefik a continuación.

#Traefik Global Configuration
debug = false
checkNewVersion = true
logLevel = "ERROR"

#Define the EntryPoint for HTTP and HTTPS
defaultEntryPoints = ["https","http"]

#Define the HTTP port 80 and
#HTTPS port 443 EntryPoint
#Enable automatically redirect HTTP to HTTPS
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]

#Enable Traefik Dashboard on port 8080
#with basic authentication method
#hakase and password
[entryPoints.dash]
address=":8080"
[entryPoints.dash.auth]
[entryPoints.dash.auth.basic]
    users = [
        "hakase:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi.",
    ]

[api]
entrypoint="dash"
dashboard = true

#Enable retry sending a request if the network error
[retry]

#Define Docker Backend Configuration
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "hakase-labs.io"
watch = true
exposedbydefault = false

#Letsencrypt Registration
#Define the Letsencrypt ACME HTTP challenge
[acme]
email = "[email protected]"
storage = "acme.json"
entryPoint = "https"
OnHostRule = true
  [acme.httpChallenge]
  entryPoint = "http"

Guarda y sal.

Ahora tenemos que crear un nuevo archivo para la configuración de SSL Letsencrypt ‘acme.json’. Se utilizará para almacenar todos los letsencrypt que generen un registro.

Crea el archivo ‘acme.json’ en blanco y cambia el permiso a 600.

touch acme.json
chmod 600 acme.json

A continuación, editaremos el script ‘docker-compose.yml’ y añadiremos la configuración del servicio traefik.

  • Utilizaremos la última imagen docker de traefik.
  • El contenedor se llamará ‘traefik’.
  • Utiliza la red personalizada ‘traefiknet’, y expone los puertos HTTP y HTTPS.
  • Monta el archivo docker sock y la configuración de traefik ‘traefik.toml’ y ‘acme.json’
  • Definimos la URL del panel de control de traefik y el backend a través de las etiquetas docker.

Edita el archivo ‘docker-compose.yml’.

vim docker-compose.yml

Pega la configuración del servicio traefik a continuación.

  traefik:
    image: traefik:latest
    command: --docker
    ports:
      - 80:80
      - 443:443
    labels:
      - "traefik.enable=true"
      - "traefik.backend=dashboard"
      - "traefik.frontend.rule=Host:traef.hakase-labs.io"
      - "traefik.port=8080"
    networks:
      - traefiknet
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
      - ./acme.json:/acme.json
    container_name: traefik
    restart: always

Guarda y sal.

Crear y configurar el servicio fantasma

Después de configurar el proxy inverso de traefik, crearemos la configuración principal del servicio fantasma.

Detalles de la configuración que queremos crear.

  • Utilizaremos la versión ghost v1 y la versión docker alpina pequeña.
  • Montaremos el directorio de contenido de ghost en el directorio local llamado ‘blog’.
  • El servicio ghost se ejecutará en el puerto por defecto con el nombre de dominio ‘gho.hakase-labs.io’, la configuración a través de las etiquetas docker.
  • El servicio fantasma utilizará dos redes docker, la interna y la traefiknet.
  • Vamos a configurar los detalles de la base de datos MySQL desde la configuración del contenedor mysql.
  • Y el fantasma se iniciará cuando el contenedor traefik y MySQL estén en funcionamiento.

Crea un nuevo directorio llamado ‘blog’ y edita el archivo ‘docker-compose.yml’.

mkdir -p blog/
vim docker-compose.yml

Pega la configuración de abajo.

  ghost:
    image: ghost:1-alpine
    restart: always
    ports:
      - 2368
    volumes:
      - ./blog:/var/lib/ghost/content
    labels:
      - "traefik.enabled=true"
      - "traefik.backend=ghost"
      - "traefik.frontend.rule=Host:gho.hakase-labs.io"
      - "traefik.docker.network=traefiknet"
      - "traefik.port=2368"
    networks:
      - internal
      - traefiknet
    environment:
      database__client: mysql
      database__connection__host: mysql
      database__connection__user: ghost
      database__connection__password: ghostdbpass
      database__connection__database: ghostdb
    container_name: ghost
    depends_on:
      - mysql
      - traefik

networks: traefiknet: external: true internal: external: false

Guarda y sal.

Crear y configurar el servicio fantasma

Y ahora tenemos todo el directorio y la configuración como se muestra a continuación.

tree

archivos de configuración

Paso 5 – Desplegar Ghost con MySQL y Traefik

Para construir y ejecutar todo nuestro servicio de pila ghost, podemos utilizar el comando de abajo.

docker-compose up -d

Desplegar Ghost con MySQL y Traefik

Cuando esté completo, comprueba todos los servicios en ejecución.

docker-compose ps

Y el siguiente es el resultado.

docker-compose ps

Si tienes un error, comprueba el registro del contenedor utilizando los comandos siguientes.

docker-compose logs mysql
docker-compose logs traefik
docker-compose logs ghost

comprueba el registro de contenedores

La pila fantasma con MySQL y el proxy inverso Traefik está funcionando.

Paso 6 – Prueba

Abre el panel de control de Traefik con su URL, la mía eshttp://traef.hakase-labs.io/

Inicia sesión con el usuario y la contraseña en el archivo ‘traefik.toml’.

Acceder a Traefik

Y a continuación aparece el panel de control de Traefik.

Panel de control de Traefik

Para la instalación de Ghost, escribe la URL de Ghost en la barra de direcciones, la mía eshttp://gho.hakase-labs.io/

Y obtendrás la página de inicio de ghost.

El blog de Ghost se ejecuta en Docker

Ahora visita la página de administración para establecer y configurar un nuevo usuario administrador. Mi URL es: http://gho.hakase-labs.io/admin/

Haz clic en el botón verde para crear un nuevo usuario administrador.

Instalador fantasma

Escribe el usuario detallado, la contraseña y el correo electrónico, y vuelve a hacer clic en el botón verde.

Crear acceso de administrador

Para invitar a un nuevo miembro o usuario, haz clic en el enlace «Lo haré más tarde…».

Invitar a los usuarios

Ahora obtendrás el Panel de control de Ghost.

Tablero fantasma

Y después de crear el post de ejemplo, el resultado es el siguiente.

Glog fantasma ejecutado en un contenedor Docker

La instalación del blog de Ghost con la base de datos MySQL y el Proxy Inverso de Traefik en el entorno Docker se ha completado con éxito.

Referencias

También te podría gustar...