Cómo implementar un blog Ghost con Docker

Ghost es una popular plataforma de creación de contenido escrita en JavaScript con Node.js. El software de código abierto viene con todo lo que necesita para crear, crear temas, publicar y mantener su blog.

Ghost es un software de código abierto compatible con el servicio alojado oficial de Ghost (Pro). Puede instalarlo en su servidor agregando Node.js y usando Ghost CLI para configurar su pila. Ghost también está disponible como una imagen de Docker que agrupa todas las dependencias por usted.

En esta guía, usaremos Docker para poner en marcha rápidamente un nuevo blog de Ghost. Instale Docker y Docker Compose en su host antes de continuar. Si bien puede implementar Ghost solo con Docker, Compose facilita proporcionar y administrar los valores de configuración que su sitio necesita para comenzar.

Índice de contenidos
  1. Inicio de un contenedor fantasma
    1. Configuración fantasma
  2. Usar una base de datos externa
  3. Reenvío de tráfico a su contenedor
  4. Gestión de actualizaciones fantasma
  5. Usando fantasma-cli
  6. Resumen

Inicio de un contenedor fantasma

Puede iniciar un sitio Ghost básico con un solo comando de Docker:

docker run -d -p 2368:2368 --name simple-ghost ghost:4

Esto hará que Ghost aparezca en su puerto predeterminado de 2368. Visite http://localhost:2368 para ver su sitio o http://localhost:2368/ghost para acceder al panel de administración de Ghost. Deberá proporcionar algunas configuraciones de primera ejecución para finalizar la instalación de Ghost y crear una cuenta de usuario inicial.

Este enfoque es excelente para la experimentación rápida si solo está probando Ghost. Sin embargo, aún no hemos configurado el almacenamiento persistente, por lo que sus datos se perderán cuando el contenedor se detenga.

Aquí hay un ejemplo más completo usando Docker Compose para configurar Ghost con un volumen Docker. Montar un volumen en /var/lib/ghost/content directorio para almacenar datos de Ghost fuera del contenedor.

version: "3"
services:
  ghost:
    image: ghost:4
    ports:
      - 8080:2368
    environment:
      url: https://ghost.example.com
    volumes:
      - ghost:/var/lib/ghost/content
    restart: unless-stopped
volumes:
  ghost:

Este archivo Compose muestra algunos otros cambios en la configuración del contenedor. El puerto 2368 expuesto por el contenedor se asigna al puerto 8080 en su host, lo que le permite usar localhost:8080 para acceder a Fantasma. La política de reinicio se cambia a unless-stopped para asegurarse de que su sitio se inicie automáticamente después de que se reinicie el host.

Ahora usa Redactar para ver tu sitio:

docker-compose up -d

Configuración fantasma

Ghost admite varios parámetros de configuración para personalizar su funcionamiento y configurar su sitio. Al usar Docker, puede proporcionar estos valores como variables de entorno.

Los archivos de configuración de Ghost usan objetos JSON anidados para almacenar valores. Puede convertir claves JSON en sus equivalentes de variables de entorno reemplazando cada nivel del árbol con __ (doble guión bajo) caracteres:

# in a JSON config file
{
    "mail": {
        "transport": "SMTP"
    }
}

# as an environment variable
mail__transport=SMTP

Utilizar el environment campo en el tuyo docker-compose.yml para proporcionar estos parámetros a su contenedor Ghost:

version: "3"
services:
  ghost:
    environment:
      mail__transport: SMTP

Consulte la documentación de Ghost para obtener una lista completa de las opciones admitidas. Puede configurar un sistema de correo, usar una URL separada para acceder al panel de administración, omitir las rutas del directorio y habilitar las opciones de privacidad a través de las variables de entorno disponibles.

El url la opción es especialmente importante ya que se requiere para sitios de producción en vivo. Esto define la URL que los visitantes externos utilizarán para acceder a su sitio. Establézcalo en el nombre de dominio de su sitio en el suyo docker-compose.yml:

environment:
  url: https://ghost.example.com

Usar una base de datos externa

De manera predeterminada, Ghost usa una base de datos SQLite almacenada como un archivo en el directorio de contenido de su sitio. Se mantendrá como parte del volumen de Docker creado anteriormente. En su lugar, puede usar una base de datos MySQL externa proporcionando detalles de conexión a través de database- variables de entorno preestablecidas:

services:
  ghost:
    # ...
    environment:
      database__client: mysql
      database__connection__host: ghost_mysql
      database__connection__user: root
      database__connection__password: databasePw
      database__connection__database: ghost

  ghost_mysql:
    image: mysql:5.7
    expose:
      - 3306
    environment:
      MYSQL_DATABASE: ghost
      MYSQL_ROOT_PASSWORD: databasePw
    volumes:
      - mysql:/var/lib/mysql
    restart: unless-stopped

volumes:
  mysql:

Este archivo Compose incluye otro servicio que ejecuta MySQL en un contenedor adicional. Las variables de entorno se configuran en el servicio Ghost para proporcionar los detalles de conexión de MySQL. Una separacion mysql el volumen se crea para conservar los archivos de almacenamiento de la base de datos.

Compose conecta automáticamente los servicios a una red Docker. Fantasma puede llegar a la ghost_mysql contenedor utilizando el nombre del servicio como nombre de host. Si desea utilizar una base de datos MySQL no dockerizada existente, puede eliminar el archivo ghost_mysql definición del servicio y proporcione la dirección IP, el nombre del esquema de la base de datos y las credenciales de usuario del servidor MySQL en su lugar.

