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
- Instalar Docker CE en Ubuntu 18.04 LTS
- Configurar Docker para un usuario no root
- Instalar Docker Compose
- 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
- Despliega Ghost con MySQL y Traefik
- 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.
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.
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.
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
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
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.
Y ahora tenemos todo el directorio y la configuración como se muestra a continuación.
tree
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
Cuando esté completo, comprueba todos los servicios en ejecución.
docker-compose ps
Y el siguiente es el resultado.
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
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’.
Y a continuación aparece el 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.
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.
Escribe el usuario detallado, la contraseña y el correo electrónico, y vuelve a hacer clic en el botón verde.
Para invitar a un nuevo miembro o usuario, haz clic en el enlace «Lo haré más tarde…».
Ahora obtendrás el Panel de control de Ghost.
Y después de crear el post de ejemplo, el resultado es el siguiente.
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.