Cómo desplegar tu propio blog profesional con Ghost y MySQL usando Docker Compose
¿Quieres iniciar un blog profesional, rápido y elegante, autogestionado y sin depender de plataformas externas? En este artículo te guío paso a paso para montar Ghost, el popular motor de blogging, junto con su base de datos MySQL, todo orquestado con Docker Compose. ¡Ideal tanto para curiosos como para futuros escritores de contenidos!
¿Por qué Ghost?
Ghost es un CMS de código abierto especializado en blogging, reconocido por su velocidad y su editor limpio de tipo Markdown. Se centra en la experiencia de escritura, el SEO y la personalización, permitiendo que brille tu contenido.
Y con Docker Compose, su despliegue y mantenimiento no puede ser más simple: un comando y listo, blog en marcha.
¿Qué vamos a montar?
- Un contenedor de Ghost (la aplicación de blogging)
- Un contenedor de MySQL para la base de datos de contenidos
- Red interna Docker privada entre Ghost y MySQL
- Persistencia de datos en directorios locales (por si quieres actualizar o reiniciar sin perder nada)
El docker-compose.yml completo
Puedes copiar y pegar este fichero directamente en una carpeta de tu VPS o servidor, guárdalo como docker-compose.yml
:
version: '3.8'
services:
ghost:
image: ghost:5-alpine
container_name: ghost
restart: unless-stopped
ports:
- "2368:2368"
environment:
database__client: mysql
database__connection__host: db
database__connection__user: ghost
database__connection__password: ghostpassword
database__connection__database: ghostdb
# Puedes cambiar esta URL por la de tu dominio real
url: http://localhost:2368
volumes:
- ./ghost-data:/var/lib/ghost/content
depends_on:
- db
db:
image: mysql:8.4
container_name: ghost_mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: ghostdb
MYSQL_USER: ghost
MYSQL_PASSWORD: ghostpassword
volumes:
- ./mysql-data:/var/lib/mysql
networks:
default:
driver: bridge
Nota: Recuerda cambiar las contraseñas (ghostpassword
y rootpassword
) por valores más seguros antes de exponer el servicio a Internet.
Primeros pasos tras el despliegue
- Crea los directorios de persistencia:
mkdir ghost-data mysql-data
- Levanta la pila con:
docker compose up -d
- Accede en tu navegador a http://localhost:2368 (o sustituye localhost por la IP o dominio de tu servidor) para terminar la configuración inicial de tu blog.
Ventajas del setup propuesto
- Despliegue rápido sobre cualquier VPS, servidor o incluso Raspberry Pi moderno.
- Actualizaciones sencillas:
docker compose pull && docker compose up -d
. - Tus datos están en directorios persistentes del host: seguro y manejable.
- Aislamiento y escalabilidad: puedes subir otros servicios sin conflictos de puertos.
Consejos de producción y troubleshooting 🔧
-
Para producción: Cambia la variable
url
por tu dominio real y añade un proxy inverso (como Nginx Proxy Manager) para HTTPS. -
Respaldo: Haz backup periódicos de las carpetas
ghost-data
ymysql-data
. -
Problemas comunes:
- ¿Ghost no arranca? Comprueba los
LOGS
(docker compose logs ghost
) y que la base de datos esté accesible. - ¿Error de conexión MySQL? Asegura que las variables de entorno y contraseñas coinciden.
- ¿Ghost no arranca? Comprueba los
- Pro tip: Si eres desarrollador, puedes montar los temas de Ghost como volumen extra para editarlos en directo.