安装Python,mod_wsgi,Apache
在好心人已经帮我们编译好的发布网站可以找到需要mod_wsgi的版本。
因为我的系统是64位,Python是35,所以选择了mod_wsgi‑4.5.17+ap24vc14‑cp35‑cp35m‑win_amd64.whl。
amd64就表示适用于64位系统,不带这个就是适用于32位。cp35就是指对应的python版本是3.5。
下载之后,用pip命令安装,可以在python的安装目录下找到
\lib\site-packages\mod_wsgi\server\mod_wsgi.cp35-win_amd64.pyd。
注意到安装的mod_wsgi的是指定ap24vc14,这意味着需要VC14编译的Apache2.4。于是到Apache官网找找到对应的版本,下载解压。找到httpd.conf文件,加入
LoadModule wsgi_module "path\to\python\lib\site-packages\mod_wsgi\server\mod_wsgi.cp35-win_amd64.pyd"
这将使Apache能使用该模块。
Apache部署单个Django项目
将项目文件拷贝到服务器后,需要运行命令python manage.py collectstatic,这将把项目需要的静态文件拷贝到在项目setting.py中设置的STATIC_ROOT的目录中,包括django自带的admin的静态文件。
然后在httpd.conf文件中需要添加以下代码
WSGIPythonHome /path/to/python
WSGIPythonPath /path/to/DjangoProject
WSGIScriptAlias / /path/to/DjangoProject/ProjectName/wsgi.py
Require all granted
Alias /robots.txt /path/to/DjangoProject/static/robots.txt
Alias /favicon.ico /path/to/DjangoProject/static/favicon.ico
Alias /static/ /path/to/DjangoProject/static/
Require all granted
Alias /media/ /path/to/DjangoProject/media/
Require all granted
接下来运行Apache目录下bin中httpd.exe文件,单个项目的部署就结束了。
修改配置运行多站点在同一服务器上
对于多个Django项目部署,我们可以从单个项目出发。
WSGIPythonHome /path/to/python 决定了使用的Python版本。而 WSGIPythonPath /path/to/DjangoProject 决定了Apache部署的Django项目目录。
很容易知道我们只需要增加 WSGIPythonPath 的值,用分号隔开。
如同这样
WSGIPythonPath/path/to/DjangoProject_0;/path/to/DjangoProject_1;
再将原本写在httpd.conf文件的配置删去。在extra/httpd-vhosts.conf文件中添加需要添加的站点。需要在httpd.conf中增加一行(一般来说自带此条代码,只需要把前面的#注释符号去掉就行)
Include conf/extra/httpd-vhosts.conf
以引用该文件。
httpd-vhosts.conf文件内容如下填写,可以按照本模板重复填写多个站点,只要在WSGIPythonPath里增加对应的值即可。
DocumentRoot "path/to/project"
ServerName domain
ServerAlias domain
ErrorLog "logs/domain-error.log"
CustomLog "logs/domain-access.log" common
WSGIScriptAlias / path/to/project/projectName/wsgi.py
Require all granted
Alias /robots.txt /path/to/DjangoProject/static/robots.txt
Alias /favicon.ico /path/to/DjangoProject/static/favicon.ico
Alias /static/ /path/to/DjangoProject/static/
Require all granted
Alias /media/ /path/to/DjangoProject/media/
Require all granted