GNU/Linux >> Tutoriales Linux >  >> Linux

Guía completa de Ghost CMS con alojamiento propio con Docker

Ghost es un sistema de administración de contenido de código abierto que es adecuado para un blog, boletín informativo o sitio web de membresía.

Es súper rápido y está optimizado para SEO. Nos encanta aquí en Linux Handbook. Nuestro sitio web utiliza Ghost, por supuesto.

Ahora, puede optar por una instancia administrada de Ghost de los creadores de Ghost. Le costaría mucho, pero no tendrá que esforzarse en implementar Ghost, actualizarlo y mantenerlo. Y por supuesto, ayuda al desarrollo del proyecto Ghost.

Si desea evitar gastar mucho o tomar las riendas del asunto con un enfoque de "hágalo usted mismo", puede alojar Ghost en su servidor.

En este tutorial, le mostraré los pasos para implementar Ghost con Docker.

Fantasma de autohospedaje con Docker

Aquí está la cosa. Algunos proveedores de servidores en la nube como DigitalOcean también brindan implementación de Ghost con un solo clic. Esa podría ser la salida más fácil si no quiere los problemas de la instalación y configuración inicial de Ghost.

Aparte de eso, veamos qué necesita para implementar Ghost con Docker en un servidor Linux.

Requisitos

Además de la familiaridad con los comandos de Linux, conocer los conceptos básicos de Docker Compose también será útil aquí.

  • Un servidor Linux. Puede utilizar un servidor físico, una máquina virtual o servidores en la nube. Puede registrarse con nuestro socio Linode y obtener $100 en créditos gratuitos.
  • Docker y Docker Compose instalados en su servidor.
  • Accede al DNS de tu dominio donde quieras implementar Ghost.
  • Configuración de proxy inverso de Nginx con redirección www/non-www y límites de carga permitidos.

Paso 0:Prepare la configuración inicial

Debe tener Docker y Docker Compose instalados en su sistema. Puede consultar estos tutoriales para obtener instrucciones para Ubuntu.

Aparte de eso, también debe tener la configuración del proxy inverso Ngnix. Esto es beneficioso si desea tener más de un Ghost o algún otro servicio web instalado en el mismo servidor.

Ahora, he cubierto este tema en detalle en el tutorial vinculado a continuación, por lo que no voy a repetir los mismos pasos aquí. Sin embargo, debe tener esta configuración en su sistema.

Siga este tutorial hasta el Paso 4:

Paso 1:Preparar la implementación de Ghost

Aquí utilizo el método de proxy inverso de Jwilder porque tiene en cuenta los certificados SSL, la redirección www/non-www y los límites de carga permitidos.

La forma de manejar los certificados SSL ya se describe en el enlace compartido anteriormente en la sección de requisitos. Además, describiré cómo habilitar la redirección www/non-www y aumentar los límites de carga permitidos.

Redirección WWW/no WWW

Dependiendo de sus preferencias de SEO, es posible que desee configurar la redirección de www a no-www o viceversa. Por ejemplo, si su blog está alojado en dominio.com, los usuarios que visiten www.dominio.com deben ser redirigidos a él (tal como funciona el dominio de GitHub).

Del mismo modo, si lo aloja en www.dominio.com, los usuarios que visiten dominio.com deben ser redirigidos (tal como funciona el dominio de Linode).

de WWW a no WWW

Cree un archivo llamado www.domain.com dentro del directorio de redacción de nginx docker con el siguiente contenido y guárdelo:

rewrite ^/(.*)$ https://domain.com/$1 permanent;
No-WWW a WWW

Crea un archivo llamado domain.com dentro del directorio de redacción de nginx docker con el siguiente contenido y guárdelo:

rewrite ^/(.*)$ https://www.domain.com/$1 permanent;

Ahora, suponga que desea utilizar la redirección de WWW a no WWW. Todo lo que tiene que hacer es montar el archivo en la sección de volúmenes de la configuración de su servicio Nginx:

      - ./www.domain.com:/etc/nginx/vhost.d/www.domain.com

Aumentar los límites de carga permitidos

Las cargas de imágenes pueden verse afectadas por el tamaño de carga máximo predeterminado de 50 MB. Para establecer un límite de carga máximo y evitar problemas al cargar imágenes en Docker, digamos para 1 GB, cree un archivo llamado client_max_upload_size.conf y guárdelo con el siguiente contenido:

client_max_body_size 1G;

Más tarde, debe montarlo tal como se describe con el archivo anterior:

      - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf

Ejecute docker-compose up -d desde el directorio de Nginx para actualizar su configuración de Nginx.

