Docker Ghost · 9 min read · Feb 04, 2026

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

Ghost es una poderosa 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 lanzó en 2013 bajo la licencia MIT.

Traefik es un proxy inverso HTTP moderno y un balanceador de carga para microservicios. Traefik facilita el despliegue de todos los microservicios, integrado con 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 de Docker. Instalaremos y configuraremos Ghost bajo la última versión de Docker CE, utilizaremos MySQL como base de datos y usaremos Traefik como un Proxy Inverso.

Requisitos previos

  • Ubuntu 18.04 LTS
  • Privilegios de root

Lo que haremos

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

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 de docker-ce se puede instalar desde el repositorio oficial de docker.

Agrega la clave de docker y el repositorio de 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 en el sistema.

Ahora instala docker usando el comando apt a continuación.

sudo apt install docker-ce -y

Después de que la instalación esté completa, inicia el servicio de docker y habilítalo para que se inicie cada vez que se inicie el sistema.

systemctl start docker  
systemctl enable docker

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

Instalando Docker CE

Paso 2 - Configurar Docker para usuario no root

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

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

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

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

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

Y reinicia el servicio de docker.

systemctl restart docker

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

Configurar Docker para usuario no root

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

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 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 los permisos del archivo.

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

El docker compose se ha instalado - verifícalo usando el comando a continuación.

docker-compose version  
docker version

Instalar Docker Compose

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

Paso 4 - Configurar la pila de Ghost

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

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

Crear una red personalizada

Muestra la red docker disponible usando el comando de red de docker a continuación.

docker network ls

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

docker network create traefiknet

Ahora verifica nuevamente la red disponible en el sistema docker.

docker network ls

Crear una red personalizada

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

Crear un directorio de proyecto

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

Inicia sesión como 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 de MySQL con las configuraciones a continuación.

  • Usaremos la imagen de docker de MySQL 5.7.
  • Montar el directorio de datos de MySQL en el directorio del host local de docker.
  • 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
  • Base de datos para el ghost llamada ‘ghostdb’ con usuario ‘ghost’ y contraseña ‘ghostdbpass’
  • El contenedor de 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 a continuación.

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 del proxy inverso traefik.

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

vim traefik.toml

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

#Configuración Global de Traefik
debug = false
checkNewVersion = true
logLevel = "ERROR"

#Definir el EntryPoint para HTTP y HTTPS
defaultEntryPoints = ["https","http"]

#Definir el puerto HTTP 80 y
#Puerto HTTPS 443 EntryPoint
#Habilitar redirección automática de HTTP a HTTPS
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]

#Habilitar el Dashboard de Traefik en el puerto 8080
#con método de autenticación básica
#hakase y contraseña
[entryPoints.dash]
address=":8080"
[entryPoints.dash.auth]
[entryPoints.dash.auth.basic]
    users = [
        "hakase:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi.",
    ]

[api]
entrypoint="dash"
dashboard = true

#Habilitar reintento de envío de una solicitud si hay un error de red
[retry]

#Definir la configuración del Backend de Docker
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "hakase-labs.io"
watch = true
exposedbydefault = false

#Registro de Letsencrypt
#Definir el desafío HTTP de Letsencrypt ACME
[acme]
email = "[email protected]"
storage = "acme.json"
entryPoint = "https"
OnHostRule = true
  [acme.httpChallenge]
  entryPoint = "http"

Guarda y sal.

Ahora necesitamos crear un nuevo archivo para la configuración SSL de Letsencrypt ‘acme.json’. Se utiliza para almacenar todos los registros generados por letsencrypt.

Crea el archivo ‘acme.json’ vacío y cambia el permiso a 600.

touch acme.json  
chmod 600 acme.json

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

  • Usaremos la última imagen de docker de traefik.
  • El contenedor se llamará ‘traefik’
  • Se utiliza la red personalizada ‘traefiknet’, y expone los puertos HTTP y HTTPS.
  • Montar el archivo de socket de docker y la configuración de traefik ‘traefik.toml’ y ‘acme.json’
  • Definimos la URL del dashboard de traefik y el backend a través de las etiquetas de docker.

Edita el ‘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 Ghost

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

Detalles de configuración que queremos crear.

  • Usaremos la versión ghost v1 y la pequeña versión de docker alpine.
  • Montaremos el directorio de contenido de ghost en el directorio local llamado ‘blog’.
  • El servicio ghost se ejecutará en el puerto predeterminado con el nombre de dominio ‘gho.hakase-labs.io’, la configuración a través de las etiquetas de docker.
  • El servicio ghost utilizará dos redes de docker, internal y traefiknet.
  • Estamos configurando los detalles de la base de datos MySQL desde la configuración del contenedor mysql.
  • Y el ghost se iniciará cuando el contenedor traefik y MySQL esté 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 a continuación.

  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 Ghost

Y ahora tenemos todos los directorios y configuraciones como se muestra a continuación.

tree

archivos de configuración

Paso 5 - Desplegar Ghost con MySQL y Traefik

Para construir y ejecutar todos nuestros servicios de pila ghost, podemos usar el comando a continuación.

docker-compose up -d

Desplegar Ghost con MySQL y Traefik

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

docker-compose ps

Y el siguiente es el resultado.

Si tienes un error, verifica el registro del contenedor usando los comandos a continuación.

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

verificar el registro del contenedor

La pila ghost con MySQL y el proxy inverso Traefik está en funcionamiento.

Paso 6 - Pruebas

Abre el dashboard de Traefik con su URL, la mía es http://traef.hakase-labs.io/

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

Y el siguiente es el dashboard de Traefik.

Dashboard de Traefik

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

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

Ghost Blog ejecutándose en Docker

Ahora visita la página de administración para configurar 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 de Ghost

Escribe los detalles del usuario, contraseña, correo electrónico y haz clic nuevamente en el botón verde.

Crear inicio de sesión de administrador

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

Invitar usuarios

Ahora obtendrás el Dashboard de Ghost.

Dashboard de Ghost

Y después de crear la publicación de muestra, el siguiente es el resultado.

Ghost blog ejecutándose en el contenedor Docker

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

Referencias

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.