Развертывание Django с помощью nginx - gunicorn с другого сервера - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь развернуть свой Django Project через другой сервер приложений: Apache2, Nginx/gunicorn, ...

Он отлично работает с Apache2 или Nginx, но я хотел бы отделить сервер приложений от моего Django Projet. Я хотел бы получить такую ​​среду:

  • Сервер 1 (172.30.10.92): Django Project & wsgi
  • Сервер 2 (172.30.10.93): Nginx / gunicorn

Почему? Потому что позже у меня будет несколько приложений Django, но я бы хотел использовать только один сервер приложений.

Мне кажется, я ошибаюсь в синтаксисе файлов конфигурации.

У меня есть в / etc / nginx / sites-available / DatasystemsCORE.conf :

server {
    listen 8000;
    server_name 172.30.10.92; 

    location = /favicon.ico { access_log off; log_not_found off; }

    location /static/ {
            root http://172.30.10.92:/var/www/html/;
    }

    location / {
            include proxy_params;
            proxy_pass http://172.30.10.92/unix:/var/www/html/DatasystemsCORE/dscore.sock;
    }
}

имя_сервера: Это IP-адрес с сервера Django или сервера nginx? Я думаю, что это первый, но я не уверен.

proxy_pass: Я думаю, что проблема в моем пути

Затем я выполняю эту команду:

gunicorn --daemon --workers 3 --bind 172.30.10.92/unix:/var/www/html/DatasystemsCORE/dscore.sock 172.30.10.92:/var/www/html/DatasystemsCORE/DatasystemsCORE.wsgi

Еще раз, у меня проблема с синтаксисом, потому что я получаю 502 Bad Request

Как мне добавить туда IP-адрес с удаленного сервера Django?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Я нашел, как решить мою проблему, и сделал учебник (на основе моего случая), чтобы помочь всем, кто хотел бы сделать то же самое.

Мой файл там: Скачать учебный файл

Но это тот же учебник, написанный на английском языке.

Мой Django IP-сервер: 172.30.10.92

Мой IP-сервер Nginx: 172.30.10.93

1 - Установить и настроить wsgi (находится на сервере Django)

WSGI - это файл, созданный с помощью вашего проекта Django.

Файл находится в /path/to/your/project/Myproject/wsgi.py

Мы должны отредактировать этот файл так:

import os
from django.core.wsgi import get_wsgi_application

import sys sys.path.append('/var/www/html/Myproject')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Myproject.settings")
application = get_wsgi_application()

2 - Установить и настроить gunicorn / supervisor (находится на сервере Django)

Чтобы установить gunicorn / supervisor, вы должны выполнить в своей оболочке:

pip install gunicorn
pip install supervisor

Затем вам нужно создать новый файл в /etc/supervisor/conf.d/Myproject.conf, который будет выглядеть так:

[program:Myproject]
command = /home/valentin/.virtualenvs/MyprojectEnv/bin/gunicorn Myproject.wsgi:application --name "Myproject" --workers=4 --bind=0.0.0.0:8080 -- user="valentin" --group="valentin" ; Command to start app
user = username #You have to replace by your username
stdout_logfile = /var/log/supervisor/supervisor.log
redirect_stderr = true
log
environment=LANG=fr_FR.UTF-8,LC_ALL=fr_FR.UTF-8

Я указал порт 8080 , который является портом связи между моим сервером приложений и моим веб-сервером.

3 - Редактировать файл hosts на сервере nginx (расположен на сервере nginx)

Вы должны отредактировать файл хостов, расположенный по адресу /etc/hosts, и добавить новую запись на свой сервер Django:

127.0.0.1 localhost 
127.0.1.1 valentin 
172.30.10.92 Myproject

# The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

4- Новый файл конфигурации в репозитории nginx (находится на сервере nginx)

Этот новый файл должен быть помещен в /etc/nginx/sites-available/Myproject.conf

 server {
    listen 8080;
    server_name Myproject;

    root /var/www/html/Myproject/;

    location /static/ {
        root /var/www/html/;
    }

    location / {
        include proxy_params;
        proxy_pass http://172.30.10.92:8080;
        }       
}

IP-адрес соответствует адресу моего сервера Django. Я указал порт прослушивания (8080), путь к моему проекту Django и статический каталог.

Затем необходимо создать символическую ссылку на сайты с поддержкой .

После этой операции перезапустите службу nginx:

sudo service nginx restart

5- Разрешить IP-адрес nginx в Django (расположен на сервере Django)

Вам нужно отредактировать файл settings.py , чтобы разрешить IP-адрес nginx в ALLOWED_HOSTS :

ALLOWED_HOSTS = ['localhost', '172.30.10.93', '127.0.0.1', '[::1]']

6 - наконец выполнить gunicorn (находится на сервере Django)

Наконец, вы должны начать Gunicorn. Вы должны быть внутри вашего корневого проекта Django и выполнить:

gunicorn Myproject.wsgi:application --bind 172.30.10.92:8080

Теперь, в вашем браузере, попробуйте подключиться к вашему серверу nginx через порт:

http://172.30.10.93:8080

Работает!

PS: Этот урок работает для меня, если он не работает для вас, возможно, я что-то пропустил, или, может быть, вы не сделали так же, как я;)

0 голосов
/ 27 апреля 2018

То, что вы пытаетесь сделать, не имеет никакого смысла. Конечно, вы можете использовать один nginx на отдельном сервере, но gunicorn является сервером приложений и принадлежит к приложению.

Нет "сервера Django", поэтому ваш первый вопрос не имеет значения. gunicorn должен будет обслуживать порт, а не сокет, и nginx proxy_pass будет указывать на этот порт.

...