本文默认读者已经在能Apache中部署了单个项目,有一定经验,前期准备工作已经完成。
整体流程
1.配置需要监听的端口
2.开启虚拟路由并加载文件
3.配置虚拟路由映射文件
4.在Django项目的wsgi.py中添加项目路径和虚拟环境路径
5.配置访问媒体文件的url
6.启动Apache服务
配置需要监听的端口
1.打开Apache配置文件(Apache安装目录下:conf/httpd.conf)
2.找到#Listen 12.34.56.78:80
3.在下方添加需要监听的端口,以880,8001为例
Listen 127.0.0.1:8080 Listen 127.0.0.1:8001
若要让局域网内其他用户可以访问:
Listen 0.0.0.0:8080 Listen *:8001 # 以上两种方法均可
开启虚拟路由
1.找到#LoadModule vhost_alias_module modules/mod_vhost_alias.so
,建议直接搜索
2.将行首的#
删除,取消注释,使其生效
3.找到#Include conf/extra/httpd-vhosts.conf
4.同样将行首的#
删除,使其生效,包含这个配置文件,接下来我们就是去编辑该文件。
配置项目映射
1.打开httpd-vhosts.conf
文件(Apache安装目录下conf/extra/httpd-vhosts.conf)
2.打开文件后,文件下面有一些类似下面这样的配置
<VirtualHost *:80> ServerName xxxx.example.com ServerAlias www.xxxx.example.com ... </VirtualHost>
3.注释掉原有配置
4.编写自己的配置进去
第一个服务使用8080端口
第二个服务使用8001端口
# 第一个服务,使用8080端口,这个端口必须是在前面的文件中添加了监听的端口。 <VirtualHost *:8080> # 这里填写域名,没有域名随便填写即可 ServerName test1.com ServerAlias a.test1.com # 项目的wsgi.py文件,注意目录前有`/`和空格 WSGIScriptAlias / D:/gxyd/zdhpt/zdhpt/wsgi.py <Directory D:/gxyd/zdhpt/zdhpt> <Files wsgi.py> Require all granted </Files> </Directory> # 静态文件路径 Alias /static D:/gxyd/zdhpt/static <Directory D:/gxyd/zdhpt/static> AllowOverride None Options None Require all granted </Directory> # 项目根路径,经测试,这个写到项目所在文件夹或者直接进入文件夹内都可以 DocumentRoot "D:/gxyd/zdhpt" <Directory "D:/gxyd/zdhpt"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> # 错误日志记录文件 ErrorLog "logs/zdhpt_error.log" #访问的日志记录文件 CustomLog "logs/zdhpt_access.log" common </VirtualHost> # 第二个服务,使用8001端口 <VirtualHost *:8001> # 域名信息 ServerName test2.com ServerAlias www.test2.com # 项目的wsgi.py文件,注意目录前有`/`和空格 WSGIScriptAlias / D:/gxyd/bomc_i/bomc_i/wsgi.py <Directory D:/gxyd/bomc_i/bomc_i> <Files wsgi.py> Require all granted </Files> </Directory> # 静态文件路径 Alias /static D:/gxyd/bomc_i/all_static <Directory D:/gxyd/bomc_i/all_static> AllowOverride None Options None Require all granted </Directory> # 项目根路径,经测试,这个写到项目所在文件夹或者直接进入文件夹内都可以 DocumentRoot "D:/gxyd/bomc_i" <Directory "D:/gxyd/bomc_i"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> # 错误日志记录文件 ErrorLog "logs/bomc_i_error.log" #访问的日志记录文件 CustomLog "logs/bomc_i_access.log" common </VirtualHost>
1.打开项目的wsgi.py文件
2.添加四行代码(项目所在路径为:D:\gxyd\bomc_i)
import sys sys.path.append('D:/gxyd/bomc_i') # 加入本项目的虚拟环境(当两个django项目使用不同版本时,这可能非常有用) virtualenv_dir = 'D:/gxyd/bomc_i/venv/Lib/site-packages' # 虚拟环境python包文件夹 sys.path.insert(0, virtualenv_dir) # 加入导包路径
3.完成后的效果
import os from django.core.wsgi import get_wsgi_application import sys sys.path.append('D:/gxyd/bomc_i') # 加入本项目的虚拟环境(当两个django项目使用不同版本时,这可能非常有用) virtualenv_dir = 'D:/gxyd/bomc_i/venv/Lib/site-packages' # 虚拟环境python包文件夹 sys.path.insert(0, virtualenv_dir) # 加入导包路径 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bomc_i.settings") application = get_wsgi_application()
4.注意:这里的项目路径必须写到项目文件夹,只到包含项目的文件夹是不行的
5.同样修改另一个项目的wsgi.py文件即可
配置访问媒体文件的url
1.在测试环境下可以不配,但是部署到生产模式下必须要配置,不然访问不到媒体文件打开全局路由文件urls.py
2.打开urls.py,添加访问媒体文件的路由
3.同样给另一个项目配置即可 。
启动Apache
1.按照上面的修改完成后,启动Apache服务即可
2.如果启动Apache失败,则需要使用命令行查看原因,常见由于配置文件写错导致的启动错误
3.进入Apache目录下的bin目录,打开命令行工具,执行httpd.exe -t :
4.根据提示的错误信息修改配置文件,再次启动Apache服务即可
在浏览器访问项目报错及解决
Apache下配置了两个Django项目,Apache启动未报错
先访问网站A正常,再访问网站B失败。
重启Apache后,先访问B正常,再访问A失败
大概就是先访问的网站是可以正常使用的,再访问的那个就不行。
报错信息:
错误是系统库的问题。
经过一番查找,终于在国外一个技术网站找到了原因:大致意思是多次导入导致的,因为有两个项目,某个文件被系统多次加载运行导致报错。
解决方法:
找到图中报错的那个文件,注释断言语句
将4句断言语句全部注释,再在上面的判断中添加pass即可完美解决问题。
补充一下
如果发现captcha验证码不显示的问题,可以尝试更改Pillow模块的版本
参考:
https://blog.csdn.net/yueguangMaNong/article/details/99588531
https://blog.csdn.net/yueguangMaNong/article/details/102780239