Windows下django项目部署 通过Apache2.4+mod_wsgi

经过几天踩坑,记录在Windows10下通过Apache2.4部署Django项目的过程
运行环境:

     先说下环境,怎么安装倒是其次的,版本很重要,我是根据mod_wsgi的版本要求下载的各个版本(python,Apache2.4)

    mod_wsgi 下载地址://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi

    下面这张图说明python与Apache的版本:

    版本信息:
    Apache2.4VC14 64bit
    Python 3.5.2-amd64
    Django 2.2 
    MySQL 8.0.19  

   Apache2.4安装:
     在Apache官网上找到对应的安装包
        下载Apache2.4 VC14 地址://www.apachelounge.com/download/vc14/
    打开httpd.conf文件(在Apache24/conf目录下)
       Define SRVROOT "C:\web\Apache24"
       Listen 80
       ServerName www.example.com:80
       DocumentRoot "C:\web\Apache24\htdocs"
       <Directory "C:\web\Apache24\htdocs">
    具体如何安装Apache不多说了,下面这几条常用命令还是说明一下:
        httpd -k install -n   #安装Apache服务
        net start/stop Apache2.4   #启动停止Apache服务
        sc delete Apache2.4   #删除Apache服务
        httpd -k uninstall   #卸载Apache

    python-3.5安装:
        本文略
    Mysql-8.0.19安装:
        本文略;但运行时mysql库需配置好。

    下面具体讲述mod_wsgi相关配置:

        在上述完成之后,Apache启动访问IP地址访问出现 It WORKS! ,开始部署。
     在Django项目文件夹下建一个虚拟环境:

        pip install virtualenv   #下载virtualenv包
        virtualenv 1_env    #新建环境1_env
        activate         #须cd到\1_env\Scripts目录下运行activate

      先将下载好的mod_wsgi-4.7.0+ap24vc14-cp35-cp35m-win_amd64.whl复制到Scripts目录
        pip install "c:\djangomode\1_env\mod_wsgi-4.7.0+ap24vc14-cp35-cp35m-win_amd64.whl"  #通过pip安装mod_wsgi

      如果安装失败检测自己所下载对应的版本是否有问题,成功的话继续往下走;

        mod_wsgi-express module-config   #在刚才的环境里面运行命令,会得到两条配置信息,将信息拷贝下来,后面有用
        两条像这样的配置信息:
        LoadModule wsgi_module "c:/djangomode/1_env/lib/site-packages/mod_wsgi/server/mod_wsgi.cp35-win_amd64.pyd"
        WSGIPythonHome "c:/djangomode/1_env"

      注:可能你们看过其他博主输出的是三条配置,不过不要紧,我们无需设置LoadFile "c:/python35/python35.dll

      Django项目setting.py修改:
        这里先说一下原因,setting配置相对路径信息在移到Apache与mod_wsgi运行时,相对路径会访问不了,需要修改为绝对路径。
      在我修改为绝对路径时,运行Apache报了一个错

      OSError: [Errno 22] Invalid argument: 'C:\\\\Djangomode\\templates\\\\500.html'\r 

       需要在文件路径前加上 r"filepath"
       r"filepath":意思是指为了避免\xx是一个转义字符而导致的错误,也就是说加上r之后,""里的就不再出现转义字符,编程纯的文件地址。

        TEMPLATES = [{
    'DIRS': [r'C:\Djangomode\templates']
   ]
    注:这里只描述一处,其余相对路径也需改成绝对路径并加上 r 。

    在项目正式上线时必须将DEBUG设为False:

        DEBUG = False

    可指定主机,若元素为'*',表示所有同一局域网内的网络均可被访问:

        ALLOWED_HOSTS = ['*']
    配置Apache2.4的httpd.con文件:

        DocumentRoot "C:\Djangomode"   #Djangomode为项目根目录
        <Directory "C:\Djangomode">


        在文件底部加上下面代码(需根据实际环境更改参数)

        ##--------------- Django项目部署配置 ---------------##

        LoadModule wsgi_module "c:/djangomode/1_env/lib/site-packages/mod_wsgi/server/mod_wsgi.cp35-win_amd64.pyd"
        WSGIPythonHome "c:/djangomode/1_env"


        #指定项目的"wsgi.py"配置文件路径
        WSGIScriptAlias / "C:\Djangomode\Djangomode\wsgi.py"

        #指定Django项目根目录
        WSGIPythonPath "C:\Djangomode"
        <Directory "C:\Djangomode\Djangomode">
        <Files wsgi.py>
        Require all granted
        </Files>
        </Directory>

        #项目静态文件地址
        Alias /static "C:\Djangomode\static"
        <Directory "C:\Djangomode\static">
        AllowOverride None
        Options None
        Require all granted
        </Directory>

        #项目上传文件根目录
        Alias /uploads "C:\Djangomode\uploads"
        <Directory "C:\Djangomode\uploads">
        AllowOverride None
        Options None
        Require all granted
        </Directory>
        
        修改完之后重启Apache服务,Apache服务属性会被修改,如下图:

        在浏览器上输入IP地址端口或主机域名访问Django项目,在httpd.conf中配置的主机域名ServerName 
        etc/hosts需加入域名如:

        127.0.0.1 Djangomode   

        检查ip地址或域名是否正常,在cmd窗口输入ping如:
         ping www.baidu.com   #ping的通则正常

        访问成功!祝贺自己,耶!