Reenvío de tráfico a su contenedor

Su sitio Ghost ahora debería estar en funcionamiento, pero aún está expuesto en el puerto 8080. Si no ejecutará nada más en su host, podría asignar el puerto 80 o 443 para que sea directamente accesible a través del nombre de dominio de su servidor. En otras situaciones, use un proxy inverso como NGINX para reenviar el tráfico de la web a su contenedor Ghost.

Agregue NGINX a su host:

sudo apt update
sudo apt install nginx

# Allow HTTP/HTTPS traffic through the firewall
sudo ufw allow 80
sudo ufw allow 443

Defina un host NGINX para su sitio en /etc/nginx/sites-available/ghost.example.com:

server {
    
    server_name ghost.example.com;
    index index.html;

    access_log /var/log/nginx/ghost_access.log
    error_log /var/log/nginx/ghost_error.log error;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Original-IP $remote_addr;
    }

}

Este archivo configura NGINX para reenviar tráfico a ghost.example.com hasta el puerto 8080 en adelante localhost, que anteriormente estaba vinculado a su contenedor Ghost. Habilite el nuevo archivo de configuración conectándolo a NGINX sites-enabled directorio:

sudo ln -s /etc/nginx/sites-available/ghost.example.com /etc/nginx/sites-enabled/ghost.example.com

Reinicie NGINX para aplicar los cambios:

sudo service nginx restart

Ahora puede configurar SSL con el servicio gratuito Let's Encrypt. Agregue el Certbot de Let's Encrypt para automatizar la emisión y renovación de certificados:

sudo apt install certbot

Use Certbot para obtener certificados para su sitio NGINX:

sudo certbot --nginx

Certbot leerá sus sitios NGINX y generará certificados para los suyos server_name campos de configuración. Reconfigure automáticamente NGINX para servir el certificado con su sitio. Ahora debería poder acceder a su blog Ghost visitando su nombre de dominio a través de HTTPS.

Si bien nos hemos centrado en NGINX en este artículo, existen otras opciones para el tráfico web proxy a través de su contenedor Ghost. Traefik es un competidor importante que tiene soporte de primera clase para Docker. La implementación de una instancia de Traefik le permite configurar el enrutamiento y SSL automático a través de las etiquetas de Docker que habría configurado en su contenedor Ghost.

Gestión de actualizaciones fantasma

Puede actualizar Ghost reemplazando el contenedor Docker de su sitio con uno nuevo que ejecute una versión actualizada de la imagen de Ghost. Dado que el contenido de su sitio se almacena de forma segura en un volumen Docker independiente, se conservará cuando el volumen se vuelva a conectar al nuevo contenedor.

Si está etiquetando una versión principal de la imagen en su docker-compose.yml, p.ej ghost:4, puede actualizar a la última versión secundaria ejecutando docker-compose up con el --pull bandera:

docker-compose up -d --pull

Esto le indica a Compose que busque cambios en la etiqueta de la imagen y que extraiga una versión actualizada cuando esté disponible. Reemplazará sus contenedores con nuevas instancias utilizando la última versión de la imagen que coincida con la etiqueta.

Cuando desee cambiar la etiqueta que está utilizando, actualice el archivo image referencia en el tuyo docker-compose.yml Archivo. Repetir docker-compose up -d para extraer la imagen y comenzar nuevos contenedores. Por ejemplo, si Ghost v5 se lanza en el futuro, es posible que desee cambiar el suyo docker-compose.yml a image: ghost:5 para cambiar a la nueva versión principal.

Docker facilita la obtención de actualizaciones de Ghost al extraer la imagen más reciente y reemplazar los contenedores. Sin embargo, aún debe prestar atención a los cambios que está aplicando. Consulte el registro de cambios de Ghost antes de realizar una actualización importante en caso de que necesite realizar pasos adicionales para completar la migración.

Usando fantasma-cli

ghost-cli está disponible dentro de la imagen de Ghost Docker. Esta utilidad se usa para configurar y mantener Ghost cuando se instala en entornos tradicionales sin contenedores.

Puedes iniciar sesión ghost-cli a través de Docker usando el ghost comando con docker exec. Aquí hay un ejemplo que usa el version subcomando para revelar la versión de Ghost que está utilizando:

docker exec -it my-ghost-container ghost version

Aunque muchos ghost-cli los componentes funcionarán, algunos no son compatibles con entornos dockerizados. Comandos como install, setup, update, Y uninstall se rompen, no tienen sentido o son contrarios a las mejores prácticas cuando se usan con la imagen de Ghost Docker. Ghost y todas sus dependencias están integrados en la imagen y no es necesario "instalarlos"; las actualizaciones deben aplicarse iniciando un nuevo contenedor, como se muestra arriba.

Resumen

Ghost es una plataforma de blogs moderna que ofrece un panel de control limpio, contenido avanzado enriquecido y capacidades de creación de temas, y soporte de personalización. El uso de Docker para alojar Ghost simplifica el proceso de configuración, reduce la cantidad de paquetes de sistema operativo necesarios y ayuda a que su sitio sea más portátil en todos los entornos.

Una vez que su blog dockerizado esté en funcionamiento, use la documentación de desarrollo estándar de Ghost para administrar su sitio y su contenido. Puede configurar suscripciones, boletines, temas personalizados e integraciones de API utilizando las funciones integradas de la plataforma.

Descubre más contenido

Subir Change privacy settings