在 Ubuntu Apache 子目录中配置 Django

在 Ubuntu Apache 子目录中配置 Django

我在 Ubuntu 14 上运行 apache2 服务器。现在我想配置 Apache 与 mod_wsgi 一起工作以在域的子目录(例如 www.abc.com/lab)上运行 Django,但我总是无法做到这一点。

顺便说一下,我已经成功安装了 Python。我可以执行python --versionwhich returns Python 2.7.3。以下是我的设置步骤:

  1. 我在 /var/www 下创建了一个 pylab 文件夹,里面有这些文件在里面.py,在里面.pyc、manage.py、settings.py、settings.pyc,最后是 urls.py

  2. 然后我去/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 错误。我做错了什么?

答案1

托管 Python 时,最好将 Python 源文件保留在外部DocumentRoot。Apache 有一个 mod_wsgi 模块,使用某个版本的 Python 编译而成。您可以在/var/log/apache2/error.log(注意:您可能需要使用 sudo 来读取此文件) 中找到此 Python 版本。

... 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则添加make altinstall而不是make install,否则可能会覆盖系统 python,这可能是致命的。

 ./configure --enable-optimizations --enable-shared --prefix=/opt/Python-3.8.2
 make -j4
 sudo make install

j4make中,它将使用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。

参考:

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

相关内容