应该如何在生产Web服务器(用户,位置等)中设置virtualenv

我将生产服务器切换到使用virtualenv ,我想了解在生产环境中设置virtualenv的最佳实践。 下面的问题是我今天试图解决的问题:

  • 我应该使用什么用户来创buildvirtualenv?
  • 用户应该在哪里放置virtualenv?
  • 我如何使用该用户的权限激活virtualenv?

Virtualenv将被几乎完全由Apache使用,所以我认为正确的用户是www-data ,并且virtualenv的位置可以是/var/www/.virtualenvs

这似乎是好的,但接下来的问题是, www-data实际上并没有一个loginshell,不能写入自己的主目录(/ var / www /),所以当我尝试激活virtualenv ,它doesn不起作用,当我尝试使用pip安装东西时,出现如下错误:

目录'/var/www/.cache/pip/http'或其父目录不属于当前用户,并且caching已被禁用。 请检查该目录的权限和所有者。 如果用sudo执行pip,你可能需要sudo的-H标志。

(即使我使用-H我得到这个错误。)

所以,我可以创build一个www-dataloginshell,但感觉就像一个安全反模式。

我可以将www-data访问到它的主目录( /var/www/ ),但这显然是一种安全反模式。

这有没有规范? 我已经烧了太多周期试图弄清楚这一点,感觉应该是更简单。

在virtualenv中运行与其他应用程序没有区别。 您使用具有执行应用程序所需操作所需的最less权限的用户。

将它作为自己来运行是不明智的。