I"m trying to figure out the best "architecture" so our django projects hosted on debian server could use celery and celery beat. He are my requirements:
- Celery workers and celery beats should be able to run after server restart automatically.
- Using standard Debian packages is preferred.
- What doesn't have to be installed globally, should be installed in project virtualenv.
- Linux user, who is owner of django project shouldn't need sudo permissions to deploy project
Based on these requirements I came to these conclusions:
- It would be good to use supervisord for deamonizing workers and beat. Supervisord is in standard debian packages and installing it this way means that running of supervisord after server restart is taken care of (this is the main reason why I dont want to install it locally in virtualenv for every project)
- Celery could be installed locally for every project in virtualenv.
Under these circumstances, when I'm deploying NEW project, next to creating new linux user, setting up apache virtualhost etc., which Im doing as a root, I would also add new config file for supervisord, which seems OK to me. Then when Im deploying new version of project using Fabric im working only under project user.
The only unresolved problem (which I found until now) of this solution is that schedule configuration for celery beat is written in django settings, but beat deamon isnt able to recognize change in the configuration until it's reloaded. However project user isn't allowed to make the reload.
My question is how should I solve this problem or what other architecture would you recommend to me? Thank you.