Два или более проектов Django в одной капле через субдомен

У меня два проекта django. Когда человек заходит на сайт www.example.com, я хочу, чтобы проект Django обслуживался.

Когда человек посещает, скажем, blog.example.com, я хочу, чтобы был обслужен проект B django.

Как я могу добиться этого с помощью nginx и gunicorn в зависимости от конфигурации?

Я закончил с настройкой DNS поддомена. Мне нужна помощь в аспекте обслуживания страниц nginx-gunicorn.

Я использовал установку django в один клик от DO, поэтому, если конфигурация соответствует их настройкам, будет здорово.

Понятия не имею, относится ли этот вопрос к этому или сбой сервера.


person KhoPhi    schedule 22.04.2015    source источник
comment
Этот пост, вероятно, будет закрыт как слишком общий, но я настоятельно рекомендую пост Михала Карзинского на Обслуживание нескольких приложений Django с Nginx и Gunicorn.   -  person rnevius    schedule 22.04.2015
comment
@rnevius Спасибо. Но я думаю, что это конкретный вопрос, направленный на настройку nginx и gunicorn. Больше ничего. Если только это не слишком широко. Я точно проверяю вашу ссылку.   -  person KhoPhi    schedule 22.04.2015
comment
Вам в основном нужно продублировать файлы конфигурации, которые ДЕЙСТВИТЕЛЬНО устанавливаются. Это: /etc/init/gunicorn.conf, /etc/nginx/sites-available/django.conf и gunicorn.py, на который указывает gunicorn.conf.   -  person aumo    schedule 22.04.2015


Ответы (1)


Принцип состоит в том, чтобы использовать nginx в качестве брокера для HTTP-запросов, проксируя их на два экземпляра gUnicorn, запускающих ваши два приложения Django параллельно, в зависимости от их заголовка Host.

Для этого вам нужно настроить две разные конфигурации сервера с nginx. У каждого свой server_name. Эти два сервера будут прокси для двух разных экземпляров gUnicorn, работающих на разных портах.

Конфигурация Nginx

# Server definition for project A
server {
    listen             80;
    server_name        <projectA domain name>;

    location / {
        # Proxy to gUnicorn.
        proxy_pass             http://127.0.0.1:<projectA gUnicorn port>;
        # etc...
    }
}

# Server definition for project B
server {
    listen             80;
    server_name        <projectB domain name>;

    location / {
        # Proxy to gUnicorn on a different port.
        proxy_pass             http://127.0.0.1:<projectB gUnicorn port>;
        # etc...
    }
}

Возможно, лучше разделить два определения в отдельные файлы. Также не забудьте связать их в /etc/nginx/sites-enabled/.

Конфигурация Upstart

Эти два файла нужно поместить в /etc/init/.

projecta_gunicorn.conf:

description "Gunicorn daemon for Django project A"

start on (local-filesystems and net-device-up IFACE=eth0)
stop on runlevel [!12345]

# If the process quits unexpectadly trigger a respawn
respawn

setuid django
setgid django
chdir /home/django/<path to projectA>

exec /home/django/<path to project A virtualenv>/bin/gunicorn --config /home/django/<path to project A gunicorn.py> <projectA name>.wsgi:application

projectb_gunicorn.conf:

description "Gunicorn daemon for Django project B"

start on (local-filesystems and net-device-up IFACE=eth0)
stop on runlevel [!12345]

# If the process quits unexpectadly trigger a respawn
respawn

setuid django
setgid django
chdir /home/django/<path to projectB>

exec /home/django/<path to projectB virtualenv>/bin/gunicorn --config /home/django/<path to projectB gunicorn.py> <projectB name>.wsgi:application

Конфигурация gUnicorn

Проект А gunicorn.py:

bind = '127.0.0.1:<projectA gUnicorn port>'
raw_env = 'DJANGO_SETTINGS_MODULE=<projectA name>.settings'

Проект B gunicorn.py:

bind = '127.0.0.1:<projectB gUnicorn port>'
raw_env = 'DJANGO_SETTINGS_MODULE=<projectB name>.settings'
person aumo    schedule 22.04.2015
comment
Спасибо за Ваш ответ. Постепенно забираю меня туда. У меня все настроено и все работает хорошо, за исключением того факта, что я получаю плохой шлюз Nginx, когда я посещаю, скажем, blog.example.com www.example.com работает хорошо. Но поддомен жалуется на плохой шлюз nginx. Я все еще разбираюсь, почему, возможно, где-то допустил ошибку. Если есть подсказки, пожалуйста. - person KhoPhi; 22.04.2015
comment
Это означает, что nginx не может проксировать запрос на gUnicorn, запущен ли экземпляр gUnicorn? Если да, работает ли он на порту, указанном в proxy_pass конфигурации nginx? - person aumo; 22.04.2015
comment
Перепроверяю сейчас. Думаю, виноват один из них. - person KhoPhi; 22.04.2015
comment
Знаете что, теперь он работает. Вы знаете, в чем был виноват? перезагрузка sudo была тем, что мне было нужно. После перепроверки и перепроверки я понял, что все идеально, пока не вспомнил, что вещи в / etc / init / * загружаются ТОЛЬКО после перезагрузки. Спасибо за ответ. Именно то руководство, которое я искал. - person KhoPhi; 22.04.2015
comment
Вы также могли запустить service project[a or b]_gunicorn start! Вам нужно будет запустить service project[a or b]_gunicorn reload, если вы хотите, чтобы изменения, внесенные в проект, были учтены. - person aumo; 22.04.2015
comment
Я думал, что перезапуск службы Gunicorn перезапустит все экземпляры. Я был неправ. Хороший совет. Однако для перезапуска всего vps потребовалось меньше 10. Но воспользуюсь вашим подходом в следующий раз. - person KhoPhi; 22.04.2015