GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

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

Ghost es una plataforma CMS de código abierto que es liviana, rápida y se enfoca en crear un sitio web de membresía.

Siempre puede optar por el alojamiento administrado desde Ghost. Pero dado que es un software de código abierto, también puede alojarlo en su propio servidor y administrarlo usted mismo.

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

Linodo | La nube abierta independiente para desarrolladores Nuestra misión es acelerar la innovación haciendo que la computación en la nube sea simple, asequible y accesible para todos. Linode

Si bien la implementación de Ghost en servidores en la nube es una tarea relativamente más fácil, es posible que administrar Ghost no siempre sea tan fácil.

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

En este artículo, voy a hablar sobre algunos factores cruciales a considerar antes de implementar su blog con tecnología Ghost en servidores de producción.

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

En la Comunidad DevOps lo que siempre buscamos es acercarnos lo más posible a un estado llamado NoOps. Pero en el sentido práctico, siempre seguirá siendo una paradoja.

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

Entonces, sin más demora, permítanme enumerar y describir los elementos esenciales para garantizar una instancia de Ghost estable y con un mantenimiento mínimo.

1. Establezca su configuración de correo correctamente

Estarás siguiendo tipos de correos electrónicos a tus miembros y suscriptores a través de tu instancia de Ghost:

  • Correos electrónicos transaccionales:para inicios de sesión de miembros, confirmación de registro, etc.
  • Correos electrónicos masivos:para enviar boletines 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, debes usar Mailgun.

Configuración de 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 resultar en que algunos registros fallen con el mensaje de error "Ingrese una dirección de correo electrónico válida".

Es por eso que debe configurar la configuración de SMTP con Mailgun o Amazon SES. También puede probar otros servicios de retransmisión de correo electrónico como SendGrid o Mailchimp.

Una configuración SMTP típica, configurada a través de Mailgun, se ve de la siguiente manera (establecida a través de un archivo montado en enlace 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"
        }
    }
  },

Observe el número de puerto SMTP . Algunas veces los correos electrónicos fallan debido al número de puerto. En nuestro caso, algunos correos electrónicos fallaban con el puerto 587 y comenzaron a funcionar con 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 se requieren para enviar correo electrónico.

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

Correos electrónicos masivos para enviar boletines

Para enviar boletines de forma masiva a sus miembros, Mailgun es el único servicio disponible que está disponible para implementarlo dentro de su configuración de Ghost. Los servicios de correo electrónico masivo son bastante diferentes de los servicios SMTP convencionales.

Para configurar correctamente el correo electrónico masivo en Ghost para sus miembros, primero debe asegurarse de que las membresías estén habilitadas. Ese es un requisito obvio.

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 configurado de Mailgun y la clave API. La región de Mailgun sería "UE" o "EE. UU.". Elija el apropiado.

Si recuerda lo anterior en el ejemplo de configuración de SMTP, el nombre de la región, "EU" se puede percibir con el nombre del host, que es smtp.eu.mailgun.org .

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

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

Si su blog de Ghost está planificado para uso en producción, le recomiendo que no use la base de datos SQLite que se proporciona de forma predeterminada en el contenedor de Ghost.

La razón para usar la base de datos recomendada como MySQL o MariaDB es extremadamente crucial cuando tiene un número considerable de miembros y desea enviarles un boletín informativo por correo electrónico desde Ghost.

Lo aprendimos de la manera difícil. Inicialmente, usábamos MailerLite para crear y enviar el boletín. Entonces decidimos aprovechar la función de boletín integrado de Ghost.

En este momento tenemos alrededor de 1.100 miembros. Y esto creó un problema ya que SQLite no podía manejar tantas consultas a la vez. No se pudo enviar la publicación recién creada. Los registros mostraron 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

Eso no fue todo. Incluso se negó a exportar 1100 miembros. La descarga simplemente no comenzará. Descargamos la copia de seguridad completa en formato JSON y extrajimos la información de los miembros de allí.

Para solucionar esto, migre de SQLite a MySQL o MariaDB, lo que se convertiría en una sobrecarga innecesaria y daría como resultado un tiempo de inactividad potencialmente no deseado durante la migración que incluso podría durar un tiempo indefinido. Por lo tanto, siempre es mejor implementar inicialmente 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. Habilitar la rotación de registros

La rotación de registros es el proceso de restablecer automáticamente sus archivos de registro después de un período de tiempo deseado. Esto ayuda a evitar la creación de enormes archivos de registro que se acumulan e invaden innecesariamente el espacio en disco de su servidor. En la práctica general, si no incluye el siguiente fragmento de código dentro de su configuración de Ghost, los archivos de registro se acumularían 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 sobre cómo iniciar sesión en Ghost, puede visitar la página de documentación correspondiente.

3. Usar proxy inverso

Siempre es una ventaja adicional usar un proxy inverso desde el principio, antes de implementar Ghost. Hace que sea mucho más fácil administrar sus aplicaciones web tanto a corto como a largo plazo.

Cómo usar Nginx Reverse Proxy con múltiples aplicaciones Docker Aprenda cómo puede implementar múltiples servicios web en el mismo servidor usando Nginx Reverse Proxy y Docker Containers. Manual de LinuxDebdut Chakraborty

4. Actualice Ghost sin tiempo de inactividad

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

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

Entonces puede seguir este tutorial para actualizar su contenedor Docker.

