windows10+apache2.4+django 部署

1,971 阅读3分钟

windows10+apache2.4+django 部署

部署过程中, 踩了蛮多坑 记录一下吧

环境介绍

  1. python 3.7
  2. apache 2.4.15
  3. django 2.1
  4. windows10

安装apache2.4

最新版的apache2.4 : httpd-2.4.51-win64-VS16

  1. 下载后解压 图片alt
  2. Apache24 文件夹复制到自己的安装路径 这里我直接放到了C盘 C:/Apache24, 因为目前线上就是放在C盘 可能是为了方便装机吧 先看看里面都有些什么东西吧

图片alt

  1. 添加 apache 环境变量

APACHE_HOME=C:\Apache24

PATH= %APACHE_HOME%; %APACHE_HOME%\bin

环境变量直接添加到系统环境变量, 这里就不贴图了

  1. 安装到windows服务
 # 安装
 httpd -k install -n 服务名称
 # 启动
 1. httpd -k start [stop, restart]
 # 或者
 2. net start 服务名称

启动方法有很多 还可以打开 bin 目录下的 ApacheMonitor.exe 不过双击之后他不会弹出来, 会在右下角的托盘里面

然后 双击托盘图标 就可以打开 长这个样子

image-20211113155346657

如果启动过程中没有报错, 就可以打开浏览器, 访问一下 127.0.0.1 不出意外 就可以看到 It’s Work!

到此为止, Apache 安装完成

部署Django

  1. 下载 mod_wsgi

    使用 pip 安装 mod_wsgi.whl文件, 使用 pip 多的话 应该知道

    为什么要安装呢? 具体我也不知道 类似于 linux 上的 uwsgi

    如果之前没有安装过, 照着做就行了,踩坑的话 多踩踩很有必要的

    mod_wsgi下载地址: mod_wsgi下载

    打开上面的链接 搜索与你python 版本对应的

    image-20211113161047618

    这里要注意一下, 如果你使用 python 虚拟环境 部署django 的话 需要 在虚拟环境里面安装 (推荐使用虚拟环境)

     # 进入虚拟环境
     ...\env\Scripts\activate
     ​
     pip install 下载的mod_wsgi路径
     # 安装完之后 最好查看一下成功与否
     pip list | findStr "mod_wsgi"
    
  1. 修改Apache 默认配置文件 C:\Apache24\conf\httpd.conf

    修改之前 在django 的虚拟环境里面 需要 运行一下 mod_wsgi-express module-config

    运行之后 会返回三条路径 像这样

     LoadFile "C:/Users/Administrator/AppData/Local/Programs/Python/Python37/python37.dll"
     LoadModule wsgi_module "e:/development/django_project/env/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
     WSGIPythonHome "e:/development/django_project/env"
    

    一定要自己生成的, 不要用我的!

    把上面的路径 复制 到 apache 的配置文件中 并且 修改 ListenServerName

     ......
     Define SRVROOT "C:/Apache24"   
     ServerRoot "${SRVROOT}"
     ......
     ​
     #Listen 12.34.56.78:80
     # 这里我修改为9000 
     Listen 9000
     ......
     ​
     ServerName localhost:9000
     ......
     ​
     ​
     # 加载 mod_wsgi
     LoadFile "C:/Users/Administrator/AppData/Local/Programs/Python/Python37/python37.dll"
     LoadModule wsgi_module "e:/development/django_project/env/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
     WSGIPythonHome "e:/development/django_project/env"
     ​
     # 设置工程路径
     WSGIPythonPath E:\development\django_project
     ​
     # 设置Django项目中的wsgi路径
     WSGIScriptAlias / E:\development\django_project\django_project\wsgi.py
     # 设置wsgi文件权限
     <Directory E:\development\django_project\django_project>
         <Files wsgi.py>
             Require all granted
         </Files>
     </Directory>
     ​
     # 设置静态文件路径 做路径映射
     Alias /assets E:\development\online\django_project\static
     # 设置静态路径权限
     <Directory E:\development\online\django_project\static>
         AllowOverride None  
         Options None  
         Require all granted  
     </Directory>
    
  2. 重启Apache

    httpd -k resfart

    上面这条命令 运行之后没有任何提示

    net stop apache24

    net start apache24

    上面这两条 有相关提示 至少会告诉你 启动成功与否

    如果失败 就去 C:\Apache24\logs 目录 查看 相关的error日志

    好了 回到正题

    往往这个时候 如果不出意外的话 就应该出意外了!

    我的Apache在这里 无法启动, 日志如下:

    Fatal Python error: initfsencoding: unable to load the file system codec ModuleNotFoundError: No module named 'encodings'

    看到这个 感觉到很熟悉 估计是之前 折腾u盘的python 环境时见到过

    因为这个encdings 是python 自带的库 所以 我去本机python路径下查看了这个库的路径 并把它添加在了 系统环境变量里面

    但是 还是没能解决 最后 是找到了 这篇 window2008下,apache+mod_msgi+flask出现问题,请大侠帮忙瞧瞧

    他是 添加了 PYTHONHOMWPYTHONPATH

    PYTHONHOME="C:\Users\Administrator\AppData\Local\Programs\Python\Python37" PYTHONPATH="C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Lib"

    添加完之后 需要重启机器

    不知道为什么????? 我尝试之后就可以启动了

部署结束

当时部署 遇到的问题 现在已经有点忘记了, 还是前天的事情, 脑子真的不行了

有时间 再尝试一下 apache 多站点部署