Рекомендуется ли virtualenv для сервера производства django?

Я всегда использовал virtualenv для тестирования своего приложения в локальном хостинге, так как у меня изолированная среда и можно безопасно протестировать новую версию пакетов.

Теперь наступает время, когда я должен развернуть свое приложение на производственном сервере. Мне интересно, должен ли я также использовать virtualenv для производственного сервера, или просто нормальная установка должна делать. Поскольку это сервер производства, я всегда могу использовать правильную версию, которую я тестировал в dev-сервере (под виртуальным env)

Ответ 1

Я бы сделал это так, если вы когда-нибудь подумали, что на веб-сервере вы запускаете более одного проекта. Как только у вас есть два проекта, вы рискуете в будущем обновить любой пакет python, нарушив другой сайт.

Ответ 2

Рекомендуется ли virtualenv для сервера производства django?

Да, это заставляет проект не зависеть от определенных аспектов системной среды, а также позволяет сделать процесс развертывания более понятным и настраиваемым.

Я использую fabric, pip и virtualenv для развертывания всех моих проектов Django.

Ответ 3

Да, я думаю, вы должны использовать virtualenv для его развертывания. Это упрощает и облегчает вам работу, особенно если вы планируете развертывать несколько сервисов, например. сайты на основе django или другие проекты python. Вы не хотите, чтобы каждый из них загрязнял глобальную среду python своими пакетами.

Я думаю, что virtualenv поможет вам полностью управлять всеми вашими зависимостями.

Чтобы обновить ваше производство, все, что вам нужно сделать, это:

pip -r name_of_your_requirements_file.txt

Я использую virtualenvs в производстве, и вы можете использовать uWSGI для обслуживания приложений, а Cherokee - как веб-сервер.

Чтобы использовать ваш virtualenv в производстве, вам нужно будет добавить свой путь к вашему PYTHONPATH.

Например, если у вашего env есть путь "/home/www/my_project/env/", путь для добавления:

/home/www/env/lib/python2.7/site-packages/

Вы можете установить это по-разному, но если вы создаете свой интерфейс FCGI или uWSGI через manage.py, просто добавьте следующее на самой верхней части вашего manage.py(до остального):

import os
my_virtualenv_path = "/home/www/my_project/env/lib/python2.7/site-packages/"
# Add it to your PYTHONPATH
os.path.append(my_virtualenv_path)

Вы можете адаптировать это к своей настройке, на всякий случай, если вы также можете сделать следующее в оболочке:

export PYTHONPATH:$PYTHONPATH:/home/www/my_project/env/lib/python2.7/site-packages/

Вам также нужно будет добавить каталог, содержащий файл settings.py, в PYTHONPATH, поэтому Django сможет его обнаружить. Просто действуйте аналогичным образом.

Ответ 4

В большинстве случаев я бы согласился, что лучше иметь виртуальный диск, даже если это не похоже на то, что вам нужно, когда вы впервые настроили сервер. Тем не менее, если вы используете какое-то облачное обслуживание и разворачиваете серверы для определенной задачи в течение короткого времени, я не вижу смысла использовать virtualenv.

Ответ 5

Я думаю, что это хороший признак того, что его полностью поддерживающее производственное решение, когда uwsgi напрямую поддерживает его с флагом vhost: http://projects.unbit.it/uwsgi/wiki/VirtualHosting

Ответ 6

Использование контейнеров Docker для развертывания разработки и производства довольно популярно сейчас, поэтому, если вы планируете следовать этой тенденции, вам больше не понадобится virtualenv.