在Apache和WSGI上部署Django

4
尽管我找到了大量技术支持来使用WSGI在Apache上部署Django,但实际上他们都让我感到困惑,我无法运行Django。我希望这是一个非常容易的工作,但作为新手,我面临困难。
我有两个Django项目,即website1和website2,分别位于我的/home/zia/Documents/Codes/Django/website1和.../website2目录中。包含settings.py文件的文件夹位于/website1和/website2目录内的根目录中。
已按要求安装了Apache、mod_wsgi等。如何编辑apache2.conf和wsgi.py文件,以使这两个项目在端口8080和8081上保持运行?
我已经为此问题奋斗了几天,并尝试了以下所有网站。

链接1,链接2,链接3,链接4


更新1:

我一开始就按照以下方法进行操作,以确保事情顺利进行,但发现自己遇到了一些新问题。请指导我哪里出错了。

  1. 安装mod-wsgi和apache2: sudo apt-get install libapache2-mod-wsgi && sudo apt-get update && sudo apt-get install apache2
  2. 通过修改文件“/etc/apache2/ports.conf”将apache2端口更改为8083而不是80:Listen 8083
  3. 在“/etc/hosts”文件中添加以下行:160.75.133.175 160.75.133.175
  4. 编辑“/etc/apache2/apache2.conf”文件中的以下代码:

<Directory /> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>

  1. 在“/etc/apache2/sites-available/”目录下创建名为“sql_api.conf”的文件:

<VirtualHost *:8083> ServerAdmin zia@gmail.com ServerName 160.75.133.175 ServerAlias http://160.75.133.175 <Directory /home/zia/Documents/Codes/Django/sql_api/ > Order deny,allow Allow from all </Directory> WSGIScriptAlias / /home/zia/Documents/Codes/Django/sql_api/root/wsgi.py WSGIDaemonProcess 160.75.133.175 user=www-data group=www-data threads=25 python-path=/home/zia/Documents/Codes/Django/sql_api/root/:/usr WSGIProcessGroup 160.75.133.175 ErrorLog /home/zia/Documents/Codes/Django/sql_api/root/error.log </VirtualHost>

一段用于配置Apache的虚拟主机的代码,其中包含了服务器的信息,以及指定程序运行所需的设置。
  1. 在“/etc/apache2/sites-available”目录下运行以下命令:sudo a2enmod wsgi && sudo a2ensite sql_api.conf && sudo service apache2 restart
  2. 打开http://160.75.133.175:8083/,但是出现以下错误: 服务器内部错误 服务器遇到了内部错误或配置错误,无法完成您的请求。 请联系服务器管理员zia@gmail.com,告知此错误发生的时间以及您在此之前执行的操作。 有关此错误的更多信息可能会在服务器错误日志中提供。 Apache/2.4.7 (Ubuntu) 服务器位于160.75.133.175端口8082

注意:当我在/var/www/目录中创建Django项目并采用相同方法时,一切正常!我认为是因为我试图访问/home/zia/....目录,所以出现了这个问题。不管怎样,这只是一个猜测。感谢您的帮助。


我不清楚你想做什么。你想在端口8080和8081上运行你的生产网站?为什么?通常你只需要使用不同的子域名即可。 - Daniel Roseman
我认为在这里使用Server Fault会更合适,不是吗? - Pablo
@Daniel:嗯……谢谢。我会这样做的。 - Zia
2个回答

