Несколько Django Project + Nginx на подпуть - PullRequest
2 голосов
/ 11 апреля 2019

Я пытаюсь запустить несколько панелей, написанных на Django, для запуска на моем сервере, но не запускаю их. Следовал этому цифровому учебнику по океану и изменил его в соответствии с этим SO ответом . Теперь все запущено и работает, но когда я указываю на мой URL, он показывает страницу приветствия Nginx http://ipaddr/first_dashboard

Ниже приведен файл gunicorn_fdab.socket:

[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/run/gunicorn_fdab.sock

[Install]
WantedBy=sockets.target

Ниже gunicorn_fdab.service файл:

[Unit]
Description=gunicorn daemon for fdab
Requires= gunicorn_fdab.socket
After=network.target

[Service]
User=root
Group=root
WorkingDirectory=/opt/fdab
ExecStart=/opt/anaconda/envs/fdab/bin/gunicorn \
          --access-logfile - \
          --workers 3 \
          --bind unix:/run/gunicorn_fdab.sock \
          fdab.wsgi:application

[Install]
WantedBy=multi-user.target

Теперь это мой файл конфигурации Nginx:

server {
    listen 80;
    server_name 111.11.11.111;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /opt/fdab/fdab;
    }

    location /fdab {
        include proxy_params;
        rewrite /fdab(.*) $1;
        proxy_pass http://unix:/run/gunicorn_fdab.sock;
    }
}

Я не могу понять, где я делаю это неправильно.

Если я делаю curl --unix-socket /run/gunicorn_fdab.sock localhost, он просто ничего не возвращает.

(base) root@virtualserver01:~# curl --unix-socket /run/gunicorn_fdab.sock localhost
(base) root@virtualserver01:~# 

Проект хранится в /opt/fdab.

Дополнительная информация:

По сути, моя структура проекта для обоих проектов выглядит следующим образом:

/opt/fdab
    /fdab
    /fdab_dashboard


/opt/pdab
    /pdab
    /pdab_dashboard

Структура проекта такая, потому что я собираюсь иметь несколько приложений в fbad и fdab2 (имя второго проекта.

EDIT

Обновлен файл настроек для Nginx:

server {
    listen 80;
    server_name 111.11.11.111;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /opt/fdab/fdab;
    }

    location /fdab {
        include proxy_params;
        rewrite /fdab/(.*) /$1 break;
        proxy_pass http://unix:/run/gunicorn_fbad.sock;
    }


    location /pdab/static/ {
        alias /opt/pdab/pdab/static/;
    }

    location /pdab {
        include proxy_params;
        rewrite /pdab/(.*) /$1 break;
        proxy_pass http://unix:/run/gunicorn_pdab.sock;
    }

}

Теперь я добавил FORCE_SCRIPT_NAME = '/exampleproject' в оба проекта.

Теперь происходит то, что, если я набираю, http://<ipaddr>/fdab/fdab_dashboard работает нормально, но если я набираю http://<ipaddr>/fdab/ или http://<ipaddr>/pdab/, меня перенаправляют на http://<ipaddr>/fdab_dashboard и http://<ipaddr>/pdab_dashboard, это не то, что требуется, и более того, http://<ipaddr>/fdab_dashboard, кажется, работает правильно. Но часть URL fdab отсутствует, как только я вхожу в приложение после входа в систему, URL кажется нормальным, возможно, из-за FORCE_SCRIPT_NAME = '/fdab', но URL http://<ipaddr>/pdab_dashboard дает мне страницу 404 error.

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Я предлагаю вам попытаться не перезаписывать URL-адреса в конфигурации nginx. Выполните proxy_pass для сокетов, как требуется, а затем адаптируйте настройки URL-адресов Django в соответствии с URL-адресами, которые вы хотите использовать в различных приложениях.

0 голосов
/ 12 апреля 2019

Итак, хорошая новость в том, что ваши конфиги gunicorn и nginx, как они опубликованы, выглядят корректно.

(1) На веб-странице задачи № 1 по умолчанию отображается:

Это почти всегда вызвано файлом конфигурации nginx по умолчанию default.conf. Просто удалите этот файл, и вы должны увидеть, как ваш сайт всплывает. Единственное, что нужно проверить, это проверить и перезагрузить nginx, чтобы убедиться, что ваша конфигурация верна и загружена:

sudo nginx -t
sudo systemctl reload nginx

(2) Проблема # 2 curl в сокет unix не возвращает то, что вы ожидаете. Команда curl выглядит немного не так: попробуйте что-то вроде:

curl -v --no-buffer --unix-socket /run/gunicorn_fdab.sock http://localhost/route/available/in/django

Вы можете связать этот локоть, одновременно следя за бревнами с оружием, с помощью journalctl --since today -u gunicorn -f

...