En primer lugar, la configuración de implementación de Ghost consta esencialmente de dos componentes principales:

  • Back-end de la base de datos MariaDB
  • Ghost en sí mismo como interfaz web

Dado que está implementando Ghost con Docker, todos los componentes anteriores se configuran como sus propios contenedores respectivos.

Para el servicio de base de datos, usaré una red interna llamada ghost ya que solo necesita ser visible para el servicio Ghost.

networks:
  - ghost

Pero para el servicio Ghost, por supuesto, la misma net la red utilizada en la configuración del proxy inverso debe especificarse junto con el ghost red, y solo entonces sería posible ponerlo en funcionamiento con el contenedor Nginx Docker.

networks:
  - net
  - ghost

Ahora considere cómo se configuran individualmente con Docker Compose:

Para MariaDB, uso la imagen oficial de MariaDB 10.5.3 que está disponible en Docker Hub:

    ghostdb:
        image: mariadb:10.5.3
        volumes:
            - ghostdb:/var/lib/mysql
        restart: on-failure
        env_file:
            - ./mariadb.env
        networks:
            - ghost

Aquí uso un volumen llamado ghostdb para almacenar los datos de la base de datos en /var/lib/mysql . También establecí las variables de entorno relevantes en el env_file llamado mariadb.env :

MYSQL_RANDOM_ROOT_PASSWORD=1
MYSQL_USER=mariadbuser
MYSQL_PASSWORD=mariadbpassword
MYSQL_DATABASE=ghost

Para el propio servicio de Ghost, en lugar de usar un latest etiqueta, específicamente prefiero usar el número de versión etiquetado en Docker Hub lanzado por los desarrolladores como una versión estable. Aquí, en el momento de escribir este artículo, es 4.5.0 :

    ghost:
        image: ghost:4.5.0
        volumes:
            - ghost:/var/lib/ghost/content
            - ./config.json:/var/lib/ghost/config.production.json
        env_file:
            - ./ghost-mariadb.env
        restart: on-failure
        depends_on: ghostdb
        networks:
            - net
            - ghost

El enlace montó config.json El archivo consta de SMTP (Mailgun) y configuración esencial de rotación de registros (centrada en errores):

{
  "url": "http://localhost:2368",
  "server": {
    "port": 2368,
    "host": "0.0.0.0"
  },
  "mail": {
    "transport": "SMTP",
    "options": {
        "service": "Mailgun",
        "host": "smtp.eu.mailgun.org",
        "port": 465,
        "secureConnection": true,
        "auth": {
            "user": "replace-me-with-a-mailgun-configured-email-address",
            "pass": "replace-me-with-the-relevant-mailgun-apikey-of-50-characters"
        }
    }
  },
  "logging": {
    "path": "content/logs/",
    "level": "error",
    "rotation": {
      "enabled": true,
      "count": 10,
      "period": "1d"
  },
    "transports": [
      "file",
      "stdout"
    ]
  },
  "process": "systemd",
  "paths": {
    "contentPath": "/var/lib/ghost/content"
  }
}

Si debe usar MySQL/MariaDB, el servicio Ghost debe confiar en ghostdb servicio para que esté operativo. Esto puede asegurarse solo cuando haya montado el enlace ghost-mariadb.env archivo (que se muestra en la sección de volúmenes del servicio de base de datos de Ghost) con la configuración de base de datos correcta según mariadb.env en el servicio de la base de datos, que sería:database__client , database__connection__host , database__connection__user , database__connection__password y database__connection__database .

También asignaré cada una de las variables de entorno VIRTUAL_HOST y LETSENCRYPT_HOST a ambos domain.com así como www.domain.com respectivamente, para garantizar que ambos existan. Esto garantiza absolutamente que las redirecciones y los certificados SSL funcionen sin problemas. Quiero que mi URL principal no tenga www, así que la configuro como url=https://domain.com . Dado que utilizará esta configuración para el uso a nivel de producción, el NODE_ENV La variable se establece en el modo de producción. Estos detalles también deben agregarse.

Por lo tanto, el archivo de entorno completo (ghost-mariadb.env ) para el servicio Ghost sería:

VIRTUAL_HOST=domain.com,www.domain.com
LETSENCRYPT_HOST=domain.com,www.domain.com
url=https://domain.com
NODE_ENV=production

database__client=mysql
database__connection__host=ghostdb
database__connection__user=mariadbuser
database__connection__password=mariadbpassword
database__connection__database=ghost

Las inconsistencias en los datos anteriores podrían hacer que Ghost cambie erróneamente a SQLite. No quieres eso. Por lo tanto, asegúrese de que todos los parámetros anteriores se correspondan correctamente con el servicio de base de datos discutido para mariadb.env arriba.

