2015-12-11 3 views
0

У меня есть приложение Django, использующее gunicorn - теперь я хочу заменить его waitress. Достаточно легко, я установил официантку через apt-get install python-waitress и запустил ее через waitress-serve --port=8080 myproject.wsgi:application.Построение файла Upstart для python-waitress

Теперь я хочу настроить это для запуска через файл Upstart (я на Ubuntu). Я хочу, чтобы он работал на обычных уровнях выполнения 2, 3, 4 и 5 и сообщал, что он останавливается, когда он находится на любом другом уровне выполнения (например, при перезагрузке системы, завершении работы или в одиночном пользователе). Я также хочу, чтобы Upstart автоматически перезапустил службу, если она не удалась. И последнее, но не менее важное: мне нужно waitress для работы на порту 80, а не в порту 8080.

Мои вопросы: как я могу создать свой файл Upstart для отражения этих требований? И любые другие включения, которые будут полезными дополнениями? Пожалуйста, порекомендуйте; это мой основной производственный сервер.

Во-вторых, согласно waitress, кроме возможности использовать его с SSL, существуют ли преимущества использования обратного прокси-сервера (например, Nginx) с waitress? Мое приложение - это тяжелое веб-приложение Django, в котором пользователи собираются и общаются друг с другом.

ответ

0

Вместо того, чтобы писать собственный сценарий выскочки, я бы рекомендовал изучить другие хорошо известные и проверенные временем решения. Одним из таких популярных решений является supervisor. Это чистый-Python и довольно прост в установке и настройке. Если вы устанавливаете с apt-get, он поставляется со всеми необходимыми сценариями для запуска, когда Ubuntu сам перезагружается и т. Д. (Хотя, скорее всего, вы не будете устанавливать последнюю версию супервизора). После того как супервизор установлен, все, что вам нужно сделать, это добавить небольшую конфигурацию для вашего процесса веб-сервера. Затем, когда вы начинаете супервизор, он будет управлять процессом вашего веб-сервера. Вот пример руководитель конфигурации:

[program:project_name] 
command=/path/to/virtualenv/bin/waitress-serve --port=8080 myproject.wsgi:application 
directory=/path/to/django/project 
autostart=true 
autorestart=true 
redirect_stderr=True 
user=www 

Обратите внимание, что администратор может управлять несколькими процессами, так что если у вас есть какие-либо другие процессы, необходимые для запуска вашего веб-приложение, вы можете добавить их к руководителю, а также.

Что касается преимуществ использования nginx, есть много других вопросов StackOverflow по этой теме, поэтому я бы рекомендовал посмотреть на них, а затем прочесть похожие идеи здесь. Вот несколько я нашел:

+0

Miki спасибо за пост на супервизора. Что касается nginx, как обратного прокси с официанткой, я задал этот вопрос, потому что (я) я прочитал этот пост, утверждая, что официантка - достаточно хороший автономный сервер производственного класса: http://blog.etianen.com/blog/2014/01/ 19/gunicorn-heroku-django /, и (ii) единственная причина, по которой кто-то упоминал об использовании nginx с официанткой, связан с поддержкой https: http://stackoverflow.com/questions/19462959/i-can-not-connect-to -https-waitress-wsgi-server –

+1

Havent сам использовал официантку, однако я бы предположил, что nginx будет более высокой производительности, обслуживая статические файлы и другие вещи. nginx отлично подходит для балансировки нагрузки и т. д. Также у него есть некоторые базовые инструменты для защиты от DDOS и т. д. когда он может более эффективно управлять памятью. Но в конце дня, я думаю, вы должны использовать все, что работает для вас. Я бы дал nginx попробовать – miki725

+0

Да, я принял ваш совет и глубоко погрузился в создание nginx + gunicorn. Все работает там, за исключением случаев, когда я пытаюсь получить доступ к некоторым записям DB, я получаю ** недопустимый синтаксис ввода для типа inet ** error. Если вы можете помочь, быстро взгляните на отдельные вопросы, которые я только что открыл: http://stackoverflow.com/questions/34238623/invalid-input-syntax-for-type-inet-db-error-in-django-app -с-Postgres-и-гу –