3
感谢大家的帮助。最终找到了可行的步骤,请按照以下顺序执行:
1. 安装mod-wsgi和apache2: ``` sudo apt-get install libapache2-mod-wsgi && sudo apt-get update && sudo apt-get install apache2 ```
2. 通过修改“/etc/apache2/ports.conf”文件,将apache2端口改为8083而不是80:Listen 8083 3. 在“/etc/hosts”文件中添加以下行:160.75.133.175 160.75.133.175 4. 在“/etc/apache2/apache2.conf”文件中编辑以下代码:
``` Options Indexes FollowSymLinks AllowOverride None Require all granted ```
5. 在“/etc/apache2/sites-available/”目录下创建名为“sql_api.conf”的文件(可以使用不同名称创建多个.conf文件,每个文件对应不同的网站):
``` ServerAdmin zia@gmail.com ServerName 160.75.133.175 ServerAlias http://160.75.133.175 Order deny,allow Allow from all WSGIScriptAlias / /home/zia/Documents/Codes/Django/sql_api/root/wsgi.py WSGIDaemonProcess 160.75.133.175 user=www-data group=www-data threads=25 python-path=/home/zia/Documents/Codes/Django/sql_api/root/:/usr WSGIProcessGroup 160.75.133.175 ErrorLog /home/zia/Documents/Codes/Django/sql_api/root/error.log ```
6. 在“/home/zia/Documents/Codes/Django/sql_api/root/”目录下的wsgi.py文件中添加以下行:sys.path.append('/home/zia/Documents/Codes/Django/sql_api/root') sys.path.append('/home/zia/Documents/Codes/Django/sql_api') 7. 在“/etc/apache2/sites-available”目录下运行以下命令: ``` sudo a2enmod wsgi && sudo a2ensite sql_api.conf && sudo service apache2 restart ```
8. 打开 http://160.75.133.175:8083/

很高兴你把它搞定了!忽略我上一条评论。 - Chris Hawkes
这个答案以及这个教程 对我在将 Django 部署到 Apache Web 服务器上帮助很大。谢谢 @Zia! - Austin A

2
如果您对Apache配置进行了大量更改,则最好从头开始。我对Ubuntu下的设置最为熟悉。
您需要做的是在Apache下将两个站点设置为虚拟主机。安装完Apache后,有一个名为sites-available和sites-enabled的文件夹,其中应包含网站项目名称的虚拟主机文件。每个虚拟主机将指向您的.wsgi文件所在的位置。这些虚拟主机通常在相同的端口号下进行监听(如上面的Daniel所提到的),但根据域名请求任何一个应用程序。noobmovies.com、google.com等等。
如何使用Apache设置虚拟主机在这里解释得很清楚。不过,这假定您正在使用Ubuntu。

https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-14-04-lts

您的虚拟主机(该文件应以您的域名exp...noobmovies.com命名)将类似于以下内容...
**<VirtualHost *:8080>
    ServerAdmin your_admin_email@gmail.com
    ServerName  www.yourdomain.com
    ServerAlias yourdomain.com

    <Directory /home/path/your/project/ >
            Order deny,allow
            Allow from all
    </Directory>

    WSGIScriptAlias / /home/path/your/project/app/wsgi.py
    WSGIDaemonProcess  yourdomain.com user=www-data group=www-data threads=25 python-path=/path/to/your/project/app/:/path/to/python/virtual/host/site-packages
    WSGIProcessGroup yourdomain.com
    ErrorLog /path/to/your/app/error.log
</VirtualHost>**

记住,WSGIDaemonProcess 只有在使用 virtualenv 运行应用程序时才需要(你应该这样做)。这告诉 Apache 应该使用哪个 Python 来读取 WSGI 应用程序/运行 Django 应用程序。
因此,如果你使用的是 Ubuntu 或 Linux,你可能只想卸载 Apache 并重新安装,然后按照 Digital Ocean 的说明进行设置。

谢谢你!你的回答对我有所帮助,但只是在特定情况下。当我在 /var/www/ 目录下创建 Django 项目时,一切都正常工作,但由于我的项目位于不同的 /home/zia/... 目录中,我遇到了一些问题。请查看我上面更新的问题。 - Zia
很抱歉回复晚了。问题可能有很多种,但你需要查看的是 /var/log/apache2/error.log 文件,这将给出导致服务器错误的具体问题。 - Chris Hawkes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接