Actualización de contenedores Docker sin tiempo de inactividad Una metodología paso a paso que puede ser muy útil en sus actividades diarias de DevOps sin sacrificar un tiempo de actividad invaluable. Manual de LinuxAvimanyu Bandyopadhyay

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 redacta 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 cargarse si intenta iniciar sesión de nuevo.

Pero en un sentido de producción, el blog de Ghost continuaría estando disponible en el front-end incluso mientras realiza la actualización.

6. Establezca siempre una política de reinicio

Dado que está utilizando un contenedor Ghost Docker, una política de reinicio siempre es muy importante y necesaria para especificar dentro de su configuración. Esto garantiza que su contenedor Ghost siempre se reinicie cada vez que su servidor físico se haya reiniciado debido a cualquier evento de mantenimiento.

Si su configuración genérica de Docker tiene habilitada la restauración en vivo, se recomienda usar el on-failure política de reinicio. Para comprender mejor las políticas de reinicio, consulte la documentación oficial para obtener una referencia completa sobre dichas políticas.

Por lo general, establece una política de reinicio dentro del servicio de su archivo Docker Compose como:

restart: on-failure
Política de reinicio de Docker [explicada con ejemplos] El uso de una política de reinicio puede ser extremadamente útil para reiniciar contenedores automáticamente en ciertos eventos o fallas. Manual de LinuxAbhishek Prakash

7. Usar volúmenes externos de Docker

Si usa volúmenes que se crearon manualmente antes de implementar Ghost, le resultará más fácil migrar su contenido (dentro del mismo servidor o de otro) si es necesario en el futuro. Le brinda más control sobre sus datos, ya que es usted quien crea y especifica el volumen para que lo use 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

Donde ghost es el nombre de su volumen externo de Docker Ghost.

Como ya mencioné optar por una base de datos MySQL o MariaDB para garantizar un mejor rendimiento con miles de usuarios, su volumen también debe crearse de la misma manera:

docker volume create ghostdb

Donde ghostdb es el nombre del volumen externo de la base de datos de Docker Ghost.

Para indicarle a Docker Compose que use estos volúmenes específicos que acaba de crear arriba, nuestra sección de volúmenes en el archivo de Docker Compose debe verse así:

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

Tenga en cuenta que he especificado que estos volúmenes de Docker son de naturaleza externa.

Consejo adicional:programe copias de seguridad periódicas

Si está utilizando Linode, Digital Ocean o cualquier otro proveedor de servidor en la nube similar, se recomienda encarecidamente habilitar siempre las copias de seguridad cuando esté creando su servidor para implementar Ghost.

Por ejemplo, cuando crea un servidor con 1 GB de RAM (llamado nanode) en Linode, encontrará una casilla de verificación que solicita habilitar las copias de seguridad. Cada vez que implemente un servidor de producción, le recomendaría que lo habilite antes de proceder a iniciar el servidor para el primer arranque.

Además, puede implementar una secuencia de comandos en el servidor basada en un crontab para tomar manualmente una instantánea de sus volúmenes externos de Docker para Ghost.

Técnicamente, los datos de volumen como se discutió en el puntero anterior 7, particularmente ghost y ghostdb , residir localmente en /var/lib/docker/volumes/ghost/_data y /var/lib/docker/volumes/ghostdb/_data respectivamente. Para archivarlos de manera efectiva, puede usar tar para hacer una copia de seguridad de esos dos directorios periódicamente.

Dado que ahora sabría cuándo estos tar los archivos estarían fácilmente disponibles después del archivo, también puede implementar otro script en su sistema local (se supone que se ejecuta en vivo a una hora específica todos los días en su hogar/oficina) para acceder al servidor Ghost y obtener esos archivos. De esta manera, siempre tendrá disponible una copia localmente actualizada de su blog de Ghost, independientemente de cualquier acceso a Internet.

Como alternativa, 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 base de datos mysqldump. En MariaDB, el comando se llama mariadb-dump que no es más que un enlace simbólico al mismo mysqldump comando.

Puede encontrar una excelente comparación entre las copias de seguridad físicas y lógicas aquí.

Domar el fantasma

Esa fue una compilación de algunos enfoques diversos para minimizar y evitar que ocurran posibles problemas de mantenimiento después de implementar su instancia de Ghost. Espero que te sea útil cada vez que inicies o utilices tu propio blog en Ghost.

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

Si tiene alguna sugerencia con respecto a los indicadores discutidos anteriormente o tiene algunos nuevos, compártalos con nosotros en la sección de conversación a continuación. Estaremos encantados de leer y saber más de usted.


Docker
  1. Haz que el historial de Bash sea más útil con estos consejos

  2. 5 consejos para comenzar con la seguridad del servidor Linux

  3. Más consejos para empaquetar su software Linux con RPM

  4. 3 estrategias para implementaciones de producción automatizadas con Docker

  5. Diez consejos fáciles de seguir para administrar una instancia de Nextcloud autohospedada con Docker

Consejos/trucos útiles de Meld para usuarios intermedios

Guía de Docker:implementación de Ghost Blog con MySQL y Traefik con Docker

5 consejos para configurar virtualenvs con Ansible Tower

Cómo escanear imágenes de contenedores Docker en busca de vulnerabilidades con Trivy

Cómo automatizar las auditorías de seguridad de Docker con Docker Bench for Security

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