Windows下利用Apache部署多个Django项目

本文默认读者已经在能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

Windows下利用Apache部署多个Django项目

2.打开urls.py,添加访问媒体文件的路由

Windows下利用Apache部署多个Django项目

 3.同样给另一个项目配置即可 。

启动Apache

1.按照上面的修改完成后,启动Apache服务即可

2.如果启动Apache失败,则需要使用命令行查看原因,常见由于配置文件写错导致的启动错误

Windows下利用Apache部署多个Django项目

 

3.进入Apache目录下的bin目录,打开命令行工具,执行httpd.exe -t :

4.根据提示的错误信息修改配置文件,再次启动Apache服务即可

在浏览器访问项目报错及解决

Apache下配置了两个Django项目,Apache启动未报错

先访问网站A正常,再访问网站B失败。

重启Apache后,先访问B正常,再访问A失败

大概就是先访问的网站是可以正常使用的,再访问的那个就不行。

报错信息:

Windows下利用Apache部署多个Django项目

 

错误是系统库的问题。

经过一番查找,终于在国外一个技术网站找到了原因:大致意思是多次导入导致的,因为有两个项目,某个文件被系统多次加载运行导致报错。

解决方法:

找到图中报错的那个文件,注释断言语句

Windows下利用Apache部署多个Django项目

 

 将4句断言语句全部注释,再在上面的判断中添加pass即可完美解决问题。

 

补充一下

如果发现captcha验证码不显示的问题,可以尝试更改Pillow模块的版本

 

 

参考:

https://blog.csdn.net/yueguangMaNong/article/details/99588531

https://blog.csdn.net/yueguangMaNong/article/details/102780239

 

上一篇:uwsgi、wsgi和nginx的区别和关系


下一篇:nginx与uwsgi介绍