Настройте Django в подкаталоге Apache на Ubuntu.

Вопрос или проблема

Я запускаю сервер apache2 на Ubuntu 14. Теперь я хочу настроить Apache для работы с mod_wsgi, чтобы запускать Django в подкаталоге домена, например, www.abc.com/lab, но у меня это не получается.

Кстати, я успешно установил Python. Я могу выполнить python --version, что возвращает Python 2.7.3. Вот мои шаги по настройке:

  1. Я создаю папку pylab в /var/www, внутри которой находятся файлы init.py, init.pyc, manage.py, settings.py, settings.pyc и, наконец, urls.py

  2. Затем я перехожу в /etc/apache2/sites-available и создаю файл lab со следующим содержимым:

    <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/pylab processes=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 с как минимум включенными флагами optimizations и shared. Если вы не добавите --prefix, тогда выполните make 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

    #Статический контент
    Alias /static /path/to/project/static
    <Directory /path/to/project/static>
        AllowOverride None
        require all granted
    </Directory>

    #WSGI
    WSGIScriptAlias / /path/to/wsgi.py.  # путь включает wsgi.py
    <Directory /path/containing/wsgi.py>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

Наконец, включите сайт и перезапустите Apache плавно:

sudo a2ensite 000-default
sudo apachectl graceful

Посетите localhost из любого браузера, и это должно работать.

Если вы хотите разместить его в подпапке ‘lab’, замените WSGIScriptAlias в файле конфигурации apache на

SetEnv SCRIPT_NAME lab
WSGIScriptAlias /lab/ /path/to/wsgi.py.  # путь включает wsgi.py 

и снова плавно перезапустите Apache.

Ссылки:

  1. https://phoenixnap.com/kb/how-to-install-python-3-ubuntu
  2. https://github.com/GrahamDumpleton/mod_wsgi

Ответ или решение

Настройка Django на субдомене Apache на Ubuntu — это задача, требующая достаточно внимательного подхода, особенно если речь идет о старой версии Ubuntu 14.04, Python 2.7.3, как в вашем случае. В данном ответе мы подробно разберем основные шаги настройки с учетом возможных проблем и улучшений.

Теория

Цель заключается в интеграции вашего Django-приложения с Apache-сервером с использованием модуля mod_wsgi. Django должен быть доступен по пути www.abc.com/lab. Для этого потребуется правильно настроить Apache, сформировать WSGI-файл для запуска Django, а также убедиться в совместимости версий Python и mod_wsgi.

Пример

  1. Обновление системных пакетов и установление необходимых зависимостей:

    sudo apt update
    sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget apache2 apache2-dev
  2. Установка Python и mod_wsgi:

    Загрузите и установите Python с нужной версией (например, Python 3.8):

    wget https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz
    tar -xf Python-3.8.2.tgz
    cd Python-3.8.2
    ./configure --enable-optimizations --enable-shared --prefix=/opt/Python-3.8.2
    make -j4
    sudo make altinstall

    Установите mod_wsgi:

    cd /your/path/to/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
  3. Apache Configuration:

    Откройте конфигурационный файл Apache и добавьте необходимые настройки в <VirtualHost>:

    <VirtualHost *:80>
       ServerName www.abc.com
    
       # Static content
       Alias /static/ /var/www/pylab/static/
       <Directory /var/www/pylab/static/>
           Require all granted
       </Directory>
    
       # Media content
       Alias /media/ /var/www/pylab/media/
       <Directory /var/www/pylab/media/>
           Require all granted
       </Directory>
    
       # WSGI configuration
       WSGIDaemonProcess pylab python-home=/path/to/venv python-path=/var/www/pylab
       WSGIProcessGroup pylab
       WSGIScriptAlias /lab /var/www/pylab/wsgi.py
    
       <Directory /var/www/pylab>
           <Files wsgi.py>
               Require all granted
           </Files>
       </Directory>
    </VirtualHost>
  4. Корректировка WSGI файла:

    Убедитесь, что ваш wsgi.py файл правильно настроен для работы с Django:

    import os
    import sys
    
    sys.path.append('/var/www/pylab')
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings')
    
    from django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()
  5. Активация изменений и перезапуск Apache:

    Активировать новую конфигурацию и перезапустить Apache:

    sudo a2enmod wsgi
    sudo a2ensite your-config-file.conf
    sudo apachectl graceful

Применение

Настройка Django-сайта в подкаталоге Apache требует комплексного подхода, включающего обновление Python для совместимости с mod_wsgi, а также грамотную настройку веб-сервера Apache. Убедитесь, что все пути (например, к статическим файлам и WSGI-файлу) и окружения настроены корректно. Использование виртуального окружения (venv) для изоляции зависимостей Python также рекомендуется для минимизации конфликтов.

Таким образом, следуя данным шагам, вы сможете успешно развернуть Django-приложение в субдиректории на сервере Apache.

Оцените материал
Добавить комментарий

Капча загружается...