Cómo usar el servidor de almacenamiento MinIO para tu instancia de Discourse

Utilización del servidor MinIO para almacenamiento de objetos compatible con S3

MinIO es una solución de servidor de almacenamiento de objetos compatible con S3 que es nativa de la nube por defecto, pero fácil de implementar en servidores locales, VPS o servidores en la nube para su uso como alternativa a Amazon AWS S3 u otros sistemas, y es compatible con Discourse cuando se configura correctamente.

Esta sección asume que en su entorno se cumplen las siguientes condiciones:

  1. Tiene una instancia de servidor MinIO completamente configurada.
  2. Tiene el soporte de dominios habilitado en la configuración de MinIO.
  3. Tiene la configuración de DNS correctamente establecida para MinIO, de modo que los subdominios de los buckets se resuelvan correctamente al servidor MinIO.
  4. El bucket discourse-data existe en el servidor MinIO y tiene una política “pública” asignada.
  5. El bucket discourse-backups existe en el servidor MinIO y es un bucket privado para subir archivos (y no es accesible públicamente; esta es la política predeterminada para los buckets nuevos).
  6. Su URL de CDN de S3 es una CDN correctamente configurada que apunta al bucket y almacena en caché las solicitudes, como se mencionó anteriormente en este documento.

Si cumple con todos los requisitos anteriores, ya estará listo para comenzar.

Un ejemplo de configuración sería el siguiente:

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: anything
DISCOURSE_S3_ENDPOINT: https://minio.example.com
DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
DISCOURSE_S3_CDN_URL: https://discourse-data-cdn.example.com
DISCOURSE_S3_BUCKET: discourse-data
DISCOURSE_S3_BACKUP_BUCKET: discourse-backups
DISCOURSE_BACKUP_LOCATION: s3

Esto le proporcionará una configuración básica de MinIO con un servidor MinIO en lugar de Amazon S3.

4 Me gusta

Es genial saber que MinIO ahora funciona correctamente con buckets de estilo de subdominio y es nuevamente compatible con Discourse.

¿Podrías editar la wiki Uso de almacenamiento de objetos para cargas (S3 y clones) para incluir instrucciones de MinIO?

3 Me gusta

Ha funcionado tanto con buckets de estilo subdominio como de estilo de ruta durante un tiempo. Sin embargo, el componente de configuración de DNS es el más doloroso: requiere reglas de DNS comodín especiales para funcionar, o un servidor DNS personalizado que esté activamente al tanto de todos los buckets reales o no. Lo he hecho en bind9 con zonas comodín, pero al hacerlo en Cloudflare u otros, los fragmentos de estilo de subdominio fallan estrepitosamente.

SI consideras que lo anterior es adecuado para esa sección, estaré encantado de incluirlo. Pero incluirá esa sección de ‘advertencias’, y agradecería cualquier revisión o sugerencia que desees que haga primero sobre la redacción, etc. (Y ten en cuenta que no incluí una URL de CDN porque no tengo una CDN en mi implementación (porque el dinero $$$ no es algo con lo que pueda experimentar).

3 Me gusta

Los usuarios que ejecutan MinIO solo para Discourse también pueden crear manualmente las entradas de DNS para los dos buckets de Discourse, ¿verdad?

La advertencia en este tema debería ser suficiente. La configuración de MinIO está completamente fuera del alcance de este foro, pero, dado un MinIO funcional, hacer que Discourse lo utilice es un caso de uso válido.

2 Me gusta

Correcto, pero como dijiste, la configuración está fuera del alcance, así que simplemente indicaré que las rutas de subdominio de los buckets deben resolverse (y dejaré la configuración DNS a los ${ADMINS} de la instancia).

2 Me gusta

Sí, y he editado la wiki en consecuencia. Sin embargo, que yo sepa, MinIO no ejecuta un servicio en la nube, por lo que dejé en blanco el ‘Nombre del servicio’ en el índice de la wiki al principio; ajústalo si lo deseas.

2 Me gusta

¡Genial! ¡Gracias por tu contribución!

1 me gusta

¡De nada!

También lo ajusté: el proveedor es autoalojado, pero la sección de MinIO sigue vinculada. Eso debería resolver el hecho de que no tengan una solución en la nube que haya podido encontrar por el momento. (Puedes cerrar este hilo ahora si lo deseas, ya que está integrado en la publicación del wiki).

3 Me gusta

También descubrí (¡gracias al código de código abierto y a la buena documentación de MinIO!) que CORS ya está activado por defecto en todos los verbos de acción HTTP de MinIO, por lo que no es necesario instalar las reglas de CORS; ya están presentes. También actualicé la sección de MinIO autoalojado, junto con algunos ajustes gramaticales.

Gracias a @Falco por su ayuda para rastrear el problema que noté durante la construcción/reconstrucción de la aplicación, y por las orientaciones básicas sobre la configuración de CDN con StackPath (ya que quería una prueba totalmente funcional y, de todos modos, tengo una CDN de StackPath para otra cosa, así que usar la pila de CDN confirmó que todo funcionaba).

2 Me gusta

No entiendo cómo configurar el estilo de ruta de fuerza. Cuando configuro la versión 2.6.8 con minio a través de la configuración de S3, siempre antepone el nombre del bucket al punto final de s3, donde debería añadirlo como ruta después del punto final de s3.

También parece, por la muestra de configuración en github, que la opción s3_force_path_style ha sido eliminada. ¿Me estoy perdiendo algo? Gracias.

@ceelian

Discourse usa el modo DNS, no el modo de ruta, para S3. Ha sido así DURANTE MUCHO TIEMPO, por eso no especifico nada sobre el modo de ruta en el manual o en la página del manual de almacenamiento S3. También deberías aprender a crear nuevos hilos en lugar de revivir un hilo antiguo para algo no relacionado.

1 me gusta

@teward Gracias por tus comentarios. Disculpa por revivir el hilo, estoy acostumbrado a la forma de escribir de los issues de GitHub :slight_smile: Comenzaré un nuevo hilo sobre cómo podemos usar discourse S3 en modo de ruta.

Para tu información: no puedes. No creo que el modo de ruta sea compatible, por eso esa opción para forzar el modo de ruta para Discourse ha desaparecido. También es por eso que la sección que originalmente agregué a la página de cómo configurar un proveedor de almacenamiento de objetos compatible con S3 ahora dice bajo advertencias y requisitos:

  1. Tienes habilitado el soporte de dominio en la configuración de MinIO, para URL de bucket dirigidas por dominio. Esto es obligatorio y no es una opción, no hay soporte basado en rutas en Discourse para rutas de bucket.

Hace mucho tiempo, cuando trabajé por primera vez con Discourse, tenían esa opción, luego la eliminaron y tuve que dejar de usar MinIO como backend. AHORA, dado que hay documentación en MinIO sobre cómo hacer que el modo DNS funcione (es decir, rutas bucket[.]server[.]com ahora como lo hace S3), funciona cuando se configura MinIO correctamente. (Gracias al personal/moderadores/sistema por aumentar mi nivel de confianza para editar el wiki ahora).

2 Me gusta

¡Gracias por la aclaración y la pista sobre cómo resolver el problema!

Este tema se cerró automáticamente 24 horas después de la última respuesta. Ya no se permiten nuevas respuestas.