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
- Instalar Docker CE en Ubuntu 18.04 LTS
- Configurar Docker para usuario no root
- Instalar Docker Compose
- 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
- Desplegar Ghost con MySQL y Traefik
- 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 -yDespué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 dockerLa última versión de docker-ce se ha instalado en el sistema Ubuntu 18.04.

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 hakaseAhora asigna al usuario ‘hakase’ a los grupos ‘sudo’ y ‘docker’.
usermod -a -G root hakase
usermod -a -G docker hakaseY reinicia el servicio de docker.
systemctl restart dockerEl ‘hakase’ ahora puede ejecutar el contenedor de docker y ejecutar el comando sudo para privilegios de root.

Inicia sesión como usuario ‘hakase’ y ejecuta el contenedor hello-world de docker.
su - hakase
docker run -it hello-worldY el siguiente es el resultado.

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-composeY haz que el archivo ‘docker-compose’ sea ejecutable cambiando los permisos del archivo.
sudo chmod +x /usr/local/bin/docker-composeEl docker compose se ha instalado - verifícalo usando el comando a continuación.
docker-compose version
docker version
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 lsCrea una nueva red personalizada de docker para el proxy inverso traefik llamada ‘traefiknet’.
docker network create traefiknetAhora verifica nuevamente la red disponible en el sistema docker.
docker network ls
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 - hakaseCrea 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.ymlCrear 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.ymlPega 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: mysqlGuarda 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.tomlPega 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.jsonA 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.ymlPega 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: alwaysGuarda 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.ymlPega 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: falseGuarda y sal.

Y ahora tenemos todos los directorios y configuraciones como se muestra a continuación.
tree
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
Cuando esté completo, verifica todos los servicios en ejecución.
docker-compose psY 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
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.

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.

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.

Escribe los detalles del usuario, contraseña, correo electrónico y haz clic nuevamente 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 Dashboard de Ghost.

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

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
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.