我希望使用Flower(https://github.com/mher/flower)来监视我的 celery 任务,代替其文档(http://docs.celeryproject.org/en/latest/userguide/monitoring.html#flower-real-time-celery-web-monitor)中推荐的django-admin。但是,由于我是新手,所以对Flower页面仅基于HTTP而不基于HTTPS的方式有些困惑。如何为我的Celery任务启用安全性,以使任何老用户不能只访问无需登录的网站http://flowerserver.com:5555并进行更改?
我已经考虑过Celery的own documentation了,但是不幸的是,他们没有提到如何保护Flower的api或Web ui。它说的全部:[Need more text here]
谢谢!
更新:我的问题部分是这里的重复:How do I add authentication and endpoint to Django Celery Flower Monitoring?
但是,在这里,我通过询问如何在包括nginx,gunicorn和celery在内的所有远程计算机上的环境中运行它来澄清他的问题。我也很想知道如何设置Flower的外部可访问URL,但如果可能的话(或通过某种方式保护Webui并远程访问它),也希望使用https而非HTTP。我还需要知道,对于任何可能访问Flower的内部API的人来说,让Flower运行是否会带来相当大的安全风险,以及确保此方法安全的最佳方法是什么,或者应该将其完全禁用并仅用于以下目的?需要的基础。
最佳答案
您可以使用--auth标志运行花,它将使用特定的Google电子邮件进行身份验证:
celery flower [email protected]
编辑1 :
Flower的新版本需要更多的标志和一个带有Google Developer Console的已注册OAuth2客户端:
celery flower [email protected] --oauth2_key="client_id" --oauth2_secret="client_secret" --oauth2_redirect_uri="http://example.com:5555/login"
oauth2_redirect_uri
必须是实际的鲜花登录网址,还必须将其添加到Google Development Console中的授权重定向网址中。不幸的是,此功能在当前的稳定版本
0.7.2
中无法正常工作,但现在已在开发版本0.8.0-dev
中使用此commit进行了修复。编辑2 :
您可以使用basic authentication配置Flower:
celery flower --basic_auth=user1:password1,user2:password2
然后为除本地主机之外的所有主机阻止5555端口,并为nginx或apache配置反向代理:
ProxyRequests off
ProxyPreserveHost On
ProxyPass / http://localhost:5555
然后确保启用了代理mod:
sudo a2enmod proxy
sudo a2enmod proxy_http
如果您无法在单独的子域(例如
flower.example.com
(上面的配置))上进行设置,则可以将其设置为example.com/flower
:用
url_prefix
运行花:celery flower --url_prefix=flower --basic_auth=user1:password1,user2:password2
在Apache配置中:
ProxyPass /flower http://localhost:5555
当然,请确保已配置SSL,否则没有意义:)