由于工作需要,最近要在一台windows Server2012 R2服务器上运行多个项目,过程中踩了一些坑,再此记录一下。
本文默认读者已经在能Apache中部署了单个项目,有一定经验,前期准备工作已经完成。
wsgi_mod使用的是python的一个库,没有使用网上的方式:LoadModule wsgi_module modules/mod_wsgi.so
LoadFile "d:/python3/python36.dll"
LoadModule wsgi_module "d:/python3/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
WSGIPythonHome "d:/python3"
整体流程
- 配置需要监听的端口
- 开启虚拟路由并加载文件
- 配置虚拟路由映射文件
- 在Django项目的wsgi.py中添加项目路径
- 启动Apache服务
配置需要监听的端口
-
打开Apache配置文件(Apache安装目录下:conf/httpd.conf)
-
找到
#Listen 12.34.56.78:80
-
在下方添加需要监听的端口,以8111,8222为例
Listen 127.0.0.1:8111 Listen 127.0.0.1:8222
若要让局域网内其他用户可以访问:
Listen 0.0.0.0:8111 Listen *:8222 # 以上两种方法均可
开启虚拟路由
- 找到
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
,建议直接搜索 - 将行首的
#
删除,取消注释,使其生效 - 找到
#Include conf/extra/httpd-vhosts.conf
- 同样将行首的
#
删除,使其生效,包含这个配置文件,接下来我们就是去编辑该文件。
配置项目映射
- 打开
httpd-vhosts.conf
文件(Apache安装目录下conf/extra/httpd-vhosts.conf) - 打开文件后,文件下面有一些类似下面这样的配置
<VirtualHost *:80> ServerName xxxx.example.com ServerAlias www.xxxx.example.com ... </VirtualHost>
- 删除原有配置
- 编写自己的配置进去
- 第一个服务使用8222端口
- 第二个服务使用8111端口
# 第一个服务,使用8222端口,这个端口必须是在前面的文件中添加了监听的端口。 <VirtualHost *:8222> # 这里填写域名,没有域名随便填写即可 ServerName test.com ServerAlias a.test.com # 项目的wsgi.py文件,注意目录前有`/`和空格 WSGIScriptAlias / [有空格] D:/PythonSpace/QualitySystem/QualitySystem/wsgi.py <Directory D:/PythonSpace/QualitySystem> <Files wsgi.py> Require all granted </Files> </Directory> # 静态文件路径 Alias /static D:/PythonSpace/QualitySystem/static_dist <Directory D:/PythonSpace/QualitySystem/static_dist> AllowOverride None Options None Require all granted </Directory> # 项目根路径,经测试,这个写到项目所在文件夹或者直接进入文件夹内都可以 DocumentRoot "D:/PythonSpace/QualitySystem" <Directory "D:/PythonSpace/QualitySystem"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> # 错误日志记录文件 ErrorLog "logs/access_ate.log" </VirtualHost> # 第二个服务,使用8111端口 <VirtualHost *:8111> # 域名信息 ServerName allot.com ServerAlias www.allot.com # 项目wsgi.py文件路径 WSGIScriptAlias / d:/PythonSpace/Allot/Allot/wsgi.py <Directory d:/PythonSpace/Allot/Allot> <Files wsgi.py> Require all granted </Files> </Directory> # 静态文件路径 Alias /static D:/PythonSpace/Allot/static_dist <Directory D:/PythonSpace/Allot/static_dist> Require all granted </Directory> # 项目根目录,这个值写到了包含该项目的目录 DocumentRoot "D:/PythonSpace" <Directory "D:/PythonSpace"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> ErrorLog "logs/access_allot.log" </VirtualHost>
在wsgi.py中添加项目路径
- 打开项目的wsgi.py文件
- 添加两行(项目所在路径为:D:\PythonSpace\Allot)
import sys sys.path.append('D:\PythonSpace\Allot')
- 完成后的效果
import os import sys from django.core.wsgi import get_wsgi_application sys.path.append('D:\PythonSpace\Allot') os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Allot.settings') application = get_wsgi_application()
- 注意:这里的项目路径必须写到项目文件夹,只到包含项目的文件夹是不行的
- 同样修改另一个项目的wsgi.py文件即可
启动Apache
-
按照上面的修改完成后,启动Apache服务即可
-
如果启动Apache失败,则需要使用命令行查看原因,常见由于配置文件写错导致的启动错误
-
进入Apache目录下的bin目录,打开命令行工具,执行:
httpd.exe -t
-
根据提示的错误信息修改配置文件,再次启动Apache服务即可