<p>为了让Django应用程序在Apache下工作,您应该安装<code>mod_wsgi</code>(建议使用CMMI方法,以便确保为创建虚拟环境所使用的python版本编译它)。在</p>
<p>如果你没有httpd.conf文件,编辑/etc/apache2/apache2.conf并写入以下行:</p>
<p><code>Include /etc/apache2/httpd.conf</code></p>
<p>然后继续创建<code>httpd.conf</code>,并在其中添加以下内容:</p>
<pre><code>LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
WSGIPythonHome /some/path/where/is/an/empty/venv
Alias /static/ /MyDjangoProjectFolder/MyDjangoProject/static/
<Directory /MyDjangoProjectFolder/MyDjangoProject/static>
Require all granted
</Directory>
WSGIScriptAlias / /MyDjangoProjectFolder/MyDjangoProject/wsgi.py process-group=MyDjangoProject
<Directory /MyDjangoProjectFolder/MyDjangoProject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</code></pre>
<p>(旁注):您可能还希望在此处包含安全标头:</p>
^{pr2}$
<p>你的虚拟主机文件应该是这样的:</p>
<pre><code><VirtualHost *>
WSGIDaemonProcess MyDjangoProject
WSGIProcessGroup MyDjangoProject
WSGIScriptAlias / /MyDjangoProjectFolder/MyDjangoProject/wsgi.py
<Directory /MyDjangoProjectFolder/MyDjangoProject>
Require all granted
</Directory>
<VirtualHost>
</code></pre>
<p>根据<code>mod_wsgi</code>文档,这是对多个应用程序使用守护程序模式的配置(您可能需要添加或测试其他应用程序,因此这是一个很好的准备)。在</p>
<p><code>/some/path/where/is/an/empty/venv</code>是您想要在其中创建一个空虚拟环境的路径(使用<code>virtualenv</code>!!这样您就可以访问<code>activate_this.py</code>脚本!!)
确保在django项目中创建并激活另一个虚拟环境,在那里安装所有依赖项。在</p>
<p>您可能希望这样做,因为当您从WSGI文件中激活虚拟环境时,只使用python虚拟环境中的site packages目录。
如果您忽略了从<code>requirements.txt</code>安装一个包,但是这些包是在主python安装中安装的,那么它们将从那里使用,如果存在错误的版本或具有不同的依赖关系,则可能会出现一些错误。在</p>
<p>下一步是修改<code>wsgi.py</code>,方法是先添加这些行(在任何导入之前):</p>
<pre class="lang-py prettyprint-override"><code>python_home='/path/to/the/MyDjangoProjectFolder/venv'
activate_this=python_home+'/bin/activate_this.py'
with open(activate_this) as file_:
exec(file_.read(), dict(__file__=activate_this))
</code></pre>
<p>所以当mod_wsgi解析这个文件时,激活所有依赖项所在的虚拟环境,以便正常工作。在</p>
<p>另外,在同一个文件(<code>wsgi.py</code>)中,将django项目的路径添加到sys path:</p>
<pre class="lang-py prettyprint-override"><code>import sys
sys.path.append('/path/to/the/MyDjangoProjectFolder')
</code></pre>
<p>另外,别忘了设定
<code>DEBUG = False</code>并编辑<code>ALLOWED_HOSTS = ['.mydomainname.org']</code></p>