7 consejos útiles para autohospedar una instancia fantasma con Docker

Qué tal me llamo Kiko. Os traigo un nuevo post sobre el sistema operativo mas molón. Encantado linuxeros.

Ghost es Plataforma CMS de código abierto que es ligero, rápido y se centra en la creación de un sitio web para miembros.

Tu siempre puedes elegir hosting administrado de Ghost yo mismo. Pero como se trata de un software de código abierto, también puede alojarlo en su propio servidor y administrarlo usted mismo.

Gracias a servicios en la nube como Linode y DigitalOcean, implementar un nuevo servidor Linux con Ghost instalado es cuestión de unos pocos clics.

 

Linode | La nube abierta independiente para desarrolladores

Nuestra misión es acelerar la innovación haciendo que la computación en la nube sea simple, accesible y accesible para todos.

 

Si bien implementar Ghost en servidores en la nube es una tarea relativamente más fácil, administrar Ghost puede no ser siempre tan fácil.

Hemos estado ejecutando nuestra instancia de Ghost durante varios meses para alojar el Manual de Linux. Y esta experiencia nos ha enseñado algunas cosas que probablemente no encontrará en la documentación oficial de Ghost.

En este artículo, hablaré sobre algunos factores clave a tener en cuenta antes de implementar su blog impulsado por Ghost en servidores de producción.

Tenga en cuenta que este artículo trata sobre la imagen de Ghost Docker creada y administrada por la comunidad de desarrolladores.

En la comunidad de DevOps, siempre nos esforzamos por acercarnos lo más posible a un país llamado Neops. Pero en un sentido práctico, siempre permanecerá paradoja.

Aquí intentamos lograr el mismo objetivo que NoOps, pero con una perspectiva híbrida con intervención humana cuando sea necesario.

Entonces, sin más preámbulos, permítanme escribir y describir los elementos esenciales para proporcionar una instancia estable y mínima de Ghost para el mantenimiento.

1. Configure su correo correctamente

Usted será esLos siguientes tipos de correos electrónicos para sus miembros y suscriptores a través de su instancia de Ghost:

Correos electrónicos de transacciones: para entrada de miembros, confirmación de registro, etc. Correos electrónicos grupales: para enviar un boletín informativo por correo electrónico a través de Ghost

Si no desea enviar boletines a través de Ghost, puede utilizar cualquier servicio SMTP. De lo contrario, tienes que usar Pistola postal.

Configuración SMTP para correos electrónicos transaccionales

En teoría, su instancia de Ghost debería poder utilizar el servicio de correo directo gracias a Nodemailer.

Sin embargo, esto puede dar lugar a registros fallidos con el mensaje de error «Introduzca una dirección de correo electrónico válida».

Por lo tanto, debe configurar los ajustes de SMTP con Pistola postal o Amazon SES. Puedes probar otros Servicios de correo electrónico tal como SendGrid o Mailchimp.

Una configuración típica de SMTP configurada a través de Mailgun se ve así (configurada a través de montado en encuadernación expediente config.production.json):

  "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"
        
    
  ,

Siga el número de puerto SMTP. En ocasiones, los correos electrónicos fallan debido al número de puerto. En nuestro caso, algunos correos electrónicos fallaron en el puerto 587 y comenzaron a funcionar en el puerto 465.

Consulte esta documentación de Mailgun aquí para obtener información completa sobre cómo verificar su dominio y actualizar los registros DNS necesarios, que también son necesarios para enviar un correo electrónico.

En general, debe actualizar los registros MX, CNAME y TXT recibidos de Mailgun en la configuración de registros DNS en su panel de nombre de dominio. En Linode se ven así:

Registros MX de Mailgun Registros TXT de Mailgun

Grupos de correos electrónicos para enviar boletines

Para envío de boletines al por mayor para sus miembros, Mailgun es el único servicio disponible para implementarlo en su configuración de Ghost. Los servicios de correo electrónico grupal son bastante diferente de los servicios SMTP convencionales.

Para configurar correctamente el correo electrónico del grupo Ghost para sus miembros, primero debe asegurarse de que la membresía esté activada. Este es un requisito obvio.

Configuración de Ghost> Labs> Miembros

Ahora desplácese hacia abajo hasta la sección de correo electrónico y expanda Configuración del boletín de correo electrónico.

Ingrese el nombre de dominio y la clave API configurados de Mailgun. La región de Mailgun será «UE» o «EE. UU.». Seleccione el apropiado.

Si llama desde arriba en el ejemplo de configuración de SMTP, se puede asumir que el nombre de región «EU» es el nombre de host, que es smtp.eu.mailgun.org.

Leer aquí para obtener más información sobre el nombre de dominio y la clave API configurados de Mailgun. Para elegir nombres de dominio, marque aquí.

2. Seleccione MySQL o MariaDB para la base de datos en lugar de SQLite.

Si su blog de Ghost está planeado para uso en producción, le recomiendo no usarlo SQLite Base de datos proporcionada por defecto en Ghost Container.

La razón para usar el recomendado Base de datos tal como MySQL o MariaDB es extremadamente importante cuando tiene un número significativo de miembros y desea enviarles un boletín informativo por correo electrónico desde el propio Ghost.

Lo aprendimos por las malas. Inicialmente usamos MailerLite para crear y enviar el boletín. Entonces decidimos aprovechar la función de boletín de noticias incorporada de Ghost.

En ese momento teníamos alrededor de 1.100 miembros. Y esto creó un problema porque SQLite no podía manejar tantas consultas a la vez. No se envió la publicación recién creada. Los registros muestran este error:

Processed job threw an unhandled error
"The email service was unable to send an email batch."

Error ID:
    24bf8000-4f50-11eb-adf5-73dcc562a630

Error Code: 
    SQLITE_ERROR

No fue eso. Incluso se negó a exportar 1.100 miembros. La descarga simplemente no comenzará. Descargamos el archivo completo en formato JSON y recuperamos la información de los miembros.

Para solucionar esto, migre de SQLite a MySQL o MariaDB, lo que se convertiría en una sobrecarga innecesaria y provocaría un tiempo de inactividad potencialmente no deseado durante la migración, que incluso puede ser indefinido. Por lo tanto, siempre es mejor implementar primero Ghost con MySQL o MariaDB como práctica preventiva.

El siguiente es un ejemplo de una configuración típica del servicio de base de datos MariaDB para Ghost en Docker Compose:

    db:
        image: mariadb:10.5.3
        volumes:
            - ghostdb:/var/lib/mysql
        restart: on-failure
        environment:
            MYSQL_RANDOM_ROOT_PASSWORD: 1
            MYSQL_USER: rename-me
            MYSQL_PASSWORD: replace-me
            MYSQL_DATABASE: rename-me

3. Activar la rotación de registros

