使用nginx,django和Celery正确设置多个网站



我试图找到一些关于在linode上设置多个django站点的正确方法的信息(Ubuntu 12.04.3 LTS (GNU/Linux 3.9.3-x86_64-linode33 x86_64(

这是我现在拥有的:

网络服务器: nginx

每个站点都包含在 .virtualenv 中

Django 和其他软件包在每个 .virtualenv 中使用 pip 安装

RabbitMQ 使用 sudo apt-get rabbitmq 进行安装,并为每个站点创建一个新用户和虚拟主机。

每个站点都使用主管脚本启动:

[group:<SITENAME>]
programs=<SITENAME>-gunicorn, <SITENAME>-celeryd, <SITENAME>-celerycam

[program:<SITENAME>-gunicorn]
directory = /home/<USER>/.virtualenvs/<SITENAME>/<PROJECT>/
command=/home/<USER>/.virtualenvs/<SITENAME>/bin/gunicorn <PROJECT>.wsgi:application -c /home/<USER>/.virtualenvs/<SITENAME>/<PROJECT>/server_conf/<SITENAME>-gunicorn.py
user=<USER>
autostart = true
autorestart = true
stderr_events_enabled = true
redirect_stderr = true
logfile_maxbytes=5MB

[program:<SITENAME>-celeryd]
directory=/home/<USER>/.virtualenvs/<SITENAME>/<PROJECT>/
command=/home/<USER>/.virtualenvs/<SITENAME>/bin/python /home/<USER>/.virtualenvs/<SITENAME>/<PROJECT>/manage.py celery worker -E -n <SITENAME> --broker=amqp://<SITENAME>:<SITENAME>@localhost:5672//<SITENAME> --loglevel=ERROR
environment=HOME='/home/<USER>/.virtualenvs/<SITENAME>/<PROJECT>/',DJANGO_SETTINGS_MODULE='<PROJECT>.settings.staging'
user=<USER>
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
[program:<SITENAME>-celerycam]
directory=/home/<USER>/.virtualenvs/<SITENAME>/<PROJECT>/
command=/home/<USER>/.virtualenvs/<SITENAME>/bin/python /home/<USER>/.virtualenvs/<SITENAME>/<PROJECT>/manage.py celerycam
environment=HOME='/home/<USER>/.virtualenvs/<SITENAME>/<PROJECT>/',DJANGO_SETTINGS_MODULE='<PROJECT>.settings.staging'
user=<USER>
autostart=true
autorestart=true
startsecs=10

问题1:这是正确的方法吗?还是更好的方法?

问题2:我尝试安装芹菜花,但它如何与多个站点一起工作?我是否需要为每个 .virtualenv 安装一个 flower-package,或者我可以为每个站点使用一个安装?如何设置 nginx 以在我的服务器上显示花页?

答案 1

正如经常:)的那样,有几种方法可以走。我们确实以类似的方式设置它。

对于主管配置,我建议使用不那么冗长的方式,下面是运行"example.com"的 web/tasks 的示例:

/

etc/supervisor/conf.d/example.com.conf
(我们通常也有存储库中的配置文件,只需符号链接它们。因此,此文件可能是指向以下内容的符号链接:
/var/www/example.com/conf/supervisord.conf (

[group:example.com]
programs=web, worker, cam
[program:web]
command=/srv/example.com/bin/gunicorn project.wsgi -c /var/www/example.com/app/gunicorn.conf.py
directory=/var/www/example.com/app/
user=<USER>
autostart=true
autorestart=true
redirect_stderr=True
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
stdout_logfile=/var/log/apps/web.example.com.log

[program:worker]
command=/srv/example.com/bin/celery -A project worker -l info
directory=/var/www/example.com/app/
user=<USER>
autostart=true
autorestart=true
redirect_stderr=True
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
stdout_logfile=/var/log/apps/web.example.com.log

[program:flower]
command=/srv/example.com/bin/celery flower -A project --broker=amqp://guest:guest@localhost:5672//example.com/ --url_prefix=flower --port 5001
directory=/var/www/example.com/app/
...

所以你要打的更少,更容易阅读。

# restart all 'programs'
supervisorctl restart example.com:* 
# restart web/django
supervisorctl restart example.com:web
etc. 

答案 2

不完全确定这是否是最好的方法,但是我会在这里(通常这样做(做什么:

  • 为每个应用程序单独运行朵(请参阅上面的配置(
    与各自的虚拟主机(和url_prefix(
  • ad nginx 反向代理(与 url_prefix 同名的目录(
/

etc/nginx/sites-enabled/example.conf

server {
    ...
    location /flower {
        proxy_pass http://127.0.0.1:5001;
        ...

访问 example.com/flower 的花卉界面

相关内容

  • 没有找到相关文章