• 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:gxydomc_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

  • 相关阅读:
    c++中关于用stringstream进行的类型转化
    c++中字符串的反转
    搬家
    初次见面,请多关照。
    CCPC2019吉林省赛&&东北地区赛游记
    VS Code下搭建简单的Haskell开发环境
    从零开始的KMP&&AC自动机
    从零开始的LCA(最近公共祖先)
    LuoguP2123 皇后游戏
    LuoguP1080 国王游戏
  • 原文地址:https://www.cnblogs.com/luodaxia/p/12505153.html
Copyright © 2020-2023  润新知