Después de mucho sudor y lágrimas, creo que está resuelto.
Sin embargo, no estoy particularmente “orgulloso” de la solución, pero bueno, es Google; no van a hablar ni a explicarte nada, así que… conclusiones:
-
En primer lugar, una lección importante: No actives IPv6 en DigitalOcean si estás usando Discourse, porque su rango de IPv6 está bloqueado por YouTube.
-
Después de corregir el cambio a IPv6, debido al aumento del tráfico, independientemente del proveedor de hosting (cambié un par de veces, ¡qué viaje!), lo que sucedió después fue que YouTube bloqueaba por IP mi instalación de Discourse, debido a la cantidad de videos de YouTube publicados en el sitio y a cómo Discourse los carga.
-
Para verificar este bloqueo, necesitas usar tu servidor como proxy hacia otro con un navegador o simplemente hacer un curl y buscar esta línea: “Sorry for the interruption. We have been receiving a large volume of requests from your network.” (hay este tema como referencia).
-
Gracias a la ayuda de @riking, @neounix y @Overgrow, ejecuté una serie de comandos (que puedes leer arriba) para intentar detener, limitar o cambiar la frecuencia con la que se renderizan los incrustados de YouTube. Para la mayoría de los sitios, eso sería suficiente, pero nosotros tuvimos el drama adicional de haber sido migrados después de probar un par de proveedores, por lo que todos los posts anteriores necesitaban ser renderizados. De hecho, limitarlo a uno cada hora medio lo resolvió al principio. Pero supongo que mi comunidad realmente le encanta compartir videos, porque eso no duró mucho.
-
Obviamente, no hay retroalimentación ni ayuda de YouTube en este asunto, excepto un par de hilos en su foro con el error y todos los comentarios diciendo “sí, yo también tengo ese problema”, pero sin soluciones allí.
-
Dadas las circunstancias, recordando la lógica de los infomerciales de “¡Tiene que haber otra forma!”, opté por un enfoque “Rambo”: Compré otra dirección IP. Luego añadí un cron que cambia la dirección IP de salida cada hora. Problema resuelto.
Se espera que, si el sitio sigue creciendo y la gente sigue compartiendo ese amor por YouTube, pueda necesitar adquirir una tercera IP. Pero bueno, hasta que encuentre una manera correcta de hacer un “Discourse distribuido” en K8S o algo así, esto es lo mejor que se puede tener.
No es la solución más elegante, lo sé.
Una vez más, gracias por toda la ayuda (y sobre todo por la paciencia, porque sé que soy muy n00b con toda la combinación de Rails/Sidekiq/RubyConsole, pero estoy tratando de mejorar leyendo el código de Discourse).
¡Gracias!