Cada uno de los servicios de base de datos tendrá sus propios volúmenes Docker respectivos para almacenar datos de usuario y contenido. Los crearé como volúmenes externos:

docker volume create ghostdb
docker volume create ghost

Ahora debe incluir un  volumes dentro del archivo de redacción de la ventana acoplable con los siguientes  detalles:

volumes:
  ghost:
    external: true
  ghostdb:
    external: true

Ahora tiene los componentes necesarios para implementar Ghost.

Paso 2:Implementación de Ghost

Ahora debería tener listo el archivo  docker-compose. Es hora de usar este archivo.

Cree el directorio de redacción de la ventana acoplable Ghost en su servidor:

mkdir ghost

Vaya al directorio para editar los archivos necesarios:

cd ghost

Ahora cree el siguiente archivo docker-compose basado en nuestras discusiones hasta ahora:

version: '3.7'
services:
    ghostdb:
       image: mariadb:10.5.3
       volumes:
          - ghostdb:/var/lib/mysql
       restart: on-failure
       env_file:
          - ./mariadb.env
       networks:
          - ghost

    ghost:
      image: ghost:4.5.0
      volumes:
        - ghost:/var/lib/ghost/content
        - ./config.json:/var/lib/ghost/config.production.json
      env_file:
        - ./ghost-mariadb.env
      restart: on-failure
      depends_on: 
        - ghostdb
      networks:
        - net
        - ghost
volumes:
  ghost:
    external: true
  ghostdb:
    external: true

networks:
  net:
    external: true
  ghost:
    internal: true

Además, no olvide crear los otros archivos de configuración como se mencionó anteriormente:config.json , mariadb.env y ghost-mariadb.env dentro del mismo directorio.

Inicie la instancia de Ghost:

docker-compose up -d

Acceda al dominio Ghost especificado en la configuración usando la URL de su dominio especificado.

Paso 3:configurar su cuenta de administrador de Ghost

Tenga en cuenta que para configurar su cuenta de administrador, debe ir a domain.com/ghost y siga las instrucciones en pantalla hasta que haya reclamado su sitio como administrador fantasma.

Para verificar dos veces, confirme que realmente está usando MySQL/MariaDB y no SQLite. Navegue hasta su icono de usuario en la parte inferior izquierda:

Ahora puede estar seguro de que en realidad está utilizando el contenedor de base de datos separado que se mostrará como mysql independientemente de si está utilizando una imagen MySQL o MariaDB Docker:

También puede ver que los otros tres parámetros:Versión, Entorno y Correo, están configurados como se esperaba según los pasos mencionados anteriormente. ¡Eso es todo! ¡Ha implementado correctamente Ghost como una instancia autohospedada en su servidor!

Sugerencias para mantener su instancia de Ghost autohospedada

Aquí hay algunos consejos que lo ayudarán a mantener su instancia de Ghost.

Supervisión de registros fantasma en tiempo real

Si desea verificar los registros del contenedor mientras se implementa en tiempo real, puede ejecutar:

docker logs -f ghost_ghost_1

Copia de seguridad y restauración de volúmenes fantasma sin tiempo de inactividad

Con un enfoque de nube + local, puede realizar copias de seguridad y restaurar sus volúmenes fantasma sin tiempo de inactividad.

Actualizar contenedores fantasma sin tiempo de inactividad

Con la --scale marca en Docker Compose, puede crear un nuevo contenedor basado en la última versión de Ghost. Cuando haya terminado, puede eliminar el antiguo. Esto da como resultado un tiempo de inactividad cero.

Hay algunos consejos más que puedes leer en el siguiente artículo.

También puede implementar y administrar temas fantasma mediante acciones de GitHub para simplificar su trabajo.

Si encuentra un error, tiene problemas o tiene alguna sugerencia, hágamelo saber dejando un comentario a continuación.


Linux
  1. Cómo instalar WordPress con Docker, una guía fácil de seguir

  2. Guía completa para principiantes sobre el registro de Docker

  3. 7 consejos útiles para el autohospedaje de una instancia fantasma con Docker

  4. Guía completa para Rocket.Chat de alojamiento propio con Docker

  5. Cómo actualizar el contenedor Docker sin tiempo de inactividad

Guía Completa de Comandos Sed [Explicada con Ejemplos Prácticos]

Guía completa para el alojamiento propio plausible [alternativa de Google Analytics amigable con la privacidad]

Una guía completa para instalar Tomcat en Linux

Ubuntu Firewall UFW:una guía completa

Instalar Docker en Ubuntu:una guía paso a paso

Comandos de directorio de Linux:una guía completa