Что мне нужно: Мне нужно через веб-интерфейс Flower иметь возможность следить за воркерами, останавливать, перезапускать их и в целом использовать всё API Flower, которое он предоставляет. При этом также требуется настроить аутентификацию во Flower, чтобы посторонний не имел доступа к этому сервису.
Проблема: Из-за кривизны Flower, если включить аутентификацию в самом Flower через --basic_auth, то тогда API Flower становится недоступно! На github'е все пишут, что это баг в самом Flower. Т.е. я не смогу просмотреть подробную информацию о воркере, не смогу перезапустить его через Flower, к примеру. Все это работает, если отключить аутентификацию через --basic_auth.
Что я пробовал: Немного подумав, я решил отключить --basic_auth во Flower и переложить эту задачу на сервис с Django-приложением. Мой Nginx проксирует запрос в Django, а уже Django в своей вьюшке проверяет необходимые права и проксирует запрос в сервис Flower. Ниже представлен код прокси-контроллера Flower.
import requests
from django.http import (
HttpResponse,
HttpRequest,
)
from django.http import HttpResponseForbidden
from rest_framework.views import APIView
class FlowerProxyAPI(APIView):
"""
Эндпойнт для проксирования запросов к Flower.
Т.к. при включенной аутентификации в Flower у него
не работает API'шка через веб-интерфейс, пришлось отключить
аутентификацию во Flower и перенести ее в Django-сервис.
"""
def dispatch(self, request: HttpRequest, *args, **kwargs) -> HttpResponse:
"""Обработка всех запросов к Flower"""
if not request.user.is_superuser:
return HttpResponseForbidden(*args, **kwargs)
response: requests.Response = requests.request(
method=request.method,
url='http://flower:5555' + request.get_full_path(),
headers=request.headers,
params=request.GET,
data=request.POST,
)
return HttpResponse(
content=response.content,
content_type=response.headers['content-type'],
*args, **kwargs,
)
Проблема такого подхода заключается в том, что эта штука работает очень нестабильно. Бывает, работает, бывает, выдает 404 ошибку, бывает content-type ему не нравится. Поэтому, сейчас у меня два варианта: либо полностью правильно сформировать запросы к Flower из контроллера Django, либо как-то настроить в самом Flower и --basic_auth, и API.
Вот ошибки, которые стали появляться сами собой при запросе к Flower:
- Refused to apply style from '' because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.
- Refused to execute script from '' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.
- Uncaught ReferenceError: jQuery is not defined
Я действительно не знаю, в чем дело, т.к. все прекрасно работало несколько дней. Ничего не менял, просто Flower взял и отвалился.
Кто-нибудь сталкивался с такой проблемой? Если да, то как решали? Буду очень благодарен за любые ответы и подсказки!