在同一台服务器上运行多个Django芹菜网站

在同一台服务器上运行多个Django芹菜网站,django,celery,django-celery,supervisord,celeryd,Django,Celery,Django Celery,Supervisord,Celeryd,我使用apache2虚拟服务器在同一台服务器上运行多个Django/apache/wsgi网站。我想使用芹菜,但如果我为多个网站启动芹菜,所有网站都将使用我启动的上一个芹菜实例的配置(日志、数据库等) 有没有一种方法可以使用多个Celeryd(每个网站一个)或一个Celeryd?看起来这应该是可行的,但我不知道怎么做。是的,有办法。 我们使用supervisor为我们需要的每个项目启动芹菜守护进程 主管配置文件如下所示: [program:PROJECTNAME] command=python

我使用apache2虚拟服务器在同一台服务器上运行多个Django/apache/wsgi网站。我想使用芹菜,但如果我为多个网站启动芹菜,所有网站都将使用我启动的上一个芹菜实例的配置(日志、数据库等)

有没有一种方法可以使用多个Celeryd(每个网站一个)或一个Celeryd?看起来这应该是可行的,但我不知道怎么做。

是的,有办法。 我们使用supervisor为我们需要的每个项目启动芹菜守护进程

主管配置文件如下所示:

[program:PROJECTNAME]
command=python manage.py celeryd --loglevel=INFO --beat
environment=PATH=/home/www-data/projects/PROJECTNAME/env/bin:/usr/bin:/bin
directory=/home/www-data/projects/PROJECTNAME/
user=www-data
numprocs=1
umask=022
stdout_logfile=/home/www-data/logs/%(program_name)s.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=10
stderr_logfile=/home/www-data/logs/%(program_name)s.error.log
stderr_logfile_maxbytes=50MB
stderr_logfile_backups=10
autorestart=true
autostart=True
startsecs=10
stopwaitsecs = 60
priority=998
如果使用此设置,还有另一个优点:芹菜守护进程完全在用户空间中运行


记住为您的项目使用不同的代理后端。如果您对每个项目使用相同的rabbitmq virtualhost,或者使用相同的redis数据库,那么它将不起作用

这个问题让我很头疼,我第一次来这里时没有注意到@Crazyshezy的评论。我只是通过为每个web应用更改settings.py中的代理URL来实现这一点

app1.settings.py

BROKER_URL = 'redis://localhost:6379/0'
BROKER_URL = 'redis://localhost:6379/1'
app2.settings.py

BROKER_URL = 'redis://localhost:6379/0'
BROKER_URL = 'redis://localhost:6379/1'

在每个网站的芹菜设置中使用不同的broker\u用户、broker\u密码是否有帮助?是的!我所需要的只是一个不同的broker_用户和broker_vhost。谢谢@Crazyshezy,对于任务排队,是的,但是守护进程还需要指向正确的Django设置文件,以便在正确的环境中执行它。我想OP是在问以后怎么做。如果您只运行一个守护进程,那么没有简单的方法可以做到这一点。frog32的答案可能是最好的解决方案。谢谢,我通过使用不同的Rabbitmq用户和vhost实现了它。但使用主管会有好处吗?它为我们提供了一个明确的责任划分。服务器管理员必须确保supervisor始终在运行。我们只需要和我们的工作人员打交道,不需要root权限就可以做到这一点。@frog32如果项目版本在时间戳dirs内发布,这将如何工作(在本例中,apache指向一个wsgi文件symlink,该文件在每个版本中都会由部署脚本更新,因此,除非我们创建另一个symlink,否则没有真正的方法将绝对dir告诉virtualenv)@user2298943使用符号链接作为目录应该不会有问题。为了安全起见,您应该首先停止任务,然后更改符号链接,然后再次启动任务。您是否在一个主管实例下运行它们?当我启动主管时,它对每个应用程序使用相同的设置文件(尽管我在supervisord.conf的“command”部分使用了不同的manage.py文件),但我不同的BROKER_URL设置没有任何效果。@FelixBöhme我不是在使用supervisor运行此程序。您不能只使用“manage.py芹菜工作者--settings=app.settingsx”指定设置吗.啊,好主意。谢谢,那会更容易。不幸的是,看到这一切太晚了。我最终从django supervisor那里拿到了它,直接使用supervisord。但至少我知道,如果需要的话,我可以重新使用django supervisor。