Настройка веб-службы торнадо в производстве с обратным прокси-сервером nginx

Я занимаюсь разработкой веб-службы в торнадо в течение последних нескольких месяцев, в своей тестовой среде для запуска службы, которую я использую:

python index.py

index.py - это мой обработчик приложения торнадо, который прослушивает порт 8001. Затем я запрашиваю у веб-службы с помощью http://localhost: 8001 . Теперь я развертываю тестовую среду в промежуточной среде, которая должна отражать производство. Как я могу использовать торнадо в производстве? Я предполагаю, что мне нужно создать какой-то демон для приложения, но я не знаю, с чего начать!

10
nl ja de

1 ответы

Есть несколько инструментов, которые вы можете использовать.

First, Supervisord

Supervisord - это «система управления процессом», вы настраиваете свои процессы и позволяете Supervisor управлять ими, они перезапускают их, если они не работают, упрощают управление ими и поддерживают их работу в фоновом режиме

Вот пример файла конфигурации супервизора

[program:myprogram] 
process_name=MYPROGRAM%(process_num)s
directory=/var/www/apps/myapp 
command=/var/www/apps/myapp/virtualenv/bin/python index.py --PORT=%(process_num)s
startsecs=2
user=youruser
stdout_logfile=/var/log/myapp/out-%(process_num)s.log
stderr_logfile=/var/log/myapp/err-%(process_num)s.log
numprocs=4
numprocs_start=14000

С этой конфигурацией Supervisor запустит 4 экземпляра index.py на портах 14001-14004 ( numprocs_start ). Мы передаем - PORT =% (process_num) s , чтобы каждый процесс запускался на другом порту. Вы должны изменить numprocs и numprocs_start в соответствии с вашей средой/оборудованием. Как правило, мы запускаем процессы с процессором 2xCPU (так что четырехъядерный процессор будет иметь 8 процессов), но это может сильно варьироваться в зависимости от того, что делают ваши процессы и сколько блокировки в вашем коде.

Затем настройте NGINX для пересылки запросов на ваш сайт

   upstream myappbackend {
            server 127.0.0.1:14001  max_fails=3     fail_timeout=1s;
            server 127.0.0.1:14002  max_fails=3     fail_timeout=1s;
            server 127.0.0.1:14003  max_fails=3     fail_timeout=1s;
            server 127.0.0.1:14004  max_fails=3     fail_timeout=1s;
    }

    server {
            listen                                          4.5.6.7:80;
            server_name                                     example.com;

            access_log      /var/log/nginx/myapp.log  main;


            location/{
                    proxy_set_header                Host            $host;
                    proxy_set_header                X-Real-Ip       $remote_addr;
                    proxy_pass                      http://myappbackend/;
            }
    }      

Эта конфигурация должна быть изменена в зависимости от вашего приложения и способа его работы, это очень минимальная конфигурация и почти наверняка потребуется расширить, но этого должно быть достаточно, чтобы вы начали

28
добавлено
Это nginx или supervisord, который обрабатывает, какой процесс используется при обращении к URL-адресу? Или мне нужно больше программного обеспечения для управления этим.
добавлено автор S-K', источник
и не могли бы вы объяснить, почему вы начинаете процесс на 14000?
добавлено автор S-K', источник
nginx передает запрос одному из бэкэндов. Супервайзер только заботится об управлении процессом (live/dead/restart). Для порта вы можете выбрать все, что захотите, если оно не столкнется с каким-либо другим приложением, которое прослушивает один из портов
добавлено автор Bahadir Cambel, источник
nginx_ru
nginx_ru
930 участник(ов)

Сообщество пользователей nginx, новости, обсуждения конфигураций, вопросы, программирование на конфигах