Я выполняю apache2 сервер на Ubuntu 14. Теперь я хочу настроить Apache для работы с mod_wsgi для выполнения Django на подкаталоге домена, такого как www.abc.com/lab, но мне всегда не удается сделать это.
Я успешно установил Python между прочим. Я могу сделать python --version
который возвращается Python 2.7.3
. Следующее является моими шагами установки:
Я создаю pylab папку под/var/www, внутри имеет эти файлы init.py, init.pyc, manage.py, settings.py, settings.pyc, и наконец urls.py
Я затем перехожу в /etc/apache2/sites-available
и создайте файл лаборатории со следующим содержанием:
<VirtualHost *:80>
ServerName /lab
DocumentRoot /var/www/pylab
<Directory /lab>
Options All
AllowOverride All
Require all granted
</Directory>
Alias /static/ /var/www/pylab/static/
<Location "/static/">
Options -Indexes
</Location>
Alias /media/ /var/www/pylab/media/
<Location "/media/">
Options -Indexes
</Location>
WSGIScriptAlias / /var/www/pylab/wsgi.py
WSGIDaemonProcess labapi python-path=/var/www/pylabprocesses=2 threads=15 display-name=Pylab
WSGIProcessGroup pylab
</VirtualHost>
Но когда я получаю доступ к www.abc.com/lab, я только вижу 404 ошибки. Что я делал неправильно?
При размещении python предпочтительно хранить исходные файлы python вне DocumentRoot
. В Apache есть модуль mod_wsgi, скомпилированный с некоторой версией Python. Вы можете найти эту версию Python в /var/log/apache2/error.log
(Примечание: вам может понадобиться использовать sudo для чтения этого файла).
... mod_wsgi/4.7.1 Python/3.8 ...
Установите Python
Вы должны использовать ту же версию Python в своем проекте. Если вы хотите использовать другую версию Python, вы должны скомпилировать python и mod_wsgi из исходного кода. Установите эти пакеты:
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget
Загрузите и скомпилируйте python, по крайней мере, с включенными оптимизациями и общими флагами.Если вы не добавите --prefix
, тогда сделайте altinstall
вместо make install
, в противном случае это может привести к перезаписи системного python, что может быть фатальным.
./configure --enable-optimizations --enable-shared --prefix=/opt/Python-3.8.2
make -j4
sudo make install
С j4
в make он будет использовать 4 параллельных процесса для компиляции.
Установите WSGI
Кроме того, вы должны скачать и скомпилировать mod_wsgi из исходников. Установите apache(-dev):
sudo apt install apache2 apache2-dev
и скомпилируйте mod_wsgi с этими флагами.
export LD_LIBRARY_PATH=/opt/Python-3.8.2/lib:$LD_LIBRARY_PATH
./configure --with-python=/opt/Python-3.8.2/bin/python3
make -j4
sudo make install
Открыть
sudo vim /etc/apache2/mods-available/wsgi.load
и добавить в начало
SetEnv LD_LIBRARY_PATH /opt/Python-3.8.2/lib
SetEnv LD_RUN_PATH /opt/Python-3.8.2/lib
перед
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
Настроить Apache
sudo a2enmod wsgi
sudo apachectl graceful
Давайте теперь настроим apache
sudo vim /etc/apache2/sites-available/000-default.conf
В разделе VirtualHost напишите
WSGIDaemonProcess sitename python-home=/path/to/project/venv python-path=/folder/containing/manage.py
WSGIProcessGroup sitename
#Static content
Alias /static /path/to/project/static
<Directory /path/to/project/static>
AllowOverride None
require all granted
</Directory>
#WSGI
WSGIScriptAlias / /path/to/wsgi.py. # the path is inclusive of wsgi.py
<Directory /path/contaning/wsgi.py>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
наконец включить сайт и изящно перезапустить apache
sudo a2ensite 000-default
sudo apachectl graceful
Посетите localhost
из любого браузера, и он должен работать.
Если вы хотите разместить его в подпапке 'lab', замените WSGIScriptAlias
в файле apache-conf на
SetEnv SCRIPT_NAME lab
WSGIScriptAlias /lab /path/to/wsgi.py. # the path is inclusive of wsgi.py
и снова аккуратно перезапустите apache.
Ссылки: