我有一个Django应用程序,运行在centos7.5上,带有apache2.4和mod_wsgi4.6.4。我很难让mod\wsgi使用我想要它使用的虚拟环境。我通过yum安装了python3.6,并用它创建了一个虚拟环境。我从源代码编译mod_wsgi,使用with python选项将其指向正确的python二进制文件。我预期的(近似)Apache配置可以工作,但不起作用,如下所示:
# Required because of some third-party packages that use the
# simplified GIL state API
WSGIApplicationGroup %{GLOBAL}
<VirtualHost *:80>
WSGIDaemonProcess myapp python-home=/path/to/venv python-path=/path/to/my/app
WSGIProcessGroup myapp
WSGIScriptAlias / /path/to/my/app/wsgi.py
</VirtualHost>
<VirtualHost *:443>
WSGIProcessGroup myapp
WSGIScriptAlias / /path/to/my/app/wsgi.py
</VirtualHost>
此配置找不到虚拟环境中安装的任何包。倾倒系统路径显示路径不包含预期的/path/to/venv/lib/python3.6/site-packages,而是/lib/python3.6/site-packages(即系统目录)。我能够让我的应用程序运行的唯一方法是将WSGIDaemonProcess
指令更改为:
第一个配置(按照建议使用python-home
)在MacOS10.12和Python3.6和mod wsgi 4.5.24上确实可以工作。这两个环境之间的一个很大的区别是在CentOS服务器上启用了SELinux,但是audit2allow
没有显示任何可以解释我的问题的内容。在
我弄明白了。我仍然不知道为什么我第一次就不能弄清楚,但这是一个SELinux问题,正如所怀疑的那样。问题是虚拟环境目录下的所有内容都需要有
httpd_sys_content_t
上下文,除了动态加载的二进制库,它需要httpd_sys_script_exec_t
。一旦我这样做了,python-home
参数就如预期的那样工作了。在相关问题 更多 >
编程相关推荐