Запуск 2 приложений Gunicorn и Nginx с Supervisord

Вопрос: Эта проблема, по общему признанию, превзошла меня в течение нескольких месяцев. Я только что отложил исправление других ошибок и отложил это до тех пор, пока он не будет исправлен - Я пытаюсь запустить 2 отдельных приложения для пушек и запустить nginx в том же файле supervisord.conf. Когда я запускаю супервизора, я могу успешно запустить

Вопрос:

Эта проблема, по общему признанию, превзошла меня в течение нескольких месяцев. Я только что отложил исправление других ошибок и отложил это до тех пор, пока он не будет исправлен –

Я пытаюсь запустить 2 отдельных приложения для пушек и запустить nginx в том же файле supervisord.conf. Когда я запускаю супервизора, я могу успешно запустить приложение handlecalls, но когда я перехожу на сайт, на который отвечает за загрузку комментариев, я получаю внутреннюю служебную ошибку (500).

Когда я запускаю приложения handlecalls и commentbox отдельно с командами, следующими за полем команды, приложения работают нормально. Почему программа commentbox дает мне ошибку 500, когда я пытаюсь запустить оба с supervisord?

мой сценарий супервизора:[program:nginx] directory = /var/www/vmail command = service nginx start -g «daemon off;» autostart = True [program:commentbox] directory = /var/www/vmail command = gunicorn app:app -bind 0.0.0.0:8000 autostart = True [program:handlecalls] directory = /var/www/vmail command = gunicorn handle_calls:app —bind 0.0.0.0:8000 autostart = True [supervisord] directory = /var/www/vmail logfile = /var/www/vmail/supervisorerrs.log loglevel = trace Лучший ответ:

Это не имеет никакого отношения к супервизору. Supervisord – это просто способ запуска/остановки/перезапуска сервера. Это больше связано с конфигурацией вашего сервера.

Основное: Чтобы обслуживать два приложения для пушек с nginx, вам нужно запустить их на двух разных портах, а затем настроить nginx на proxy_pass запрос на соответствующие порты. Резонанс: когда процесс выполняется на порту, этот порт не может использоваться другим процессом.

Поэтому измените конфигурацию в вашем скрипте супервизора, чтобы:

[program:commentbox] directory = /var/www/vmail command = gunicorn app:app —bind 0.0.0.0:8000 autostart = True [program:handlecalls] directory = /var/www/vmail command = gunicorn handle_calls:app —bind 0.0.0.0:8001 autostart = True

Затем в конфигурации сервера nginx для handlecalls

proxy_pass 127.0.0.1:8081

Обновление: вот основные принципы развертывания веб-приложения

  1. Как упоминалось выше, один порт может быть прослушан только процессом.
  2. Вы можете использовать nginx в качестве http-сервера, слушая порт 80 (или 443 для https), а затем передавая запрос другим приложениям, слушающим другие порты (например, commentbox на порт 8000 и дескрипторы на порту 8001)
  3. Вы можете добавить правила к nginx как к тому, как обслуживать ваше приложение, добавив определенные файлы конфигурации сервера в /etc/nginx/sites-available/ (по умолчанию, в некоторых случаях это разные). Правила должны указывать путь для nginx, чтобы узнать, к какому приложению он должен отправить запрос, например:

    • Чтобы повторно использовать один и тот же http-порт (80), каждое приложение должно быть назначено другому домену. ie: commentbox.yourdomain.com для commentbox и handlecalls.yourdomain.com для handlecalls
    • Способ обслуживания двух разных приложений в одном домене – это обслуживание на разных портах. Например: yourdomain.com будет служить commentbox и yourdomain.com:8080 будет служить handlecalls
    • Способ обслуживания двух разных приложений в одном и том же домене и в тех же портах состоит в том, чтобы они могли работать на двух разных конечных точках. Например yourdomain.com/commentbox будет служить commentbox и yourdomain.com/handlecalls будет служить handlecalls
  4. После добавления файлов конфигурации в /etc/nginx/sites-available/, вы должны символически привязать эти файлы к /etc/nginx/sites-enabled/, ну, чтобы сообщить nginx, что вы хотите включить их. Вы можете добавить файлы непосредственно в /etc/nginx/sites-enabled/, но я не рекомендую его, так как он не дает вам удобный способ включить/отключить ваше приложение.

Обновление. Вот как настроить nginx для обслуживания приложений gunicorn с использованием двух разных поддоменов:

  1. Добавьте два субдомена commentbox.yourdomain.com и handlecalls.yourdomain.com и укажите их как на IP-адрес вашего сервера.
  2. Создайте файл конфигурации aa для commentbox в /etc/nginx/sites-available/commentbox со следующим содержимым (отредактируйте как /etc/nginx/sites-available/commentbox):

    server { listen 80; server_name commentbox.yourdomain.com; root /path/to/your/application/static/folder; location / { try_files $uri @app; } location @app { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect off; proxy_pass http://127.0.0.1:8000; } }

  3. Создайте файл конфигурации для handlecalls на /etc/nginx/sites-available/handlecalls со следующим содержимым (отредактируйте как /etc/nginx/sites-available/handlecalls):

    server { listen 80; server_name handlecalls.yourdomain.com; root /path/to/your/application/static/folder; location / { try_files $uri @app; } location @app { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect off; proxy_pass ; } }

  4. Создайте символические ссылки для включения этих серверов:

    sudo ln -s /etc/nginx/sites-available/commentbox /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/handlecalls /etc/nginx/sites-enabled/

  5. Перезапустить nginx для вступления в силу

    sudo service nginx restart

Оцените статью
Добавить комментарий