Rotar el registro es un proceso de restablecimiento automático de los registros después del período de tiempo deseado. Esto ayuda a evitar la creación de archivos de trabajo enormes e invadir innecesariamente el espacio en disco de su servidor. En general, si no incluye el siguiente fragmento en su configuración de Ghost, esto hará que los registros se acumulen en tamaños enormes entre 15 y 20 GB:

  "logging": {
    "path": "content/logs/",
    "level": "info",
    "rotation": 
      "enabled": true,
      "count": 15,
      "period": "1d"
  ,

Para obtener una descripción detallada del registro de Ghost, puede visitar el archivo correspondiente página de documentación.

3. Utilice un proxy inverso

Siempre es una ventaja adicional utilizar un proxy inverso desde el principio antes de implementar Ghost. Simplifica enormemente la gestión de sus aplicaciones web tanto a corto como a largo plazo.

Cómo usar el proxy Nginx inverso con múltiples aplicaciones de Docker

Descubra cómo puede implementar varios servicios web en el mismo servidor mediante el proxy inverso de Nginx y los contenedores de Docker.

4. Actualiza Ghost sin tiempo de inactividad

Si usa un proxy inverso, actualizar su instancia de Ghost sin tiempo de inactividad será una tarea fácil.

Esto es lo que recomiendo. Configure Docker Notify para recibir notificaciones de una nueva imagen de Docker en la instancia de Ghost (con la última versión de Ghost).

Luego puede seguir este tutorial para actualizar su contenedor Docker.

Actualice los contenedores de Docker sin tiempo de inactividad

Una metodología paso a paso que puede ser muy útil para sus actividades DevOps diarias sin sacrificar un tiempo de actividad invaluable.

Afortunadamente, no hay absolutamente ningún tiempo de inactividad cuando realiza la actualización. Si ya ha iniciado sesión en el panel de administración (por ejemplo, mientras compila un artículo), no notará ninguna anomalía.

Sin embargo, si no ha iniciado sesión hasta que elimine el contenedor anterior después de la actualización, el panel de administración seguirá intentando cargar si intenta iniciar sesión de nuevo.

Pero en un sentido de producción, el blog de Ghost seguirá estando disponible desde el frente, incluso a medida que se actualice.

6. Establezca siempre una política de reinicio

Debido a que usa un contenedor Ghost Docker, la política de reinicio siempre es muy importante y necesaria para especificar en su configuración. Esto asegura que su contenedor Ghost siempre se reinicie cuando su servidor físico se reinicie debido a un evento de mantenimiento.

Si su configuración general de Docker tiene recuperación en vivo se recomienda usar on-failure política de reinicio. Para comprender mejor las políticas de reinicio, consulte documentación oficial para una referencia completa a tales políticas.

Por lo general, establece una política de reinicio en el servicio para su archivo de Docker Compose como:

restart: on-failure

7. Utilice volúmenes de Docker externos

El uso de volúmenes que se crearon manualmente antes de implementar Ghost facilita la migración de su contenido (dentro del mismo servidor o en uno diferente) si es necesario en el futuro. Le brinda más control sobre sus datos a medida que crea y configura el volumen para usar desde el contenedor Ghost. De lo contrario, deberá dejarlo en Docker Compose para crearlo localmente.

Para crear un volumen Docker externo para el contenedor Ghost, use el siguiente comando:

docker volume create ghost

Dónde ghost es el nombre de su volumen externo de Docker Ghost.

Como ya mencioné que elegí la base de datos MySQL o MariaDB para brindar un mejor rendimiento con miles de usuarios, su volumen también debe crearse de la misma manera:

docker volume create ghostdb

Dónde ghostdb es el nombre de su volumen externo en la base de datos de Docker Ghost.

Para indicarle a Docker Compose que use estos volúmenes específicos que acaba de crear anteriormente, nuestra sección de volumen en el archivo de Docker Compose debería tener este aspecto:

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

Observe cómo señalé que estos volúmenes de Docker son de naturaleza externa.

Consejo adicional: planifique copias de seguridad periódicas

Si utiliza Linode,, Océano digital u otro proveedor de servidor en la nube similar, se recomienda encarecidamente que siempre active las copias de seguridad al crear su servidor de implementación Ghost.

Por ejemplo, cuando crea un servidor con 1 GB de RAM (llamado nodo) en Linode, encontrará una casilla de verificación que requiere la activación de archivos. Siempre que tenga un servidor de producción, siempre recomendaría que lo active antes de iniciar el primer servidor de arranque.

También puede implementar un script de servidor basado en crontab para tomar una instantánea manual de sus volúmenes Docker externos para Ghost.

Técnicamente, los datos de volumen discutidos en el índice anterior 7, en particular ghost y ghostdb, residencia local en /var/lib/docker/volumes/ghost/_data y /var/lib/docker/volumes/ghostdb/_data respectivamente. Para realizar copias de seguridad de forma eficaz, puede utilizar tar para realizar copias de seguridad periódicas de estos dos directorios.

Porque ahora sabrás cuando estas tar Los archivos serán fácilmente accesibles después de la copia de seguridad, también puede implementar otro script en su sistema local (se supone que debe ejecutarse diariamente a una hora específica en su hogar / oficina) para ssh en el servidor Ghost y recuperar estos archivos. De esta manera, siempre tendrá una copia actualizada localmente de su blog de Ghost disponible para usted, independientemente de cualquier acceso a Internet.

Alternativamente, también puede utilizar el enfoque de copia de seguridad lógica para realizar una copia de seguridad de la base de datos MySQL con el comando de la base de datos. mysqldump. En MariaDB, el comando se llama mariadb-dump que no es más que un vínculo simbólico con el mismo mysqldump equipo.

Se puede encontrar una excelente comparación entre archivos físicos y lógicos aquí.

Domesticar al fantasma

Esta fue una compilación de diferentes enfoques para minimizar y prevenir posibles problemas de mantenimiento una vez que implementó su instancia de Ghost. Espero que te sea de utilidad cuando comiences o uses tu propio blog en Ghost.

Continuaremos nuestro viaje con Ghost, y si encontramos cualquier otro problema que podría haberse evitado con una configuración de implementación diferente, actualizaremos este artículo.

Si tiene alguna sugerencia para los directorios anteriores o tiene otros nuevos, compártalos con nosotros en la sección siguiente. Esperamos leer y aprender más de usted.

El Blog lo hacemos para colaborar y servir de referencia a la comunidad Linux. Esperamos que os guste.

Leave a Reply