Разверните один проект django с несколькими приложениями на нескольких поддоменах в AWS EC2 - PullRequest
0 голосов
/ 22 января 2019

У меня есть один проект django, который содержит 2 приложения, а именно, admin и api. Приложение администратора зависит от api приложения для доступа к моделям.

У меня есть 2 субдомена, такие как: admin.xxxx.com и api.xxxx.com.

Этот проект в настоящее время развернут в AWS EC2 с использованием gunicorn + nginx.

ОБНОВЛЕНИЕ

Все запросы администратора передаются: some.ip.address.0:8000/admin/, а все запросы API проходят через some.ip.address.0:8000/

Есть ли способ указать мой some.ip.address.0: 8000 / admin / на admin.xxxx.com и some.ip.address .0: 8000 / до api.xxxx.com ?

ОБНОВЛЕНИЕ 2:

myproject_nginx.conf file:

upstream myproject_backend_server {
  # fail_timeout=0 means we always retry an upstream even if it failed
  # to return a good HTTP response (in case the Unicorn master nukes a
  # single worker for timing out).
  server unix:/home/ubuntu/myproject_backend/myproject_backend.sock fail_timeout=0;

}

server{
    listen 80;
    listen [::]:80;
    server_name admin.mydomain.in;

    location / {
      proxy_pass http://13.***.***.***:8000/admin/;
    }
    location /static/ {
       alias   /home/ubuntu/myproject_backend/static/;
     }

    location /media/ {
       alias   /home/ubuntu/myproject_backend/media/;
     }

 }


server {

    listen 80;

    server_name 13.***.***.***:8000  api.mydomain.in www.api.mydomain.in;

    client_max_body_size 4G;

    location /static/ {
        alias   /home/ubuntu/myproject_backend/static/;
    }

    location /media/ {
        alias   /home/ubuntu/myproject_backend/media/;
    }

    location / {

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header Host $http_host;

        proxy_redirect off;

        # Try to serve static files from nginx, no point in making an
        # *application* server like Unicorn/Rainbows! serve static files.
        if (!-f $request_filename) {
            proxy_pass http://myproject_backend_server;
            break;
        }
    }

}

Файл myproject urls.py:

from django.urls import path, re_path, include
from django.conf.urls.static import static
from django.conf import settings
from django.views.static import serve

urlpatterns = [
    re_path(r'^', include('api_app.urls')),
    ...
    path('admin/', include('admin_app.urls')),

    ...

    re_path(r'^static/(?P<path>.*)$', serve,
            {'document_root': settings.STATIC_ROOT}),
    re_path(r'^media/(?P<path>.*)$', serve,
            {'document_root': settings.MEDIA_ROOT}),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Он открывает мою страницу входа администратора, но я пытаюсь войти, он говорит: / admin / admin не найден на этом сервере.

Подскажите, пожалуйста, что не так?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Как я понимаю, вы хотите отобразить страницу администратора, когда пользователь вводит этот адрес http://admin.mydomain.in в своем браузере, и эта страница администратора обрабатывается вашим приложением django, поэтому вы используете nginx для прокси на http://13.***.***.***:8000/admin/, откуда вашСтраница администратора может быть доступна.

Но проблема в том, что ваше приложение не знает, как это сделать.Поэтому ему нужен посредник (в вашем случае это Gunicorn), специально предназначенный для этой цели.Более того, nginx не может напрямую общаться с вашим приложением django просто потому, что оно не предназначено для обслуживания динамического контента.

Итак, чтобы решить эту проблему, вам нужно настроить gunicorn так, чтобы он слушал адрес http://13.***.***.***:8000, куда nginx будет пересылать запрос.А затем запустите gunicorn по этому адресу с параметром в качестве имени вашего приложения.Вы можете прочитать второй ответ на сообщение , в котором содержится запрос от gunicorn для настройки файла gunicorn.

0 голосов
/ 22 января 2019

Да, для этого вам нужно указать два домена на экземпляр EC2, на котором размещено ваше приложение django (или ELB, если вы его используете), и настроить Nginx так, чтобы он перенаправлял запросы из одного домена на admin и от другого до api пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...