簡體   English   中英

嘗試在CentOS上以守護程序模式配置Django / mod_wsgi應用程序時python-home選項失敗

[英]python-home option fails when attempting to configure Django/mod_wsgi application in daemon mode on CentOS

我有一個在Apache 2.4和mod_wsgi 4.6.4的Centos 7.5上運行的Django應用程序。 我很難讓mod_wsgi使用想要使用的虛擬環境。 我通過yum安裝了Python 3.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>

此配置找不到在虛擬環境中安裝的任何軟件包。 轉儲sys.path會顯示該路徑未按預期包含/path/to/venv/lib/python3.6/site-packages,而是/lib/python3.6/site-packages(即系統目錄)。 我能夠運行我的應用程序的唯一方法是將WSGIDaemonProcess指令更改為:

WSGIDaemonProcess myapp python-path=/path/to/my/app:/path/to/venv/lib/python3.6/site-packages

第一個配置(建議使用python-home )在具有Python 3.6和mod_wsgi 4.5.24的macOS 10.12上確實適合我。 兩種環境之間的最大區別是在CentOS服務器上啟用了SELinux,但audit2allow卻沒有顯示任何解釋我問題的事實。

我明白了。 我仍然不確定為什么我不能第一次弄清楚這一點,但是懷疑這是SELinux的問題。 問題在於,虛擬環境目錄下的所有內容都需要具有httpd_sys_content_t上下文,但動態加載的二進制庫除外,后者需要httpd_sys_script_exec_t 一旦完成此操作, WSGIDaemonProcesspython-home參數即可按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM