【问题标题】:Correct setup for multiple web sites with nginx, django and celery使用 nginx、django 和 celery 正确设置多个网站
【发布时间】:2013-10-01 12:47:48
【问题描述】:

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

这是我现在拥有的:

网络服务器:nginx

每个站点都包含在 .virtualenv 中

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

使用sudo apt-get rabbitmq 安装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:我已尝试安装 celery flower,但它如何与多个站点一起使用?我需要为每个 .virtualenv 安装一个花包,还是可以为每个站点使用一个安装包?如何设置 nginx 在我的服务器上显示花页?

【问题讨论】:

    标签: django celery django-celery flower


    【解决方案1】:

    回答 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

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

    • 为每个应用单独运行 flower(参见上面的配置)
      使用各自的虚拟主机(和 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

    上的花界面

    【讨论】:

      猜你喜欢
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多