No sé si esto solo sucede cuando se agota el límite diario. Pero sucede todo el tiempo aquí desde hace 2-3 meses. Además, otras personas parecen tener el mismo problema:
Quizás sería una buena idea proporcionar los archivos Maxmind desde un directorio local. De todos modos, lo descargo para otros usos, así que ya está ahí.
¿Y tal vez sería aún mejor proporcionar los archivos Maxmind en un directorio compartido dentro del contenedor de Discourse para tener siempre la versión actualizada? Como dije, de todos modos lo descargo y actualizo los archivos una vez al día.
Creo que el problema no está relacionado con el límite. En otras palabras, también da un error cuando se introduce una clave o un ID de cuenta incorrectos. Así es como podemos resolver el problema aquí: en caso de error, hacer que utilice la base de datos antigua y continúe reconstruyéndola. Por supuesto, es muy importante determinar la causa principal de este problema.
Intenté crear un ejemplo hace dos días y dio un error. No tenía nada que ver con el límite porque fue mi primera reconstrucción ese día. Luego creé una nueva clave y la probé y funcionó. Hay una situación aquí: cuando creas una clave, tarda un tiempo en activarse. Si la recreas inmediatamente, da un error.
Bueno, mis claves son antiguas, nunca las cambié después de empezar a usarlas. ¿Por qué funciona cuando creas una clave nueva? Dijiste que tarda un tiempo hasta que se activa. ¿Entonces debería lanzar un error?
Esa es una buena idea. O ofrecer los archivos desde un directorio local, como sugerí. Todo opcional. Pero realmente me molesta que la reconstrucción sea como una lotería durante muchas semanas…
Esto va en contra de los términos de uso de Maxmind, por lo que necesitamos que todos proporcionen las claves de API para descargar los archivos individualmente.
Me asigno a mí mismo para ver cuál es el problema cuando se alcanza el límite diario.
La reconstrucción falló y luego construí la imagen con la configuración de maxmind desactivada. Y luego, dentro del contenedor, volví a activar la configuración y ejecuté la tarea de rake con éxito.
Quizás sea posible reconstruir sin descargar la base de datos y luego que la base de datos se descargue al iniciar el contenedor.
Además, agregué una PR que debería permitir que el bootstrap tenga éxito (que se fusionó) incluso si la descarga falla, pero aún así está causando que el bootstrap falle.
Sí, creo que tienes razón aquí. Maxmind no es una característica crítica, por lo que no hay necesidad de que causemos que el arranque falle cuando no podemos descargar cosas.
Creo que no entendiste lo que intenté decir. Déjame intentarlo de nuevo:
Tengo un script que descarga los archivos de Maxmind cada pocos días. Con mis propias claves de API, por supuesto. Los archivos se utilizan en el servidor para varias cosas, como estadísticas web de AWstats, plugins de WordPress y demás.
Así que tengo los archivos en la máquina de todos modos. ¿Por qué descargar los archivos (de nuevo) cuando reconstruyo el contenedor de Discourse?
Sí. Sería genial poder tenerlos en almacenamiento persistente, especialmente si se pudieran compartir entre instancias. Tengo un puñado de sitios de Discourse en la misma máquina detrás de traefik, así que si todos pudieran compartir el mismo mmdb, ahorraría mantener y descargar un montón de copias separadas. Incluso en una instalación estándar, podrían persistir entre compilaciones. ¿Quizás eso ya sea posible? ¿Quizás simplemente montar /var/www/discourse/vendor/data en algún lugar persistente?
Ajá. Creo que para eso es GlobalSetting.maxmind_backup_path. Así que creo que si tienes un maxminddb por alguna razón, puedes establecer DISCOURSE_MAXMIND_BACKUP_PATH en algo que esté disponible en el contenedor.
Además, ¿por qué necesitamos mmdb para precompilar activos?
Entonces, ¿esto ya está funcionando? ¿Configurar DISCOURSE_MAXMIND_BACKUP_PATH en app.yml (como enlace interno desde el interior del contenedor o enlace absoluto en el host de Docker) deshabilitará una descarga de Maxmind durante la reconstrucción?
Lo siento. No estoy muy seguro. Parece que quiere un directorio, y puedes hacerlo como quieras, así que tal vez añadirías un volumen en tu app.yml como
- volume:
host: /data/
guest: /data
y DISCOURSE_maxmind_backup_path=/data/mmdb (corrigiendo mayúsculas para la variable de entorno)
Gracias de nuevo. Creé /var/discourse/shared/discourse_test/data/mmdb y esto es lo que hice en app.yml:
## La clave de cuenta de MaxMind para la búsqueda de direcciones IP de geolocalización
## ver https://meta.discourse.org/t/-/137387/23 para más detalles
DISCOURSE_MAXMIND_ACCOUNT_ID: 123456
DISCOURSE_MAXMIND_LICENSE_KEY: abcdefg
DISCOURSE_MAXMIND_BACKUP_PATH: /data/mmdb
## El contenedor Docker no tiene estado; todos los datos se almacenan en /shared
volumes:
- volume:
host: /var/discourse/shared/discourse_test
guest: /shared
- volume:
host: /var/discourse/shared/discourse_test/log/var-log
guest: /var/log
- volume:
host: /var/discourse/shared/discourse_test/data
guest: /data
Añadí DISCOURSE_MAXMIND_BACKUP_PATH y un tercer volumen.
¿Es correcto el directorio para DISCOURSE_MAXMIND_BACKUP_PATH? ¿Es la ruta dentro del contenedor?
¿Necesito eliminar DISCOURSE_MAXMIND_ACCOUNT_ID y DISCOURSE_MAXMIND_LICENSE_KEY ahora?
Lo siento, demasiado emocionado y también un poco confuso.
Se detectó una copia de seguridad de MaxMindDB (descargada: 2024-07-17 23:15:02 +0000) en /data/mmdb
Copiando MaxMindDB de /data/mmdb a /var/www/discourse/vendor/data
Omitiendo la descarga de MaxMindDB ya que se descargó por última vez el 2024-07-17 23:15:02 +0000
Creo que esto es lo que yo (o mejor dicho, “nosotros”) queríamos ver.
Creo que podrías haber omitido el volumen adicional y haber hecho
DISCOURSE_MAXMIND_BACKUP_PATH: /shared/data
Pero si tienes algún otro proceso que mantiene esa base de datos actualizada en otro lugar, podrías montar ese directorio para tener solo una copia local en tu disco y necesitarías actualizar solo esa copia.
Creo que lo dejaré así. En mi opinión, es una configuración más clara que aún se puede entender en unos meses. Además, podría ser más genérica y para más casos de uso que solo el mío.
Copio los tres archivos mmdb de Maxmind en ese directorio cuando los descargo. Simplemente ajusté el script que estoy usando (por cierto, para la descarga estoy usando geoipupdate, que también está disponible como paquete para Debian (y muy probablemente otras distribuciones de Linux)).
Acabo de terminar de reconstruir cuatro contenedores de Discourse diferentes, ¡todos sin ningún error! Esto no sucedía desde hace meses. ¡Así que genial!
Este problema aún persiste. Explicaré el incidente en detalle:
Hice una actualización desde el administrador, se detuvo a la mitad. Así que inicié una recompilación desde el panel ssh. Boom dio un error, un ejemplo de error está a continuación.
Luego creé una nueva clave de maxmind y la recompilé, dio un error nuevamente, el mismo error. (interesante, tal vez la clave no se activó).
Luego deshabilité la configuración de maxmind en el archivo app.yml. La recompilé y la compilación fue exitosa.
Los complementos que utilicé se muestran en la imagen, otras cosas que utilicé:
Cloudflare R2
servidor postgresql separado
cloudflare
Ya no puedo averiguar qué está causando el problema.