我正在将生产服务器切换为使用virtualenv
,并且我想了解在生产环境中设置虚拟环境的最佳实践。以下问题是我今天在尝试弄清楚这一点时遇到的问题:
- 我应该使用哪个用户来创建虚拟环境?
- 用户应该把虚拟环境放在哪里?
- 我如何使用该用户的权限激活虚拟环境?
Virtualenv 几乎将由 Apache 专门使用,因此我认为正确的用户是www-data
,并且 virtualenv 的位置可能是/var/www/.virtualenvs
。
这似乎没问题,但下一个问题是它www-data
实际上没有登录 shell 并且无法写入它自己的主目录(/var/www/),所以当我尝试激活时virtualenv
,它不起作用,当我尝试使用 pip 安装东西时,我收到如下错误:
目录“/var/www/.cache/pip/http”或其父目录不属于当前用户,并且缓存已被禁用。请检查该目录的权限和所有者。如果使用 sudo 执行 pip,您可能需要 sudo 的 -H 标志。
(即使我使用-H
也会出现这个错误。)
因此,我可以为创建一个登录 shell www-data
,但这感觉像是一种安全反模式。
我可以授予www-data
其主目录的访问权限(/var/www/
),但这显然是一种安全反模式。
这方面有规范吗?我花了太多的时间来解决这个问题,感觉应该简单得多。
答案1
在虚拟环境中运行与在任何其他应用程序中运行没有什么不同。您使用具有执行应用程序所需操作所需的最少权限的用户。
以您自己的身份运行它是不可取的。